This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
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