Systems and methods perform super-region instruction scheduling that
increases the instruction level parallelism for computer programs. A
compiler performs data flow analysis and memory interference analysis on
the code to determine data dependencies between entities such as
registers and memory locations. A region tree is constructed, where the
region tree contains a single entry block and a single exit block, with
potential intervening blocks representing different control flows through
the region. Instructions within blocks are moved to predecessor blocks
when there are no dependencies on the instruction to be moved, and when
the move results in greater opportunity for instruction level
parallelism. Redundant instructions from multiple paths can be merged
into a single instruction during the process of scheduling. In addition,
if a dependency can be removed the method transforms the instruction into
an instruction that can be moved to a block having available resources.