Upgrade the bit count intrinsics to have an i32 result.
authorReid Spencer <rspencer@reidspencer.com>
Mon, 2 Apr 2007 02:08:05 +0000 (02:08 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 2 Apr 2007 02:08:05 +0000 (02:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35578 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-upgrade/UpgradeParser.y

index 37373cfa6d5a7af8892507980894af3a57fdf331..9cc29fb61b4971bf284d1301ca41c09bf4d765ad 100644 (file)
@@ -1466,6 +1466,25 @@ upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
         return new CallInst(F, Args[0]);
       }
       break;
+    case 'c':
+      if ((Name.length() <= 14 && !memcmp(&Name[5], "ctpop.i", 7)) ||
+          (Name.length() <= 13 && !memcmp(&Name[5], "ctlz.i", 6)) ||
+          (Name.length() <= 13 && !memcmp(&Name[5], "cttz.i", 6))) {
+        // These intrinsics changed their result type.
+        const Type* ArgTy = Args[0]->getType();
+        Function *OldF = CurModule.CurrentModule->getFunction(Name);
+        if (OldF)
+          OldF->setName("upgrd.rm." + Name);
+
+        Function *NewF = cast<Function>(
+          CurModule.CurrentModule->getOrInsertFunction(Name, Type::Int32Ty, 
+                                                       ArgTy, (void*)0));
+
+        Instruction *Call = new CallInst(NewF, Args[0], "", CurBB);
+        return CastInst::createIntegerCast(Call, RetTy, false);
+      }
+      break;
+
     case 'v' : {
       const Type* PtrTy = PointerType::get(Type::Int8Ty);
       std::vector<const Type*> Params;