Expand (f64 extload f32) to (f64 fp_ext (load f32)) if f64 type action is expand.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 13 Dec 2006 03:19:57 +0000 (03:19 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 13 Dec 2006 03:19:57 +0000 (03:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32527 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 246bbdc6a0f8d14a2e518c719cfdd7c2966b4a02..6f54c19f3a08fd805b76b2ee6d84b845a17717d8 100644 (file)
@@ -4547,6 +4547,16 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
         std::swap(Lo, Hi);
     } else {
       MVT::ValueType EVT = LD->getLoadedVT();
+
+      if (VT == MVT::f64 && EVT == MVT::f32) {
+        // f64 = EXTLOAD f32 should expand to LOAD, FP_EXTEND
+        SDOperand Load = DAG.getLoad(EVT, Ch, Ptr, LD->getSrcValue(),
+                                     LD->getSrcValueOffset());
+        // Remember that we legalized the chain.
+        AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Load.getValue(1)));
+        ExpandOp(DAG.getNode(ISD::FP_EXTEND, VT, Load), Lo, Hi);
+        break;
+      }
     
       if (EVT == NVT)
         Lo = DAG.getLoad(NVT, Ch, Ptr, LD->getSrcValue(),