On 06/02/2015 08:32 AM, Andreas Krebbel wrote:
-(define_insn "*<shift><mode>3" +(define_insn "*<shift><mode>3_reg" [(set (match_operand:GPR 0 "register_operand" "=d") (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>") - (match_operand:SI 2 "shift_count_or_setmem_operand" "Y")))] + (match_operand:SI 2 "register_operand" "a")))] "" - "s<lr>l<g>\t%0,<1>%Y2" + "s<lr>l<g>\t%0,<1>%2" + [(set_attr "op_type" "RS<E>") + (set_attr "atype" "reg")]) + +(define_insn "*<shift><mode>3_imm" + [(set (match_operand:GPR 0 "register_operand" "=d") + (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>") + (match_operand 2 "immediate_operand" "J")))] + "" + "s<lr>l<g>\t%0,<1>%2" + [(set_attr "op_type" "RS<E>") + (set_attr "atype" "reg")])
These two ought not be split apart. They're simple alternatives. And why SImode? You also shouldn't drop the mode on immediate operands.
r~
+ +(define_insn "*<shift><mode>3_immreg" + [(set (match_operand:GPR 0 "register_operand" "=d") + (SHIFT:GPR (match_operand:GPR 1 "register_operand" "<d0>") + (plus:SI + (match_operand:SI 2 "register_operand" "a") + (match_operand 3 "immediate_operand" "J"))))] + "" + "s<lr>l<g>\t%0,<1>%2(%3)" [(set_attr "op_type" "RS<E>") (set_attr "atype" "reg")])