This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 3.2 bug or something really odd.


Hi Dmitry,

> That's exactly what I'm doing in expander:
> if(INTVAL(operands[2]) != 1 || INTVAL(operands[3]) <= 0)
>       FAIL;
> But either FAIL directive fails or 3rd and 2nd operands swapped on
> combine pass.

In your

(define_insn "*extzv"
 [(set (match_operand:QI 0 "nonimmediate_operand_msp430" "=r,r,r,r,m,m,m,m")
       (zero_extract:QI (match_operand:QI 1 "nonimmediate_operand_msp430" 
"r,m,r,m,r,m,r,m")
                        (match_operand 2 "const_int_operand" 
"i,i,i,i,i,i,i,i")
                        (match_operand 3 "const_int_operand" 
"P,P,i,i,P,P,i,i")))]
 ""
"bit.b\\t%3, %1

If you replace

  (match_operand 2 "const_int_operand" "i,i,i,i,i,i,i,i")

with

  (const_int 1)

this will probably work.  This is because the combiner does not care
the constraints (like 'i' in this case).  So if you use
const_int_operand for operands[2], the combiner thinks that 2, 3, ...
are also OK for operands[2].

Hope this helps.

Kazu Hirata


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]