[Bug target/54418] [4.8 Regression] [SH] Invalid operands for opcode
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 30 13:11:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54418
--- Comment #1 from Oleg Endo <olegendo at gcc dot gnu.org> 2012-08-30 13:11:30 UTC ---
(In reply to comment #0)
>
> It seems that cmpgeusi_t insn_and_split doesn't do its work.
>
> (define_insn_and_split "cmpgeusi_t"
> [(set (reg:SI T_REG)
> (geu:SI (match_operand:SI 0 "arith_reg_operand" "r")
> (match_operand:SI 1 "arith_reg_or_0_operand" "rN")))]
> "TARGET_SH1"
> "cmp/hs %1,%0"
> "&& satisfies_constraint_Z (operands[0])"
> [(set (reg:SI T_REG) (const_int 1))]
>
> Oleg, operands[0] in the splitter condition is a typo of
> operands[1], doesn't it?
Yes, it is. Sorry about that. Also, the 'N' alternative doesn't make sense in
this
case, as the split will happen before reload will start looking at the
constraints.
I think the pattern should be:
(define_insn_and_split "cmpgeusi_t"
[(set (reg:SI T_REG)
(geu:SI (match_operand:SI 0 "arith_reg_operand" "r")
(match_operand:SI 1 "arith_reg_or_0_operand" "r")))]
"TARGET_SH1"
"cmp/hs %1,%0"
"&& satisfies_constraint_Z (operands[1])"
[(set (reg:SI T_REG) (const_int 1))]
""
[(set_attr "type" "mt_group")])
I always wondered under which condition this case would actually
happen. Now I know it. Thanks!
More information about the Gcc-bugs
mailing list