------- 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