Predicated execution is the ability to associate a predicate, or guard,
with an instruction and to use that predicate to determine whether the
instruction executes or not. Much of the research to date on predicated
execution assumes a high level of architectural support of predicated
execution and focuses developing techniques to exploit these capabilities.
Researchers have shown that predicate execution is a very useful tool
in exposing and exploiting instruction level parallelism. Unfortunately,
there are several factors that make it very difficult to develop a
processor with a high level of architectural support for predicated
execution. A big factor is that the importance of backward compatibility
means that support for predication would usually have to come as an
extension on an existing instruction set. Another factor is that
some features which are assumed in a high level of support for predicated
execution are difficult and costly to implement. Given these factors,
techniques have to be developed that support predicated execution at
various levels of performance and cost, and the tradeoffs among these
techniques and levels of predication support need to be studied. This
thesis discusses several existing techniques and presents several new
techniques that support various levels of predicated execution and
discusses the tradeoffs among these techniques and level of support.