[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Chris Lattner lattner at cs.uiuc.edu
Sat Jan 15 16:38:13 PST 2005



Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.32 -> 1.33
---
Log message:

legalize a bunch of operations that I missed.


---
Diffs of the changes:  (+19 -9)

Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.32 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.33
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.32	Sat Jan 15 18:17:42 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp	Sat Jan 15 18:38:00 2005
@@ -751,7 +751,6 @@
   case ISD::FP_TO_UINT:
   case ISD::SINT_TO_FP:
   case ISD::UINT_TO_FP:
-
     switch (getTypeAction(Node->getOperand(0).getValueType())) {
     case Legal:
       Tmp1 = LegalizeOp(Node->getOperand(0));
@@ -776,19 +775,30 @@
 
     case Promote:
       switch (Node->getOpcode()) {
-      case ISD::ZERO_EXTEND: {
-        // Mask out the high bits.
-        uint64_t MaskCst =
-          1ULL << (MVT::getSizeInBits(Node->getOperand(0).getValueType()))-1;
-        Tmp1 = PromoteOp(Node->getOperand(0));
-        Result = DAG.getNode(ISD::AND, Node->getValueType(0), Tmp1,
-                             DAG.getConstant(MaskCst, Node->getValueType(0)));
+      case ISD::ZERO_EXTEND:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::ZERO_EXTEND_INREG, Result.getValueType(),
+                             Result, Node->getOperand(0).getValueType());
         break;
-      }
       case ISD::SIGN_EXTEND:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
+                             Result, Node->getOperand(0).getValueType());
+        break;
       case ISD::TRUNCATE:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::TRUNCATE, Op.getValueType(), Result);
+        break;
       case ISD::FP_EXTEND:
+        Result = PromoteOp(Node->getOperand(0));
+        if (Result.getValueType() != Op.getValueType())
+          // Dynamically dead while we have only 2 FP types.
+          Result = DAG.getNode(ISD::FP_EXTEND, Op.getValueType(), Result);
+        break;
       case ISD::FP_ROUND:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::FP_ROUND, Op.getValueType(), Result);
+        break;
       case ISD::FP_TO_SINT:
       case ISD::FP_TO_UINT:
       case ISD::SINT_TO_FP:






More information about the llvm-commits mailing list