https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110528
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- With selective scheduling on my reduced testcase: ``` Time variable usr sys wall GGC phase setup : 0.00 ( 0%) 0.01 ( 25%) 0.01 ( 0%) 1825k ( 51%) phase parsing : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 174k ( 5%) phase opt and generate : 4.03 (100%) 0.03 ( 75%) 4.05 ( 99%) 1563k ( 44%) phase finalize : 0.00 ( 0%) 0.00 ( 0%) 0.02 ( 0%) 0 ( 0%) callgraph functions expansion : 4.02 (100%) 0.03 ( 75%) 4.05 ( 99%) 1521k ( 43%) callgraph ipa passes : 0.01 ( 0%) 0.00 ( 0%) 0.00 ( 0%) 29k ( 1%) CFG verifier : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 0 ( 0%) df use-def / def-use chains : 0.01 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 0 ( 0%) lexical analysis : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 0 ( 0%) tree operand scan : 0.01 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 5120 ( 0%) tree CCP : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 224 ( 0%) complete unrolling : 0.00 ( 0%) 0.01 ( 25%) 0.00 ( 0%) 482k ( 14%) tree SSA verifier : 0.03 ( 1%) 0.00 ( 0%) 0.01 ( 0%) 0 ( 0%) tree STMT verifier : 0.04 ( 1%) 0.00 ( 0%) 0.05 ( 1%) 0 ( 0%) expand : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 467k ( 13%) CSE : 0.01 ( 0%) 0.00 ( 0%) 0.00 ( 0%) 0 ( 0%) integrated RA : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 24k ( 1%) scheduling 2 : 3.91 ( 97%) 0.02 ( 50%) 3.92 ( 96%) 130k ( 4%) verify RTL sharing : 0.02 ( 0%) 0.00 ( 0%) 0.01 ( 0%) 0 ( 0%) TOTAL : 4.03 0.04 4.09 3564k Extra diagnostic checks enabled; compiler may run slowly. Configure with --enable-checking=release to disable checks. ``` Without: ``` Time variable usr sys wall GGC phase setup : 0.01 ( 7%) 0.00 ( 0%) 0.02 ( 11%) 1825k ( 49%) phase opt and generate : 0.14 ( 93%) 0.00 ( 0%) 0.14 ( 78%) 1694k ( 46%) phase finalize : 0.00 ( 0%) 0.00 ( 0%) 0.02 ( 11%) 0 ( 0%) callgraph functions expansion : 0.13 ( 87%) 0.00 ( 0%) 0.14 ( 78%) 1652k ( 45%) callgraph ipa passes : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 29k ( 1%) cfg construction : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 6%) 0 ( 0%) CFG verifier : 0.02 ( 13%) 0.00 ( 0%) 0.02 ( 11%) 0 ( 0%) alias analysis : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 6%) 1640 ( 0%) tree VRP : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 2160 ( 0%) tree operand scan : 0.01 ( 7%) 0.00 ( 0%) 0.01 ( 6%) 5120 ( 0%) tree DSE : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 0 ( 0%) complete unrolling : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 482k ( 13%) tree SSA verifier : 0.02 ( 13%) 0.00 ( 0%) 0.00 ( 0%) 0 ( 0%) tree STMT verifier : 0.03 ( 20%) 0.00 ( 0%) 0.05 ( 28%) 0 ( 0%) forward prop : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 0 ( 0%) integrated RA : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 6%) 24k ( 1%) reload CSE regs : 0.01 ( 7%) 0.00 ( 0%) 0.00 ( 0%) 48 ( 0%) scheduling 2 : 0.01 ( 7%) 0.00 ( 0%) 0.01 ( 6%) 260k ( 7%) initialize rtl : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 6%) 12k ( 0%) rest of compilation : 0.00 ( 0%) 0.00 ( 0%) 0.01 ( 6%) 3496 ( 0%) TOTAL : 0.15 0.00 0.18 3695k Extra diagnostic checks enabled; compiler may run slowly. Configure with --enable-checking=release to disable checks. ``` You can see selective scheduling is really bad.