https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80343
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-04-07 CC| |jakub at gcc dot gnu.org, | |vmakarov at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Doesn't fail with additional -mno-lra. The insn in question is: (define_insn "and<mode>3_imm" [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") (and:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r") (match_operand:GPR 2 "logical_const_operand" "n"))) (clobber (match_scratch:CC 3 "=x"))] "rs6000_gen_cell_microcode && !rs6000_is_valid_and_mask (operands[2], <MODE>mode)" "andi%e2. %0,%1,%u2" [(set_attr "type" "logical") (set_attr "dot" "yes")]) where "x" constraint is: (define_register_constraint "x" "CR0_REGS" "@internal") In *.ira we have: (insn 84 75 78 6 (parallel [ (set (reg:SI 330 [239]) (and:SI (reg/v:SI 199 [ gt ]) (const_int 5 [0x5]))) (clobber (scratch:CC)) ]) "pr80343.c":21 165 {andsi3_imm} (nil)) and -mno-lra reload turns it into: (insn 84 75 78 6 (parallel [ (set (reg:SI 16 16 [239]) (and:SI (reg/v:SI 31 31 [orig:199 gt ] [199]) (const_int 5 [0x5]))) (clobber (reg:CC 68 0)) ]) "pr80343.c":21 165 {andsi3_imm} (nil)) But LRA turns it into: (insn 333 328 308 8 (parallel [ (set (reg:SI 15 15 [263]) (and:SI (reg/v:SI 31 31 [orig:199 gt ] [199]) (const_int 5 [0x5]))) (clobber (scratch:CC)) ]) "pr80343.c":21 165 {andsi3_imm} (nil)) - note the SCRATCH in there instead of (reg:CC 68), so it fails the RTL checking at the end of LRA.