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

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


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


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