What limits ILP: Short basic blocks + data dependencies
Remedy 1: compiler optimizations
- loop unrolling
- trace scheduling, or more conservatively move code across branches with register renaming
- Scheduling of memory operations
Remedy 2: hardware enhancements -- speculative execution
- Branch prediction
- Predication
- Register renaming
- Load-store buffers