[llvm-commits] [llvm] r132411 - /llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
Stuart Hastings
stuart at apple.com
Wed Jun 1 12:01:17 PDT 2011
On Jun 1, 2011, at 11:56 AM, Evan Cheng wrote:
> Stuart, why is this hard coded to i32? Is fgetsign double -> i64 legal?
Yes, fgetsign of a double is not legal on x86_32 (because i64 isn't legal on x86_32).
Is there a better way to do this?
stuart
>
> Evan
>
> On Jun 1, 2011, at 11:32 AM, Stuart Hastings wrote:
>
>> Author: stuart
>> Date: Wed Jun 1 13:32:25 2011
>> New Revision: 132411
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=132411&view=rev
>> Log:
>> Fix double FGETSIGN to work on x86_32; followup to 132396.
>> rdar://problem/5660695
>>
>> Modified:
>> llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
>>
>> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp?rev=132411&r1=132410&r2=132411&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/SelectionDAG/TargetLowering.cpp Wed Jun 1 13:32:25 2011
>> @@ -1759,11 +1759,14 @@
>> if (NewMask == APInt::getSignBit(Op.getValueType().getSizeInBits()) &&
>> Op.getOperand(0).getValueType().isFloatingPoint() &&
>> !Op.getOperand(0).getValueType().isVector()) {
>> - if (isOperationLegalOrCustom(ISD::FGETSIGN, Op.getValueType())) {
>> + if (isOperationLegalOrCustom(ISD::FGETSIGN, MVT::i32)) {
>> + EVT Ty = (isOperationLegalOrCustom(ISD::FGETSIGN, Op.getValueType())) ?
>> + Op.getValueType() : MVT::i32;
>> // Make a FGETSIGN + SHL to move the sign bit into the appropriate
>> // place. We expect the SHL to be eliminated by other optimizations.
>> - SDValue Sign = TLO.DAG.getNode(ISD::FGETSIGN, dl, Op.getValueType(),
>> - Op.getOperand(0));
>> + SDValue Sign = TLO.DAG.getNode(ISD::FGETSIGN, dl, Ty, Op.getOperand(0));
>> + if (Ty != Op.getValueType())
>> + Sign = TLO.DAG.getNode(ISD::ZERO_EXTEND, dl, Op.getValueType(), Sign);
>> unsigned ShVal = Op.getValueType().getSizeInBits()-1;
>> SDValue ShAmt = TLO.DAG.getConstant(ShVal, Op.getValueType());
>> return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl,
>>
>>
>> _______________________________________________
>> 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