[llvm-commits] [llvm] r59760 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAGNodes.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Chris Lattner clattner at apple.com
Thu Nov 20 17:41:47 PST 2008


On Nov 20, 2008, at 5:08 PM, Dan Gohman wrote:

>
> On Nov 20, 2008, at 4:38 PM, Bill Wendling wrote:
>
>> On Thu, Nov 20, 2008 at 4:22 PM, Dan Gohman <gohman at apple.com> wrote:
>>>
>>> On Nov 20, 2008, at 4:11 PM, Bill Wendling wrote:
>>>> +
>>>> +    // Overflow-aware nodes for arithmetic operations. These nodes
>>>> take two
>>>> +    // operands: the normal lhs and rhs to the add. They produce
>>>> two results:
>>>> +    // the normal result of the add, and a flag indicating whether
>>>> an overflow
>>>> +    // occured. These nodes are generated from the llvm.
>>>> [su]add.with.overflow
>>>> +    // intrinsics. They are lowered by target-dependent code.
>>>> +    SADDO, UADDO,
>>>
>>> Hi Bill,
>>>
>>> Is UADDO is equivalent to ADDC?
>>>
>> Hmm. It does appear to be similar. How is ADDC handled later on? I  
>> see
>> that the DAG combiner does some reasoning about trivial cases, but  
>> how
>> is it handled in the back ends?
>
> In the x86 backend, ADDC is lowered to a single add instruction, with
> the carry information carried by the flags register.

They aren't the same.  ADDC returns a value + flag.  SADDO returns a  
value + bool.  The use of the bool may very well be a store to memory  
or something like that.  You can't flag these together.

OTOH, I think it would be perfectly fine for X86 to custom legalize  
SADDO into ADDC + an X86ISD::SETO node or something.

-Chris



More information about the llvm-commits mailing list