[llvm] r204737 - [DAG] Keep the opaque constant flag when performing unary constant folding operations.
Eric Christopher
echristo at gmail.com
Thu Apr 3 02:40:41 PDT 2014
Cool, thanks.
-eric
On Wed, Apr 2, 2014 at 3:28 PM, Juergen Ributzka <juergen at apple.com> wrote:
> 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