------- Comment #2 from ubizjak at gmail dot com 2007-07-11 19:12 ------- This is due to reload. It is trying to solve following pattern
(insn:HI 25 24 28 2 pr32725.c:14 (parallel [ (set (reg:DI 75) (and:DI (reg:DI 71) (reg:DI 74))) (clobber (reg:CC 17 flags)) ]) 299 {*anddi_1_rex64} (expr_list:REG_DEAD (reg:DI 74) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) to following register constraints: (define_insn "*adddi_1_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r") (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r") (match_operand:DI 2 "x86_64_general_operand" "rme,re,le"))) (clobber (reg:CC FLAGS_REG))] But it produces following mess: (insn 95 24 25 2 pr32725.c:14 (set (reg:DI 3 bx [75]) (reg:DI 0 ax [74])) 82 {*movdi_1_rex64} (nil)) (insn:HI 25 95 96 2 pr32725.c:14 (parallel [ (set (reg:DI 3 bx [75]) (and:DI (reg:DI 3 bx [75]) (reg:DI 37 r8 [71]))) (clobber (reg:CC 17 flags)) ]) 299 {*anddi_1_rex64} (nil)) (insn 96 25 33 2 pr32725.c:14 (set (reg:DI 0 ax) (reg:DI 3 bx [75])) 82 {*movdi_1_rex64} (nil)) Ideally, output reg should be matched to dead reg 74 (due to % modifier) and this would fix the whole sequence. Perhaps a reload expert will be interested in this PR ;) -- ubizjak at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bonzini at gnu dot org Status|UNCONFIRMED |NEW Component|middle-end |rtl-optimization Ever Confirmed|0 |1 Keywords| |ra Last reconfirmed|0000-00-00 00:00:00 |2007-07-11 19:12:37 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32725