Replace CastInst::createInferredCast calls with more accurate cast
authorReid Spencer <rspencer@reidspencer.com>
Wed, 13 Dec 2006 00:50:17 +0000 (00:50 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 13 Dec 2006 00:50:17 +0000 (00:50 +0000)
creation calls.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32521 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
lib/Transforms/IPO/IndMemRemoval.cpp
lib/Transforms/IPO/RaiseAllocations.cpp
lib/Transforms/IPO/SimplifyLibCalls.cpp
lib/Transforms/Instrumentation/ProfilingUtils.cpp
lib/Transforms/Instrumentation/TraceValues.cpp
lib/Transforms/LevelRaise.cpp
lib/Transforms/Scalar/LowerGC.cpp
lib/Transforms/Utils/LowerAllocations.cpp

index c112b873b7b5d0a8cbdae5422c2cbee9ec7a9f45..f3ae2485744a207c09f3ce0573faef775bd61b65 100644 (file)
@@ -3519,8 +3519,8 @@ static bool OptimizeNoopCopyExpression(CastInst *CI) {
       while (isa<PHINode>(InsertPt)) ++InsertPt;
       
       InsertedCast = 
-        CastInst::createInferredCast(CI->getOperand(0), CI->getType(), "", 
-                                     InsertPt);
+        CastInst::create(CI->getOpcode(), CI->getOperand(0), CI->getType(), "", 
+                         InsertPt);
       MadeChange = true;
     }
     
@@ -3559,8 +3559,8 @@ static Instruction *InsertGEPComputeCode(Instruction *&V, BasicBlock *BB,
   // operand).
   if (CastInst *CI = dyn_cast<CastInst>(Ptr))
     if (CI->getParent() != BB && isa<PointerType>(CI->getOperand(0)->getType()))
-      Ptr = CastInst::createInferredCast(CI->getOperand(0), CI->getType(), "",
-                                         InsertPt);
+      Ptr = CastInst::create(CI->getOpcode(), CI->getOperand(0), CI->getType(),
+                             "", InsertPt);
   
   // Add the offset, cast it to the right type.
   Ptr = BinaryOperator::createAdd(Ptr, PtrOffset, "", InsertPt);
@@ -3702,7 +3702,7 @@ static bool OptimizeGEPExpression(GetElementPtrInst *GEPI,
       // Ptr = Ptr + Idx * ElementSize;
       
       // Cast Idx to UIntPtrTy if needed.
-      Idx = CastInst::createInferredCast(Idx, UIntPtrTy, "", GEPI);
+      Idx = CastInst::createIntegerCast(Idx, UIntPtrTy, true/*SExt*/, "", GEPI);
       
       uint64_t ElementSize = TD->getTypeSize(Ty);
       // Mask off bits that should not be set.
index 9d3c147a1f6b795a210277aaf4da33113ef645f3..9ad25dd9fa0714f4f4af089906dc2983fb396a89 100644 (file)
@@ -74,8 +74,8 @@ bool IndMemRemPass::runOnModule(Module &M) {
                                  GlobalValue::LinkOnceLinkage, 
                                  "malloc_llvm_bounce", &M);
       BasicBlock* bb = new BasicBlock("entry",FN);
-      Instruction* c = 
-        CastInst::createInferredCast(FN->arg_begin(), Type::UIntTy, "c", bb);
+      Instruction* c = CastInst::createIntegerCast(
+          FN->arg_begin(), Type::UIntTy, false, "c", bb);
       Instruction* a = new MallocInst(Type::SByteTy, c, "m", bb);
       new ReturnInst(a, bb);
       ++NumBounce;
index 77a9a3d57ea9c40969870d5b67f1936d68728883..46c6815994f7af9c67c30a21e2bd427b938f06b9 100644 (file)
@@ -141,8 +141,8 @@ bool RaiseAllocations::runOnModule(Module &M) {
           // source size.
           if (Source->getType() != Type::UIntTy)
             Source = 
-              CastInst::createInferredCast(Source, Type::UIntTy,
-                                           "MallocAmtCast", I);
+              CastInst::createIntegerCast(Source, Type::UIntTy, false/*ZExt*/,
+                                          "MallocAmtCast", I);
 
           std::string Name(I->getName()); I->setName("");
           MallocInst *MI = new MallocInst(Type::SByteTy, Source, Name, I);
@@ -193,8 +193,8 @@ bool RaiseAllocations::runOnModule(Module &M) {
           //
           Value *Source = *CS.arg_begin();
           if (!isa<PointerType>(Source->getType()))
-            Source = CastInst::createInferredCast(
-                Source, PointerType::get(Type::SByteTy), "FreePtrCast", I);
+            Source = new IntToPtrInst(Source, PointerType::get(Type::SByteTy), 
+                                      "FreePtrCast", I);
           new FreeInst(Source, I);
 
           // If the old instruction was an invoke, add an unconditional branch
index f989d1dd162f34a1b7148460ab481537ffb36c81..8f2b94d1d8bb24b792b92128c2796396b5fd77db 100644 (file)
@@ -1009,7 +1009,8 @@ struct memcmpOptimization : public LibCallOptimization {
       Value *S2V = new LoadInst(Op2Cast, RHS->getName()+".val", CI);
       Value *RV = BinaryOperator::createSub(S1V, S2V, CI->getName()+".diff",CI);
       if (RV->getType() != CI->getType())
-        RV = CastInst::createInferredCast(RV, CI->getType(), RV->getName(), CI);
+        RV = CastInst::createIntegerCast(RV, CI->getType(), false, 
+                                         RV->getName(), CI);
       CI->replaceAllUsesWith(RV);
       CI->eraseFromParent();
       return true;
@@ -1037,8 +1038,8 @@ struct memcmpOptimization : public LibCallOptimization {
                                               CI->getName()+".d1", CI);
         Value *Or = BinaryOperator::createOr(D1, D2, CI->getName()+".res", CI);
         if (Or->getType() != CI->getType())
-          Or = CastInst::createInferredCast(Or, CI->getType(), Or->getName()
-                                            CI);
+          Or = CastInst::createIntegerCast(Or, CI->getType(), false /*ZExt*/
+                                           Or->getName(), CI);
         CI->replaceAllUsesWith(Or);
         CI->eraseFromParent();
         return true;
@@ -1222,8 +1223,8 @@ struct LLVMMemSetOptimization : public LibCallOptimization {
     }
 
     // Cast dest to the right sized primitive and then load/store
-    CastInst* DestCast = CastInst::createInferredCast(
-        dest, PointerType::get(castType), dest->getName()+".cast", ci);
+    CastInst* DestCast = new BitCastInst(dest, PointerType::get(castType), 
+                                         dest->getName()+".cast", ci);
     new StoreInst(ConstantInt::get(castType,fill_value),DestCast, ci);
     ci->eraseFromParent();
     return true;
@@ -1365,7 +1366,7 @@ public:
         Function* putchar_func = SLC.get_putchar();
         if (!putchar_func)
           return false;
-        CastInst* cast = CastInst::createInferredCast(
+        CastInst* cast = CastInst::createSExtOrBitCast(
             ci->getOperand(2), Type::IntTy, CI->getName()+".int", ci);
         new CallInst(putchar_func, cast, "", ci);
         ci->replaceAllUsesWith(ConstantInt::get(Type::IntTy, 1));
@@ -1499,7 +1500,7 @@ public:
         Function* fputc_func = SLC.get_fputc(FILEptr_type);
         if (!fputc_func)
           return false;
-        CastInst* cast = CastInst::createInferredCast(
+        CastInst* cast = CastInst::createSExtOrBitCast(
             ci->getOperand(3), Type::IntTy, CI->getName()+".int", ci);
         new CallInst(fputc_func,cast,ci->getOperand(1),"",ci);
         ci->replaceAllUsesWith(ConstantInt::get(Type::IntTy,1));
@@ -1606,8 +1607,8 @@ public:
                                             ConstantInt::get(Len->getType(), 1),
                                               Len->getName()+"1", ci);
       if (Len1->getType() != SLC.getIntPtrType())
-        Len1 = CastInst::createInferredCast(
-            Len1, SLC.getIntPtrType(), Len1->getName(), ci);
+        Len1 = CastInst::createIntegerCast(Len1, SLC.getIntPtrType(), false,
+                                           Len1->getName(), ci);
       std::vector<Value*> args;
       args.push_back(CastToCStr(ci->getOperand(1), *ci));
       args.push_back(CastToCStr(ci->getOperand(3), *ci));
@@ -1618,8 +1619,8 @@ public:
       // The strlen result is the unincremented number of bytes in the string.
       if (!ci->use_empty()) {
         if (Len->getType() != ci->getType())
-          Len = CastInst::createInferredCast(
-              Len, ci->getType(), Len->getName(), ci);
+          Len = CastInst::createIntegerCast(Len, ci->getType(), false, 
+                                            Len->getName(), ci);
         ci->replaceAllUsesWith(Len);
       }
       ci->eraseFromParent();
@@ -1627,7 +1628,7 @@ public:
     }
     case 'c': {
       // sprintf(dest,"%c",chr) -> store chr, dest
-      CastInst* cast = CastInst::createInferredCast(
+      CastInst* cast = CastInst::createTruncOrBitCast(
           ci->getOperand(3), Type::SByteTy, "char", ci);
       new StoreInst(cast, ci->getOperand(1), ci);
       GetElementPtrInst* gep = new GetElementPtrInst(ci->getOperand(1),
@@ -1684,8 +1685,8 @@ public:
           return false;
         LoadInst* loadi = new LoadInst(ci->getOperand(1),
           ci->getOperand(1)->getName()+".byte",ci);
-        CastInst* casti = CastInst::createInferredCast(
-            loadi, Type::IntTy, loadi->getName()+".int", ci);
+        CastInst* casti = new SExtInst(loadi, Type::IntTy, 
+                                       loadi->getName()+".int", ci);
         new CallInst(fputc_func,casti,ci->getOperand(2),"",ci);
         break;
       }
@@ -1738,16 +1739,16 @@ public:
     }
 
     // isdigit(c)   -> (unsigned)c - '0' <= 9
-    CastInst* cast = CastInst::createInferredCast(ci->getOperand(1),
-        Type::UIntTy, ci->getOperand(1)->getName()+".uint", ci);
+    CastInst* cast = CastInst::createIntegerCast(ci->getOperand(1),
+        Type::UIntTy, false/*ZExt*/, ci->getOperand(1)->getName()+".uint", ci);
     BinaryOperator* sub_inst = BinaryOperator::createSub(cast,
         ConstantInt::get(Type::UIntTy,0x30),
         ci->getOperand(1)->getName()+".sub",ci);
     SetCondInst* setcond_inst = new SetCondInst(Instruction::SetLE,sub_inst,
         ConstantInt::get(Type::UIntTy,9),
         ci->getOperand(1)->getName()+".cmp",ci);
-    CastInst* c2 = CastInst::createInferredCast(
-        setcond_inst, Type::IntTy, ci->getOperand(1)->getName()+".isdigit", ci);
+    CastInst* c2 = new SExtInst(setcond_inst, Type::IntTy, 
+        ci->getOperand(1)->getName()+".isdigit", ci);
     ci->replaceAllUsesWith(c2);
     ci->eraseFromParent();
     return true;
@@ -1769,14 +1770,13 @@ public:
     // isascii(c)   -> (unsigned)c < 128
     Value *V = CI->getOperand(1);
     if (V->getType()->isSigned())
-      V = CastInst::createInferredCast(V, V->getType()->getUnsignedVersion(), 
-                                       V->getName(), CI);
+      V = new BitCastInst(V, V->getType()->getUnsignedVersion(), V->getName(), 
+                          CI);
     Value *Cmp = BinaryOperator::createSetLT(V, ConstantInt::get(V->getType(),
                                                                   128),
                                              V->getName()+".isascii", CI);
     if (Cmp->getType() != CI->getType())
-      Cmp = CastInst::createInferredCast(
-          Cmp, CI->getType(), Cmp->getName(), CI);
+      Cmp = new BitCastInst(Cmp, CI->getType(), Cmp->getName(), CI);
     CI->replaceAllUsesWith(Cmp);
     CI->eraseFromParent();
     return true;
@@ -1870,10 +1870,11 @@ public:
     
     Function *F = SLC.getModule()->getOrInsertFunction(CTTZName, ArgType,
                                                        ArgType, NULL);
-    Value *V = CastInst::createInferredCast(
-        TheCall->getOperand(1), ArgType, "tmp", TheCall);
+    Value *V = CastInst::createIntegerCast(TheCall->getOperand(1), ArgType, 
+                                           false/*ZExt*/, "tmp", TheCall);
     Value *V2 = new CallInst(F, V, "tmp", TheCall);
-    V2 = CastInst::createInferredCast(V2, Type::IntTy, "tmp", TheCall);
+    V2 = CastInst::createIntegerCast(V2, Type::IntTy, true/*SExt*/, 
+                                     "tmp", TheCall);
     V2 = BinaryOperator::createAdd(V2, ConstantInt::get(Type::IntTy, 1),
                                    "tmp", TheCall);
     Value *Cond = 
@@ -2116,9 +2117,11 @@ bool getConstantStringLength(Value *V, uint64_t &len, ConstantArray **CA) {
 /// inserting the cast before IP, and return the cast.
 /// @brief Cast a value to a "C" string.
 Value *CastToCStr(Value *V, Instruction &IP) {
+  assert(V->getType()->getTypeID() == Type::PointerTyID && 
+         "Can't cast non-pointer type to C string type");
   const Type *SBPTy = PointerType::get(Type::SByteTy);
   if (V->getType() != SBPTy)
-    return CastInst::createInferredCast(V, SBPTy, V->getName(), &IP);
+    return new BitCastInst(V, SBPTy, V->getName(), &IP);
   return V;
 }
 
index 887de5bfe2f1aa695e717ac058ad39dd9e8bb3f0..274275a689baffafdc786092abdc14ccdf31b75e 100644 (file)
@@ -67,6 +67,7 @@ void llvm::InsertProfilingInitCall(Function *MainFn, const char *FnName,
     } else {
       InitCall->setOperand(2, AI);
     }
+    /* FALL THROUGH */
 
   case 1:
     AI = MainFn->arg_begin();
index 7451b51c31ab9dad79042c73ae47f668274db418..f6048f140d1c42a2f40430cfd4d372844bfb8ce8 100644 (file)
@@ -281,7 +281,7 @@ InsertReleaseInst(Value *V, BasicBlock *BB,
 
   const Type *SBP = PointerType::get(Type::SByteTy);
   if (V->getType() != SBP)    // Cast pointer to be sbyte*
-    V = CastInst::createInferredCast(V, SBP, "RPSN_cast", InsertBefore);
+    V = new BitCastInst(V, SBP, "RPSN_cast", InsertBefore);
 
   std::vector<Value*> releaseArgs(1, V);
   new CallInst(ReleasePtrFunc, releaseArgs, "", InsertBefore);
@@ -293,7 +293,7 @@ InsertRecordInst(Value *V, BasicBlock *BB,
                  Function* RecordPtrFunc) {
     const Type *SBP = PointerType::get(Type::SByteTy);
   if (V->getType() != SBP)     // Cast pointer to be sbyte*
-    V = CastInst::createInferredCast(V, SBP, "RP_cast", InsertBefore);
+    V = new BitCastInst(V, SBP, "RP_cast", InsertBefore);
 
   std::vector<Value*> releaseArgs(1, V);
   new CallInst(RecordPtrFunc, releaseArgs, "", InsertBefore);
index 56622693a25ee02108570c6c56cfd626ae6f0842..c5ac8c98b97d3bf5c498c07cad2336b94e755ca5 100644 (file)
@@ -258,8 +258,8 @@ bool RPR::PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
               // The existing and new operand 0 types are different so we must
               // replace CI with a new CastInst so that we are assured to 
               // get the correct cast opcode.
-              CastInst *NewCI = CastInst::createInferredCast(
-                GEP, CI->getType(), CI->getName(), CI);
+              CastInst *NewCI = new BitCastInst(GEP, CI->getType(), 
+                                                CI->getName(), CI);
               CI->replaceAllUsesWith(NewCI);
               CI->eraseFromParent();
               CI = NewCI;
index fdfbf7f11ca7031db79926589a264654e29883b3..e844213b6a1bf43ed1a2120c26a8ad365071e72e 100644 (file)
@@ -146,8 +146,7 @@ static void Coerce(Instruction *I, unsigned OpNum, Type *Ty) {
     if (Constant *C = dyn_cast<Constant>(I->getOperand(OpNum)))
       I->setOperand(OpNum, ConstantExpr::getBitCast(C, Ty));
     else {
-      CastInst *CI = 
-        CastInst::createInferredCast(I->getOperand(OpNum), Ty, "", I);
+      CastInst *CI = new BitCastInst(I->getOperand(OpNum), Ty, "", I);
       I->setOperand(OpNum, CI);
     }
   }
index d011d7547574507181108e2052234b29d6e40d12..30b0ab827e0972ea7055f27c659641a6d69f50f7 100644 (file)
@@ -135,7 +135,8 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
         } else {
           Value *Scale = MI->getOperand(0);
           if (Scale->getType() != IntPtrTy)
-            Scale = CastInst::createInferredCast(Scale, IntPtrTy, "", I);
+            Scale = CastInst::createIntegerCast(Scale, IntPtrTy, false /*ZExt*/,
+                                                "", I);
 
           // Multiply it by the array size if necessary...
           MallocArg = BinaryOperator::create(Instruction::Mul, Scale,
@@ -149,13 +150,12 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
       if (MallocFTy->getNumParams() > 0 || MallocFTy->isVarArg()) {
         if (MallocFTy->isVarArg()) {
           if (MallocArg->getType() != IntPtrTy)
-            MallocArg = CastInst::createInferredCast(MallocArg, IntPtrTy, ""
-                                                     I);
+            MallocArg = CastInst::createIntegerCast(MallocArg, IntPtrTy
+                                                    false /*ZExt*/, "", I);
         } else if (MallocFTy->getNumParams() > 0 &&
                    MallocFTy->getParamType(0) != Type::UIntTy)
-          MallocArg = 
-            CastInst::createInferredCast(MallocArg, MallocFTy->getParamType(0),
-                                         "",I);
+          MallocArg = CastInst::createIntegerCast(
+              MallocArg, MallocFTy->getParamType(0), false/*ZExt*/, "",I);
         MallocArgs.push_back(MallocArg);
       }
 
@@ -170,7 +170,7 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
       // Create a cast instruction to convert to the right type...
       Value *MCast;
       if (MCall->getType() != Type::VoidTy)
-        MCast = CastInst::createInferredCast(MCall, MI->getType(), "", I);
+        MCast = new BitCastInst(MCall, MI->getType(), "", I);
       else
         MCast = Constant::getNullValue(MI->getType());
 
@@ -187,8 +187,7 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
         Value *MCast = FI->getOperand(0);
         if (FreeFTy->getNumParams() > 0 &&
             FreeFTy->getParamType(0) != MCast->getType())
-          MCast = CastInst::createInferredCast(MCast, FreeFTy->getParamType(0), 
-                                               "", I);
+          MCast = new BitCastInst(MCast, FreeFTy->getParamType(0), "", I);
         FreeArgs.push_back(MCast);
       }