[llvm-commits] Re: llvm-commits Digest, Vol 14, Issue 18

Chris Lattner sabre at nondot.org
Fri Aug 12 09:26:50 PDT 2005


On Fri, 12 Aug 2005, Andrew Lenharth wrote:
>> Add a select_cc optimization for recognizing abs(int).  This speeds up an
>> integer MPEG encoding loop by a factor of two.
>
> 1) Should this be replicated in select?

Yes, this is on Nate's todo list. :)

> 2) What warrents select_cc being its own node?

It fits the target semantics of PPC and X86 more closely.  PPC for example 
doesn't have either setcc or select, but does can do selectcc in most 
cases.  X86 doesn't have select, but does have setcc and select_cc.

-Chris

>> Diffs of the changes:  (+16 -0)
>>
>>  SelectionDAG.cpp |   16 ++++++++++++++++
>>  1 files changed, 16 insertions(+)
>>
>>
>> Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>> diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.135 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.136
>> --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.135	Wed Aug 10 20:12:20 2005
>> +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp	Wed Aug 10 21:18:13 2005
>> @@ -1495,6 +1495,22 @@
>>          return getNode(ISD::AND, AType, Shift, N3);
>>        }
>>      }
>> +
>> +    // Check to see if this is an integer abs. select_cc setl[te] X, 0, -X, X ->
>> +    // Y = sra (X, size(X)-1); xor (add (X, Y), Y)
>> +    if (N2C && N2C->isNullValue() && (CC == ISD::SETLT || CC == ISD::SETLE) &&
>> +        N1 == N4 && N3.getOpcode() == ISD::SUB && N1 == N3.getOperand(1)) {
>> +      if (ConstantSDNode *SubC = dyn_cast<ConstantSDNode>(N3.getOperand(0))) {
>> +        MVT::ValueType XType = N1.getValueType();
>> +        if (SubC->isNullValue() && MVT::isInteger(XType)) {
>> +          SDOperand Shift = getNode(ISD::SRA, XType, N1,
>> +                                    getConstant(MVT::getSizeInBits(XType)-1,
>> +                                                TLI.getShiftAmountTy()));
>> +          return getNode(ISD::XOR, XType, getNode(ISD::ADD, XType, N1, Shift),
>> +                         Shift);
>> +        }
>> +      }
>> +    }
>>    }
>>
>>    std::vector<SDOperand> Ops;
>>
>>
>>
>>
>>
>> ------------------------------
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>>
>> End of llvm-commits Digest, Vol 14, Issue 18
>> ********************************************
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-commits mailing list