This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 10/13/11 18:50, Bernd Schmidt wrote: > 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? I.e. something like this? Minimally tested by inspecting some generated assembly. I haven't found a case where it enables extra shrink-wrapping on i686, but maybe it's different on ppc? Bernd
Attachment:
prep-cst.diff
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |