This is the mail archive of the gcc@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]

Re: Ordering of splitting passes


> Hello Jan,
> 
> We ICE for PR opt/12510 (a regression on the 3.3 branch) in final.c:
> 
> 
> The problem is, shorten_branch doesn't split insns any longer because of
> 
> Wed Feb 26 20:29:33 CET 2003  Jan Hubicka  <jh at suse dot cz>
> 	* reg-stack.c (reg_to_stack): Don't split insns.
> 	* toplev.c (rest_of_compilation): rearange insn splitting passes.
> 
> is evil (it is *not* documented in the ChangeLog at all, the message is at 
> http://gcc.gnu.org/ml/gcc-patches/2003-02/msg02260.html) because it hoists 
> the now separate call to split_all_insns that is attached to #ifdef 
> STACK_REGS four passes up. And of course it turns out that one of these 
> passes (flow2) creates insns that must be splitted.
> 
> 
> The obvious fix for PR opt/12510 is to revert patch #3. But I think the real 
> question is: why did you choose to break apart the call to split_all_insns 
> that is attached to #ifdef STACK_REGS and the call to reg_to_stack itself in 
> patch #2?

The motivation has been to put all the passes into toplev.c so one can
remove redundanties in between them.  Originally we did twice as many
passes than we do now and also we can not split after reg-stack because
of changes in the RTL representation.

Perhaps the best fix is to make insn splitting before sched2
unconditiona? (this is probably what makes the testcase to pass at -O2)
> 
> -- 
> Eric Botcazou


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]