> Gcc only does this work in the second pass, but what's the > point? Is it wrong or just not necessary in the first sched > pass?
Regardless of the target architecture from the correctness point of view sched1 can be disabled. sched1 has as purpose shortening live ranges. Short live ranges allow the register allocation to: 1. generate less spills and 2. also to avoid useless live ranges splitting. The second point impacts the register renaming phase which allows sched2 phase to extract more ilp.