[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