On 09/27/2010 03:37 PM, DJ Delorie wrote:
>> I think it's probably a mistake to have the default ADD
>> instruction SET the flags, rather than CLOBBER them.
> 
> How else would we optimize away compares?

By having a separate ADD that looks like your current one.
Combine will put them together for you.  Compare i386
 
(define_insn "*add<mode>_1"
  [(set (match_operand:SWI48 0 "nonimmediate_operand" "=r,rm,r,r")
        (plus:SWI48
          (match_operand:SWI48 1 "nonimmediate_operand" "%0,0,r,r")
          (match_operand:SWI48 2 "<general_operand>" "<g>,r<i>,0,l<i>")))
   (clobber (reg:CC FLAGS_REG))]
  "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
  ...

(define_insn "*add<mode>_2"
  [(set (reg FLAGS_REG)
        (compare
          (plus:SWI
            (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
            (match_operand:SWI 2 "<general_operand>" "<g>,<r><i>"))
          (const_int 0)))
   (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>,<r>m")
        (plus:SWI (match_dup 1) (match_dup 2)))]
  "ix86_match_ccmode (insn, CCGOCmode)
   && ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
  ...



r~

Reply via email to