For PR950:
The long awaited CAST patch. This introduces 12 new instructions into LLVM
to replace the cast instruction. Corresponding changes throughout LLVM are
provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the
exception of 175.vpr which fails only on a slight floating point output
difference.

llvm-svn: 31931
diff --git a/llvm/lib/Transforms/Utils/LowerAllocations.cpp b/llvm/lib/Transforms/Utils/LowerAllocations.cpp
index d08235c..b7e4040 100644
--- a/llvm/lib/Transforms/Utils/LowerAllocations.cpp
+++ b/llvm/lib/Transforms/Utils/LowerAllocations.cpp
@@ -134,7 +134,7 @@
         } else {
           Value *Scale = MI->getOperand(0);
           if (Scale->getType() != IntPtrTy)
-            Scale = new CastInst(Scale, IntPtrTy, "", I);
+            Scale = CastInst::createInferredCast(Scale, IntPtrTy, "", I);
 
           // Multiply it by the array size if necessary...
           MallocArg = BinaryOperator::create(Instruction::Mul, Scale,
@@ -148,10 +148,13 @@
       if (MallocFTy->getNumParams() > 0 || MallocFTy->isVarArg()) {
         if (MallocFTy->isVarArg()) {
           if (MallocArg->getType() != IntPtrTy)
-            MallocArg = new CastInst(MallocArg, IntPtrTy, "", I);
+            MallocArg = CastInst::createInferredCast(MallocArg, IntPtrTy, "", 
+                                                     I);
         } else if (MallocFTy->getNumParams() > 0 &&
                    MallocFTy->getParamType(0) != Type::UIntTy)
-          MallocArg = new CastInst(MallocArg, MallocFTy->getParamType(0), "",I);
+          MallocArg = 
+            CastInst::createInferredCast(MallocArg, MallocFTy->getParamType(0),
+                                         "",I);
         MallocArgs.push_back(MallocArg);
       }
 
@@ -166,7 +169,7 @@
       // Create a cast instruction to convert to the right type...
       Value *MCast;
       if (MCall->getType() != Type::VoidTy)
-        MCast = new CastInst(MCall, MI->getType(), "", I);
+        MCast = CastInst::createInferredCast(MCall, MI->getType(), "", I);
       else
         MCast = Constant::getNullValue(MI->getType());
 
@@ -183,7 +186,8 @@
         Value *MCast = FI->getOperand(0);
         if (FreeFTy->getNumParams() > 0 &&
             FreeFTy->getParamType(0) != MCast->getType())
-          MCast = new CastInst(MCast, FreeFTy->getParamType(0), "", I);
+          MCast = CastInst::createInferredCast(MCast, FreeFTy->getParamType(0), 
+                                               "", I);
         FreeArgs.push_back(MCast);
       }