https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114855
--- Comment #21 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrew Macleod from comment #20) > I did an -O2 run after those patches. > > Highlights: > > tree SSA incremental : 117.74 ( 1%) 0.63 ( 3%) 120.37 ( > 1%) 1049M ( 24%) > dominator optimization : 680.49 ( 5%) 0.65 ( 4%) 686.40 ( > 5%) 170M ( 4%) > backwards jump threading :11253.23 ( 90%) 9.15 ( 49%)11332.34 ( > 90%) 1332M ( 30%) > TOTAL :12520.81 18.54 12622.54 > 4459M > > I suspect most of dom is the over and over edge recalculations, but I don't > actually know that. I do know that most of the 200 seconds at -O1 is, so it > seems a reasonable guess. > > the backwards threader I can't comment on, but time would be rational if > that were fixed. The backwards threader has some limits in place but it eventually re-evaluates all ranges on the path for each block considered - and as long as that range evaluation isn't bounded in the distance it looks it will run away. The main "source" of slowness is back_threader::find_taken_edge_cond which instantiates a path_range_query and evaluates range_of_stmt of the path ending conditional.