Branch instructions are recognized as a major impediment
to exploiting instruction level parallelism. Even with
sophisticated branch prediction techniques, many frequently
executed branches remain difficult to predict. An
architecture supporting predicated execution may allow the
compiler to remove many of these hard-to-predict branches,
reducing the number of branch mispredictions and thereby
improving performance. We present an in-depth analysis of
the characteristics of those branches which are frequently
mispredicted and examine the effectiveness of an advanced
compiler to eliminate these branches. Over the benchmarks
studied, an average of 27% of the dynamic branches and 56%
of the dynamic branch mispredictions are eliminated with
predicated execution support.