Fix regression in old-style JIT.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 30 Oct 2012 22:21:55 +0000 (22:21 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 30 Oct 2012 22:21:55 +0000 (22:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167057 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/ExecutionEngine.cpp

index 99f6ec691ab8e914801d0adbbe32d9249acb8c94..8e30a939bc15307b9f59c4fbc565804b2f756e7e 100644 (file)
@@ -645,19 +645,17 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
     }
     case Instruction::PtrToInt: {
       GenericValue GV = getConstantValue(Op0);
-      assert(CE->getOperand(1)->getType()->isPointerTy() &&
-          "Must be a pointer type!");
-      uint32_t PtrWidth = TD->getTypeSizeInBits(CE->getOperand(1)->getType());
+      uint32_t PtrWidth = TD->getTypeSizeInBits(Op0->getType());
+      assert(PtrWidth <= 64 && "Bad pointer width");
       GV.IntVal = APInt(PtrWidth, uintptr_t(GV.PointerVal));
+      uint32_t IntWidth = TD->getTypeSizeInBits(CE->getType());
+      GV.IntVal = GV.IntVal.zextOrTrunc(IntWidth);
       return GV;
     }
     case Instruction::IntToPtr: {
       GenericValue GV = getConstantValue(Op0);
-      assert(CE->getOperand(1)->getType()->isPointerTy() &&
-          "Must be a pointer type!");
       uint32_t PtrWidth = TD->getTypeSizeInBits(CE->getType());
-      if (PtrWidth != GV.IntVal.getBitWidth())
-        GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth);
+      GV.IntVal = GV.IntVal.zextOrTrunc(PtrWidth);
       assert(GV.IntVal.getBitWidth() <= 64 && "Bad pointer width");
       GV.PointerVal = PointerTy(uintptr_t(GV.IntVal.getZExtValue()));
       return GV;