[llvm] r204737 - [DAG] Keep the opaque constant flag when performing unary constant folding operations.
Juergen Ributzka
juergen at apple.com
Wed Apr 2 15:28:08 PDT 2014
Test case and comment in r205474.
On Mar 31, 2014, at 4:14 PM, Eric Christopher <echristo at gmail.com> wrote:
> Testcase? What's this for etc?
>
> -eric
>
> On Tue, Mar 25, 2014 at 11:01 AM, Juergen Ributzka <juergen at apple.com> wrote:
>> Author: ributzka
>> Date: Tue Mar 25 13:01:20 2014
>> New Revision: 204737
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=204737&view=rev
>> Log:
>> [DAG] Keep the opaque constant flag when performing unary constant folding operations.
>>
>> Usually opaque constants shouldn't be folded, unless they are simple unary
>> operations that don't create new constants. Although this shouldn't drop the
>> opaque constant flag. This commit fixes this.
>>
>> Related to <rdar://problem/14774662>
>>
>> Modified:
>> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>>
>> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=204737&r1=204736&r2=204737&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Mar 25 13:01:20 2014
>> @@ -2541,11 +2541,13 @@ SDValue SelectionDAG::getNode(unsigned O
>> switch (Opcode) {
>> default: break;
>> case ISD::SIGN_EXTEND:
>> - return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT);
>> + return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT,
>> + C->isTargetOpcode(), C->isOpaque());
>> case ISD::ANY_EXTEND:
>> case ISD::ZERO_EXTEND:
>> case ISD::TRUNCATE:
>> - return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT);
>> + return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT,
>> + C->isTargetOpcode(), C->isOpaque());
>> case ISD::UINT_TO_FP:
>> case ISD::SINT_TO_FP: {
>> APFloat apf(EVTToAPFloatSemantics(VT),
>> @@ -2562,15 +2564,19 @@ SDValue SelectionDAG::getNode(unsigned O
>> return getConstantFP(APFloat(APFloat::IEEEdouble, Val), VT);
>> break;
>> case ISD::BSWAP:
>> - return getConstant(Val.byteSwap(), VT);
>> + return getConstant(Val.byteSwap(), VT, C->isTargetOpcode(),
>> + C->isOpaque());
>> case ISD::CTPOP:
>> - return getConstant(Val.countPopulation(), VT);
>> + return getConstant(Val.countPopulation(), VT, C->isTargetOpcode(),
>> + C->isOpaque());
>> case ISD::CTLZ:
>> case ISD::CTLZ_ZERO_UNDEF:
>> - return getConstant(Val.countLeadingZeros(), VT);
>> + return getConstant(Val.countLeadingZeros(), VT, C->isTargetOpcode(),
>> + C->isOpaque());
>> case ISD::CTTZ:
>> case ISD::CTTZ_ZERO_UNDEF:
>> - return getConstant(Val.countTrailingZeros(), VT);
>> + return getConstant(Val.countTrailingZeros(), VT, C->isTargetOpcode(),
>> + C->isOpaque());
>> }
>> }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list