This document discusses techniques for basic block scheduling and global code scheduling in compiler optimization. It covers:
1. List scheduling for basic block scheduling by constructing a data dependence graph and visiting nodes in prioritized topological order.
2. Global code scheduling techniques like upward and downward code motion to move instructions between basic blocks while preserving data and control dependencies.
3. An algorithm for region-based global scheduling that supports moving operations to control-equivalent or dominating blocks.