make the casts actually cast to the variable type
authorAndrew Lenharth <andrewl@lenharth.org>
Sun, 29 Jan 2006 05:17:22 +0000 (05:17 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Sun, 29 Jan 2006 05:17:22 +0000 (05:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25765 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/DAGISelEmitter.cpp

index 56430657203139ee90084c8d6b2d3833f43094b1..bc026640bad36529b1acbb83126a680732418b10 100644 (file)
@@ -2069,18 +2069,21 @@ public:
       unsigned ResNo = TmpNo++;
       unsigned NumRes = 1;
       if (!N->isLeaf() && N->getOperator()->getName() == "imm") {
+        const char* CastType;
         assert(N->getExtTypes().size() == 1 && "Multiple types not handled!");
         const char *Code;
         switch (N->getTypeNum(0)) {
         default: assert(0 && "Unknown type for constant node!");
-        case MVT::i1:  Code = "bool Tmp"; break;
-        case MVT::i8:  Code = "unsigned char Tmp"; break;
-        case MVT::i16: Code = "unsigned short Tmp"; break;
-        case MVT::i32: Code = "unsigned Tmp"; break;
-        case MVT::i64: Code = "uint64_t Tmp"; break;
+        case MVT::i1:  CastType = "bool"; Code = "bool Tmp"; break;
+        case MVT::i8: 
+          CastType = "unsigned char"; Code = "unsigned char Tmp"; break;
+        case MVT::i16:
+          CastType = "unsigned short"; Code = "unsigned short Tmp"; break;
+        case MVT::i32: CastType = "unsigned"; Code = "unsigned Tmp"; break;
+        case MVT::i64: CastType = "uint64_t"; Code = "uint64_t Tmp"; break;
         }
-        emitCode(Code + utostr(ResNo) + "C = (uint64_t)cast<ConstantSDNode>(" +
-                 Val + ")->getValue();");
+        emitCode(Code + utostr(ResNo) + "C = (" + CastType + 
+                 ")cast<ConstantSDNode>(" + Val + ")->getValue();");
         emitCode("SDOperand Tmp" + utostr(ResNo) + 
                  " = CurDAG->getTargetConstant(Tmp" + utostr(ResNo) + 
                  "C, MVT::" + getEnumName(N->getTypeNum(0)) + ");");