[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