This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/49487] Internal compiler error in AVR code
- From: "gjl at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 24 Jun 2011 20:11:53 +0000
- Subject: [Bug target/49487] Internal compiler error in AVR code
- Auto-submitted: auto-generated
- References: <bug-49487-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49487
Georg-Johann Lay <gjl at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ice-on-valid-code
CC| |gjl at gcc dot gnu.org
--- Comment #4 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2011-06-24 20:11:20 UTC ---
I see this on 4.5.2
In 185r.asmcons we have insn 40:
(insn 40 38 41 4 foo.c:6 (parallel [
(set (reg:HI 94)
(rotate:HI (reg/v:HI 66 [ _x ])
(const_int 8 [0x8])))
(clobber (reg:QI 95))
]) 64 {*rotbhi} (expr_list:REG_DEAD (reg/v:HI 66 [ _x ])
(expr_list:REG_UNUSED (reg:QI 95)
(nil))))
and in 188r.ira it is:
(insn 40 38 41 4 foo.c:6 (parallel [
(set (reg:HI 20 r20 [94])
(rotate:HI (reg/v:HI 20 r20 [orig:66 _x ] [66])
(const_int 8 [0x8])))
(clobber (mem/c:QI (plus:HI (reg/f:HI 28 r28)
(const_int 1 [0x1])) [3 %sfp+1 S1 A8]))
]) 64 {*rotbhi} (nil))
At first sight I thought it is a reload bug, but it's not.
The bug goes like that:
operand3 gets constraint verbatim from rotx iterator, witch reads for HI
(HI "X,X,X")
That was correct if reload would supply a scratch. However, these rot patterns
don't request a scratch, the respective expander already supplies a pseudo.
So the "X" does not mean "don't need a scratch", instead it means "everything
is fine" so that reload need not generate reload insns to force "r" or whatever
constraint.
So either the constrint must be "=&r" or so if a pseudo is pre-generated (this
is waste because the reg is not needed and can even force a frame/frame
pointer) or this has to be rewritten as a proper scratch.