My question is: where and how would you suggest we do this optimization. With peephole2? Or in combine? In i386.md, I see pattern *subsi_2 looks like what I'd like to combine these two insn into:

(define_insn "*subsi_2"
  [(set (reg FLAGS_REG)
    (compare
      (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0")
            (match_operand:SI 2 "general_operand" "ri,rm"))
      (const_int 0)))
   (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r")
    (minus:SI (match_dup 1) (match_dup 2)))]
  "ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (MINUS, SImode, operands)"
  "sub{l}\t{%2, %0|%0, %2}"
  [(set_attr "type" "alu")
   (set_attr "mode" "SI")])

That's quite similar to several PPC patterns for andi. , and they work.
If you've got two other insns that look like the set's I'd expect combine
to merge them, and would look to see why it doesn't.

Reply via email to