https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105624

--- Comment #7 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
(In reply to Uroš Bizjak from comment #6)
> I was afraid I don't understood the reason of the failure well, although it
> happened very rarely (actually, no failures were detected during the build
> or testsuite run). The patch obviously triggered some inconsistency in the
> infrastructure, so without some assurances, I took the safe way and reverted
> everything.
But like I say, I think it's due to the % in that particular instruction.
When % is used on operand N, the constraints for operands N and N+1
have to be tight enough to support both the predicate on operand N
and the predicate on operand N+1.  So for:

(define_insn_and_split "*anddi_1_btr"
  [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
        (and:DI
         (match_operand:DI 1 "nonimmediate_operand" "%0")
         (match_operand:DI 2 "const_int_operand")))
   (clobber (reg:CC FLAGS_REG))]

The constraints on operand 2 are effectively matching
nonimmediate_operand|const_int_operand rather than just
const_int_operand.

I think it would work to keep the constraints for
const_int_operands that are in a % pair and drop them
elsewhere.  (So a partial reapplication, rather than a
full reapplication.)

Reply via email to