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

Chris Lattner lattner at cs.uiuc.edu
Thu Sep 1 17:18:22 PDT 2005



Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.181 -> 1.182
---
Log message:

legalize ANY_EXTEND appropriately


---
Diffs of the changes:  (+26 -6)

 LegalizeDAG.cpp |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.181 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.182
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.181	Wed Aug 31 14:01:53 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp	Thu Sep  1 19:18:10 2005
@@ -1088,7 +1088,7 @@
         TLI.getTypeToPromoteTo(ISD::SELECT, Tmp2.getValueType());
       unsigned ExtOp, TruncOp;
       if (MVT::isInteger(Tmp2.getValueType())) {
-        ExtOp = ISD::ZERO_EXTEND;
+        ExtOp = ISD::ANY_EXTEND;
         TruncOp  = ISD::TRUNCATE;
       } else {
         ExtOp = ISD::FP_EXTEND;
@@ -1866,6 +1866,7 @@
     }
     break;
 
+  case ISD::ANY_EXTEND:
   case ISD::ZERO_EXTEND:
   case ISD::SIGN_EXTEND:
   case ISD::FP_EXTEND:
@@ -1881,17 +1882,19 @@
 
     case Promote:
       switch (Node->getOpcode()) {
+      case ISD::ANY_EXTEND:
+        Result = PromoteOp(Node->getOperand(0));
+        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
+        break;
       case ISD::ZERO_EXTEND:
         Result = PromoteOp(Node->getOperand(0));
-        // NOTE: Any extend would work here...
-        Result = DAG.getNode(ISD::ZERO_EXTEND, Op.getValueType(), Result);
+        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
         Result = DAG.getZeroExtendInReg(Result,
                                         Node->getOperand(0).getValueType());
         break;
       case ISD::SIGN_EXTEND:
         Result = PromoteOp(Node->getOperand(0));
-        // NOTE: Any extend would work here...
-        Result = DAG.getNode(ISD::ZERO_EXTEND, Op.getValueType(), Result);
+        Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
         Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
                              Result,
                           DAG.getValueType(Node->getOperand(0).getValueType()));
@@ -2051,6 +2054,7 @@
     break;
   case ISD::SIGN_EXTEND:
   case ISD::ZERO_EXTEND:
+  case ISD::ANY_EXTEND:
     switch (getTypeAction(Node->getOperand(0).getValueType())) {
     case Expand: assert(0 && "BUG: Smaller reg should have been promoted!");
     case Legal:
@@ -2065,7 +2069,7 @@
       if (Node->getOpcode() == ISD::SIGN_EXTEND)
         Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Result,
                          DAG.getValueType(Node->getOperand(0).getValueType()));
-      else
+      else if (Node->getOpcode() == ISD::ZERO_EXTEND)
         Result = DAG.getZeroExtendInReg(Result,
                                         Node->getOperand(0).getValueType());
       break;
@@ -3010,6 +3014,22 @@
     Hi = LegalizeOp(Hi);
     break;
   }
+  case ISD::ANY_EXTEND: {
+    SDOperand In;
+    switch (getTypeAction(Node->getOperand(0).getValueType())) {
+    case Expand: assert(0 && "expand-expand not implemented yet!");
+    case Legal: In = LegalizeOp(Node->getOperand(0)); break;
+    case Promote:
+      In = PromoteOp(Node->getOperand(0));
+      break;
+    }
+    
+    // The low part is any extension of the input (which degenerates to a copy).
+    Lo = DAG.getNode(ISD::ANY_EXTEND, NVT, In);
+    // The high part is undefined.
+    Hi = DAG.getNode(ISD::UNDEF, NVT);
+    break;
+  }
   case ISD::SIGN_EXTEND: {
     SDOperand In;
     switch (getTypeAction(Node->getOperand(0).getValueType())) {






More information about the llvm-commits mailing list