------- Comment #1 from hp at gcc dot gnu dot org 2008-03-07 03:07 -------
Also with trunk r132670. The ICE points at the somewhat-hairy last alternative
of the *btst pattern for being at fault for not matching for the insn appearing
in 177r.greg:
(insn:QI 12 11 13 3 s2.c:18 (set (cc0)
(zero_extract:SI (const_int -13 [0xfffffffffffffff3])
(const_int 1 [0x1])
(reg:SI 15 acr [orig:29 <variable>.skc_state ] [29]))) 16 {*btst}
(nil))
On closer inspection however, the condition indicates that the operands are
invalid and gcc should have noticed that, when transforming the following valid
insn into the above (from 176r.lreg):
(insn:QI 12 11 13 3 s2.c:18 (set (cc0)
(zero_extract:SI (reg:SI 44)
(const_int 1 [0x1])
(reg:SI 29 [ <variable>.skc_state ]))) 16 {*btst}
(expr_list:REG_DEAD (reg:SI 29 [ <variable>.skc_state ])
(nil)))
So, something replaces reg 44 and doesn't check the validity of the
replacement.
For 4.3, it might be safer to remove the last alternative of *btst, but for
trunk we should fix the real bug, supposedly in reload. ;)
Changing component to middle-end.
--
hp at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |hp at gcc dot gnu dot org
|dot org |
Status|UNCONFIRMED |ASSIGNED
Component|target |middle-end
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2008-03-07 03:07:59
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35492