In the paper "Programs Follow Paths", the authors mention that false
paths in programs make test generation a very difficult problem.
It
seems to me that false paths may also adversely affect compiled code
performance if blocks are included into a hyperblock but lie only on
false paths within the hyperblock.
This will happen, for example, if a fairly frequently executed
hyperblock is marked for inclusion, but contains a hazard. Due
to the
hazard, the block is removed and tail duplication used to copy its
successors and form a valid hyperblock. Now, a few other frequently
executed blocks succeeding the hazardous block remain in the
hyperblock, but the only true paths through those blocks is through
the hazardous block. The inclusion of these "false" blocks translates
to the insertion of nops in the instruction stream.
The situation could be even worse when considering loop independent
code succeeding a loop. Suppose that a block succeeding a loop
is
only executed if the loop executes 8 or more iterations. Heuristics
determine that we wish to peel the loop 10 times, but due to code size
limitations it is peeled 4 times. Now, the included successor
block
becomes false and inserts nops into the instruction stream.
Path profiling and false path identification may resolve these
difficulties.