On 10/13/11 14:27, Alan Modra wrote: > Without the ifcvt > optimization for a function "int foo (int x)" we might have something > like > > r29 = r3; // save r3 in callee saved reg > if (some test) goto exit_label > // main body of foo, calling other functions > r3 = 0; > return; > exit_label: > r3 = 1; > return; > > Bernd's http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00380.html quite > happily rearranges the r29 assignment to be after the "if", and shrink > wrapping occurs. With the ifcvt optimization we get > > r29 = r3; // save r3 in callee saved reg > r3 = 1; > if (some test) goto exit_label > // main body of foo, calling other functions > r3 = 0; > exit_label: > return;
I wonder if this can't be described as another case for moving an insn downwards in prepare_shrink_wrap, rather than stopping ifcvt? Doesn't matter much however. Bernd