------- Comment #11 from nbenoit at tuxfamily dot org 2009-12-16 12:53 ------- The fastest is the variant with more jumps (442/convol.s in the diff) generated by GCC-4.4.2. In the one jump variant (r155286/convol.s in the diff), I guess it is the computing of both conditions before jumping which slows down the program.
Looking between revisions 151079 and 151080 (which is when the regression first appeared), the RTL expand dump shows a difference regarding branch prediction. I do not know if it is relevant: --- r151079/convol.c.135r.expand 2009-12-01 14:10:55.000000000 +0100 +++ r151080/convol.c.135r.expand 2009-12-01 14:11:03.000000000 +0100 @@ -5,7 +5,6 @@ ;; Generating RTL for gimple basic block 2 ;; Generating RTL for gimple basic block 3 -Failed to add probability note ;; Generating RTL for gimple basic block 4 @@ -20,13 +19,6 @@ ;; Generating RTL for gimple basic block 9 ;; Generating RTL for gimple basic block 10 -Purged non-fallthru edges from bb 14 -Predictions for insn 61 bb 3 - no prediction heuristics: 50.0% - combined heuristics: 50.0% -Predictions for insn 65 bb 13 - no prediction heuristics: 50.0% - combined heuristics: 50.0% I am about to attach the whole diff file. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42027