Update per review comments.
authorDale Johannesen <dalej@apple.com>
Thu, 9 Aug 2007 17:27:48 +0000 (17:27 +0000)
committerDale Johannesen <dalej@apple.com>
Thu, 9 Aug 2007 17:27:48 +0000 (17:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40965 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetLowering.h
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 62959391a92b567c20761a4355e3e4c7343a8de9..e44f741224acf529430e28d5b53ccc4e82f6cc97 100644 (file)
@@ -333,8 +333,8 @@ public:
   /// for it.
   LegalizeAction
   getConvertAction(MVT::ValueType FromVT, MVT::ValueType ToVT) const {
-    if (MVT::isExtendedVT(ToVT) || MVT::isExtendedVT(FromVT))
-      return Expand;
+    assert(FromVT < MVT::LAST_VALUETYPE && ToVT < 32 && 
+           "Table isn't big enough!");
     return (LegalizeAction)((ConvertActions[FromVT] >> (2*ToVT)) & 3);
   }
 
index 8187b3c0803aebad516054f50f8e931cb2a5c944..3d1b47d3f30b27f6e946d85f2061fa6248dd805b 100644 (file)
@@ -3194,51 +3194,36 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
     }
     break;
 
-  case ISD::FP_EXTEND: {
-      MVT::ValueType newVT = Op.getValueType();
-      MVT::ValueType oldVT = Op.getOperand(0).getValueType();
-      if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
-        // The only way we can lower this is to turn it into a STORE,
-        // EXTLOAD pair, targetting a temporary location (a stack slot).
-
-        // NOTE: there is a choice here between constantly creating new stack
-        // slots and always reusing the same one.  We currently always create
-        // new ones, as reuse may inhibit scheduling.
-        const Type *Ty = MVT::getTypeForValueType(oldVT);
-        uint64_t TySize = TLI.getTargetData()->getTypeSize(Ty);
-        unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
-        MachineFunction &MF = DAG.getMachineFunction();
-        int SSFI =
-          MF.getFrameInfo()->CreateStackObject(TySize, Align);
-        SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
-        Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
-                                   StackSlot, NULL, 0);
-        Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
-                                   Result, StackSlot, NULL, 0, oldVT);
-        break;
-      }
-    }
-    // FALL THROUGH (to ANY_EXTEND case)
+  case ISD::FP_EXTEND: 
   case ISD::FP_ROUND: {
       MVT::ValueType newVT = Op.getValueType();
       MVT::ValueType oldVT = Op.getOperand(0).getValueType();
       if (TLI.getConvertAction(oldVT, newVT) == TargetLowering::Expand) {
-        // The only way we can lower this is to turn it into a TRUNCSTORE,
+        // The only way we can lower this is to turn it into a STORE,
         // LOAD pair, targetting a temporary location (a stack slot).
 
         // NOTE: there is a choice here between constantly creating new stack
         // slots and always reusing the same one.  We currently always create
         // new ones, as reuse may inhibit scheduling.
-        const Type *Ty = MVT::getTypeForValueType(newVT);
+        MVT::ValueType slotVT = 
+                (Node->getOpcode() == ISD::FP_EXTEND) ? oldVT : newVT;
+        const Type *Ty = MVT::getTypeForValueType(slotVT);
         uint64_t TySize = TLI.getTargetData()->getTypeSize(Ty);
         unsigned Align  = TLI.getTargetData()->getPrefTypeAlignment(Ty);
         MachineFunction &MF = DAG.getMachineFunction();
         int SSFI =
           MF.getFrameInfo()->CreateStackObject(TySize, Align);
         SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
-        Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
-                                   StackSlot, NULL, 0, newVT);
-        Result = DAG.getLoad(newVT, Result, StackSlot, NULL, 0, newVT);
+        if (Node->getOpcode() == ISD::FP_EXTEND) {
+          Result = DAG.getStore(DAG.getEntryNode(), Node->getOperand(0),
+                                     StackSlot, NULL, 0);
+          Result = DAG.getExtLoad(ISD::EXTLOAD, newVT,
+                                     Result, StackSlot, NULL, 0, oldVT);
+        } else {
+          Result = DAG.getTruncStore(DAG.getEntryNode(), Node->getOperand(0),
+                                     StackSlot, NULL, 0, newVT);
+          Result = DAG.getLoad(newVT, Result, StackSlot, NULL, 0, newVT);
+        }
         break;
       }
     }