Don't forget about casting the result of an upgraded call to an intrinsic
authorReid Spencer <rspencer@reidspencer.com>
Thu, 19 Jan 2006 07:00:29 +0000 (07:00 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 19 Jan 2006 07:00:29 +0000 (07:00 +0000)
in the case where it needs to cast back to a signed type.

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

lib/VMCore/AutoUpgrade.cpp

index 8107d8a724480a2a126df1f8bcbf10618fcee087..26a9947d3062abe027fd6d007fc6cbf325fb1a1e 100644 (file)
@@ -141,7 +141,7 @@ Function* llvm::UpgradeIntrinsicFunction(Function* F) {
   return 0;
 }
 
-CallInst* llvm::UpgradeIntrinsicCall(CallInst *CI) {
+Instruction* llvm::UpgradeIntrinsicCall(CallInst *CI) {
   Function *F = CI->getCalledFunction();
   if (const Type* Ty = get_type(F)) {
     Function* newF = UpgradeIntrinsicFunction(F);
@@ -154,6 +154,9 @@ CallInst* llvm::UpgradeIntrinsicCall(CallInst *CI) {
       const Type* newTy = Ty->getUnsignedVersion();
       newCI->setOperand(1,new CastInst(newCI->getOperand(1), newTy, 
                      "autoupgrade_cast", newCI));
+      CastInst* final = new CastInst(newCI, Ty, "autoupgrade_uncast",newCI);
+      newCI->moveBefore(final);
+      return final;
     }
     return newCI;
   }