[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