From 25ece66ff39e9f136a8b48e0fea7aff2332848dc Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Mon, 11 Dec 2006 17:25:19 +0000 Subject: [PATCH] Don't convert store double C, Ptr to store long C, Ptr if i64 is not a legal type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32434 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 750f0bb6f56..f04f4013777 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -3035,17 +3035,20 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) { } // Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr' - // FIXME: We shouldn't do this for TargetConstantFP's. if (ConstantFPSDNode *CFP = dyn_cast(Value)) { - SDOperand Tmp; - if (CFP->getValueType(0) == MVT::f32) { - Tmp = DAG.getConstant(FloatToBits(CFP->getValue()), MVT::i32); - } else { - assert(CFP->getValueType(0) == MVT::f64 && "Unknown FP type!"); - Tmp = DAG.getConstant(DoubleToBits(CFP->getValue()), MVT::i64); + if (Value.getOpcode() != ISD::TargetConstantFP) { + SDOperand Tmp; + if (CFP->getValueType(0) == MVT::f32) { + Tmp = DAG.getConstant(FloatToBits(CFP->getValue()), MVT::i32); + return DAG.getStore(Chain, Tmp, Ptr, ST->getSrcValue(), + ST->getSrcValueOffset()); + } else if (TLI.isTypeLegal(MVT::i64)) { + assert(CFP->getValueType(0) == MVT::f64 && "Unknown FP type!"); + Tmp = DAG.getConstant(DoubleToBits(CFP->getValue()), MVT::i64); + return DAG.getStore(Chain, Tmp, Ptr, ST->getSrcValue(), + ST->getSrcValueOffset()); + } } - return DAG.getStore(Chain, Tmp, Ptr, ST->getSrcValue(), - ST->getSrcValueOffset()); } if (CombinerAA) {