Add support for truncating integer casts from long.
authorChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 22:37:48 +0000 (22:37 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 7 Jan 2005 22:37:48 +0000 (22:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19358 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 95bc3ab4322210d83b347a18bc54cc7f371ccc9f..996f116f8ddf0dd9da2ae42c2017089b2df5d4e5 100644 (file)
@@ -556,8 +556,20 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
       if (Tmp1 != Node->getOperand(0))
         Result = DAG.getNode(Node->getOpcode(), Node->getValueType(0), Tmp1);
       break;
+    case Expand:
+      // In the expand case, we must be dealing with a truncate, because
+      // otherwise the result would be larger than the source.
+      assert(Node->getOpcode() == ISD::TRUNCATE &&
+             "Shouldn't need to expand other operators here!");
+      ExpandOp(Node->getOperand(0), Tmp1, Tmp2);
+
+      // Since the result is legal, we should just be able to truncate the low
+      // part of the source.
+      Result = DAG.getNode(ISD::TRUNCATE, Node->getValueType(0), Tmp1);
+      break;
+
     default:
-      assert(0 && "Do not know how to expand or promote this yet!");
+      assert(0 && "Do not know how to promote this yet!");
     }
     break;
   }