diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index 4caa2c1..498339c 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -446,7 +446,11 @@
       // integer type.  This promotes constant folding and simplifies this code.
       if (isa<PointerType>(Ty)) {
         const Type *IntPtrTy = TD->getIntPtrType();
-        Op = ConstantExpr::getCast(Op, IntPtrTy);
+        Instruction::CastOps opcode = Instruction::CastOps(CE->getOpcode());
+        if (opcode == Instruction::IntToPtr)
+          Op = ConstantExpr::getIntegerCast(Op, IntPtrTy, false /*ZExt*/);
+        else 
+          Op = ConstantExpr::getCast(Instruction::PtrToInt, Op, IntPtrTy);
         return EmitConstantValueOnly(Op);
       }
       
diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp
index 753f459..55f1c3c 100644
--- a/lib/CodeGen/IntrinsicLowering.cpp
+++ b/lib/CodeGen/IntrinsicLowering.cpp
@@ -239,7 +239,7 @@
 
   for (unsigned i = 1, ct = 0; i != BitSize; i <<= 1, ++ct) {
     Value *MaskCst =
-      ConstantExpr::getCast(ConstantInt::get(Type::ULongTy, MaskValues[ct]),
+      ConstantExpr::getTruncOrBitCast(ConstantInt::get(Type::ULongTy, MaskValues[ct]),
                                              V->getType());
     Value *LHS = BinaryOperator::createAnd(V, MaskCst, "cppop.and1", IP);
     Value *VShift = new ShiftInst(Instruction::LShr, V,
diff --git a/lib/CodeGen/MachineDebugInfo.cpp b/lib/CodeGen/MachineDebugInfo.cpp
index bc75ccb..d3b6ecb 100644
--- a/lib/CodeGen/MachineDebugInfo.cpp
+++ b/lib/CodeGen/MachineDebugInfo.cpp
@@ -292,7 +292,7 @@
     
     if (GV) {
       // Set to pointer to global.
-      Elements.push_back(ConstantExpr::getCast(GV, EmptyTy));
+      Elements.push_back(ConstantExpr::getBitCast(GV, EmptyTy));
     } else {
       // Use NULL.
       Elements.push_back(ConstantPointerNull::get(EmptyTy));
@@ -301,7 +301,7 @@
   virtual void Apply(GlobalVariable *&Field) {
     const PointerType *EmptyTy = SR.getEmptyStructPtrType();
     if (Field) {
-      Elements.push_back(ConstantExpr::getCast(Field, EmptyTy));
+      Elements.push_back(ConstantExpr::getBitCast(Field, EmptyTy));
     } else {
       Elements.push_back(ConstantPointerNull::get(EmptyTy));
     }
@@ -315,7 +315,7 @@
     for (unsigned i = 0, N = Field.size(); i < N; ++i) {
       if (DebugInfoDesc *Element = Field[i]) {
         GlobalVariable *GVE = SR.Serialize(Element);
-        Constant *CE = ConstantExpr::getCast(GVE, EmptyTy);
+        Constant *CE = ConstantExpr::getBitCast(GVE, EmptyTy);
         ArrayElements.push_back(cast<Constant>(CE));
       } else {
         ArrayElements.push_back(ConstantPointerNull::get(EmptyTy));
@@ -328,7 +328,7 @@
                                               CA, "llvm.dbg.array",
                                               SR.getModule());
     CAGV->setSection("llvm.metadata");
-    Constant *CAE = ConstantExpr::getCast(CAGV, EmptyTy);
+    Constant *CAE = ConstantExpr::getBitCast(CAGV, EmptyTy);
     Elements.push_back(CAE);
   }
 };
@@ -1323,7 +1323,7 @@
                                                ConstStr, "str", M);
     StrGV->setSection("llvm.metadata");
     // Convert to generic string pointer.
-    Slot = ConstantExpr::getCast(StrGV, getStrPtrType());
+    Slot = ConstantExpr::getBitCast(StrGV, getStrPtrType());
   }
   return Slot;
   
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 4d5d3da..4cbc9fe 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -790,7 +790,7 @@
           // Only do this if the target has a native EXTLOAD instruction from
           // f32.
           TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
-        LLVMC = cast<ConstantFP>(ConstantExpr::getCast(LLVMC, Type::FloatTy));
+        LLVMC = cast<ConstantFP>(ConstantExpr::getFPCast(LLVMC, Type::FloatTy));
         VT = MVT::f32;
         Extend = true;
       }
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index 28c452d..4cfd907 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -212,7 +212,7 @@
       } else {
         C = ConstantInt::get(Type::LongTy, (intptr_t)ArgPtr);
       }
-      C = ConstantExpr::getCast(C, ArgTy);  // Cast the integer to pointer
+      C = ConstantExpr::getIntToPtr(C, ArgTy);  // Cast the integer to pointer
       break;
     }
     Args.push_back(C);
