[opaque pointer type] Verifier/AutoUpgrade: Remove a few uses of PointerType::getElem...
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 24 Apr 2015 21:16:07 +0000 (21:16 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 24 Apr 2015 21:16:07 +0000 (21:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235777 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/IR/IRBuilder.h
lib/IR/AutoUpgrade.cpp
lib/IR/Verifier.cpp

index daa65cdb012e47be2ce4a453859a281a4c6d8be2..d6550e3dbf023c3e5ff5b2ea4dfa2697f6aaaba8 100644 (file)
@@ -1448,8 +1448,14 @@ public:
   }
   CallInst *CreateCall2(Value *Callee, Value *Arg1, Value *Arg2,
                         const Twine &Name = "") {
   }
   CallInst *CreateCall2(Value *Callee, Value *Arg1, Value *Arg2,
                         const Twine &Name = "") {
+    return CreateCall2(cast<FunctionType>(cast<PointerType>(Callee->getType())
+                                              ->getElementType()),
+                       Callee, Arg1, Arg2, Name);
+  }
+  CallInst *CreateCall2(FunctionType *Ty, Value *Callee, Value *Arg1,
+                        Value *Arg2, const Twine &Name = "") {
     Value *Args[] = { Arg1, Arg2 };
     Value *Args[] = { Arg1, Arg2 };
-    return Insert(CallInst::Create(Callee, Args), Name);
+    return Insert(CallInst::Create(Ty, Callee, Args), Name);
   }
   CallInst *CreateCall3(Value *Callee, Value *Arg1, Value *Arg2, Value *Arg3,
                         const Twine &Name = "") {
   }
   CallInst *CreateCall3(Value *Callee, Value *Arg1, Value *Arg2, Value *Arg3,
                         const Twine &Name = "") {
index bb23d2c97155d762ce0237460fa4944648c96de6..7081c749058909fa44f08583f342ff0567ba7d06 100644 (file)
@@ -767,16 +767,14 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
     // Old intrinsic, add bitcasts
     Value *Arg1 = CI->getArgOperand(1);
 
     // Old intrinsic, add bitcasts
     Value *Arg1 = CI->getArgOperand(1);
 
-    Value *BC0 =
-      Builder.CreateBitCast(Arg0,
-                            VectorType::get(Type::getInt64Ty(C), 2),
-                            "cast");
-    Value *BC1 =
-      Builder.CreateBitCast(Arg1,
-                            VectorType::get(Type::getInt64Ty(C), 2),
-                            "cast");
-
-    CallInst* NewCall = Builder.CreateCall2(NewFn, BC0, BC1, Name);
+    Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2);
+
+    Value *BC0 = Builder.CreateBitCast(Arg0, NewVecTy, "cast");
+    Value *BC1 = Builder.CreateBitCast(Arg1, NewVecTy, "cast");
+
+    Type *Ty[] = {NewVecTy, NewVecTy};
+    CallInst *NewCall = Builder.CreateCall2(
+        FunctionType::get(CI->getType(), Ty, false), NewFn, BC0, BC1, Name);
     CI->replaceAllUsesWith(NewCall);
     CI->eraseFromParent();
     return;
     CI->replaceAllUsesWith(NewCall);
     CI->eraseFromParent();
     return;
index 7001c556d2006452de14d6cc3fe28a4314bcc3a0..099cbd9e0fecf249b0e88b9ebb290e4c9d13cbad 100644 (file)
@@ -2243,12 +2243,8 @@ void Verifier::verifyMustTailCall(CallInst &CI) {
   //   parameters or return types may differ in pointee type, but not
   //   address space.
   Function *F = CI.getParent()->getParent();
   //   parameters or return types may differ in pointee type, but not
   //   address space.
   Function *F = CI.getParent()->getParent();
-  auto GetFnTy = [](Value *V) {
-    return cast<FunctionType>(
-        cast<PointerType>(V->getType())->getElementType());
-  };
-  FunctionType *CallerTy = GetFnTy(F);
-  FunctionType *CalleeTy = GetFnTy(CI.getCalledValue());
+  FunctionType *CallerTy = F->getFunctionType();
+  FunctionType *CalleeTy = CI.getFunctionType();
   Assert(CallerTy->getNumParams() == CalleeTy->getNumParams(),
          "cannot guarantee tail call due to mismatched parameter counts", &CI);
   Assert(CallerTy->isVarArg() == CalleeTy->isVarArg(),
   Assert(CallerTy->getNumParams() == CalleeTy->getNumParams(),
          "cannot guarantee tail call due to mismatched parameter counts", &CI);
   Assert(CallerTy->isVarArg() == CalleeTy->isVarArg(),
@@ -2600,7 +2596,7 @@ void Verifier::visitAllocaInst(AllocaInst &AI) {
   Assert(PTy->getAddressSpace() == 0,
          "Allocation instruction pointer not in the generic address space!",
          &AI);
   Assert(PTy->getAddressSpace() == 0,
          "Allocation instruction pointer not in the generic address space!",
          &AI);
-  Assert(PTy->getElementType()->isSized(&Visited),
+  Assert(AI.getAllocatedType()->isSized(&Visited),
          "Cannot allocate unsized type", &AI);
   Assert(AI.getArraySize()->getType()->isIntegerTy(),
          "Alloca array size must have integer type", &AI);
          "Cannot allocate unsized type", &AI);
   Assert(AI.getArraySize()->getType()->isIntegerTy(),
          "Alloca array size must have integer type", &AI);