[Bug rtl-optimization/80343] [7 Regression] ICE in extract_constrain_insn, at recog.c:2213 (error: insn does not satisfy its constraints)

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Apr 7 15:23:00 GMT 2017


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.


More information about the Gcc-bugs mailing list