[Bug optimization/12630] [3.4 regression] Various unrecognizable insns and ICEs at -O3

dave at hiauly1 dot hia dot nrc dot ca gcc-bugzilla@gcc.gnu.org
Mon Nov 3 01:32:00 GMT 2003


PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12630



------- Additional Comments From dave at hiauly1 dot hia dot nrc dot ca  2003-11-03 01:32 -------
Subject: Re:  [3.4 regression] Various unrecognizable

> > Switching from match_dup to match_scratch introduced a need for two
> additional
> > temporaries.  We only have one register in the class R1_REGS.
> 
> Why these two temporaries are needed?
> R1_REGS has constraint 'a' that is not used in the pattern at all so why
> reload chooses to use it?

I'm not sure that I understand this yet but I have the sense that
the problem is related to loop optimization.  The principal place
that %r1 is needed is to load the address of a symbol that isn't
a read only operand.  For this, we use a pair of high and losum 
insns.  The high insn requires %r1.  In the case at hand, I noticed
that the movstr insn is in a loop where the high insn has been
pulled out of the loop.  Possibly, by doing this, we have introduced
a situation that reload can't handle.  Both the source and destination
registers for the movstr operation are loaded in the loop using
high-losum sequences.

Dave



More information about the Gcc-bugs mailing list