From: David Blaikie Date: Fri, 24 Apr 2015 21:16:07 +0000 (+0000) Subject: [opaque pointer type] Verifier/AutoUpgrade: Remove a few uses of PointerType::getElem... X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=2bf0f6fdabef87d8d444e067c1264fb290eca9df;hp=3be414736a67463ede1ff7f86e145897d79856fa [opaque pointer type] Verifier/AutoUpgrade: Remove a few uses of PointerType::getElementType git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235777 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/IR/IRBuilder.h b/include/llvm/IR/IRBuilder.h index daa65cdb012..d6550e3dbf0 100644 --- a/include/llvm/IR/IRBuilder.h +++ b/include/llvm/IR/IRBuilder.h @@ -1448,8 +1448,14 @@ public: } CallInst *CreateCall2(Value *Callee, Value *Arg1, Value *Arg2, const Twine &Name = "") { + return CreateCall2(cast(cast(Callee->getType()) + ->getElementType()), + Callee, Arg1, Arg2, Name); + } + CallInst *CreateCall2(FunctionType *Ty, Value *Callee, Value *Arg1, + Value *Arg2, const Twine &Name = "") { 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 = "") { diff --git a/lib/IR/AutoUpgrade.cpp b/lib/IR/AutoUpgrade.cpp index bb23d2c9715..7081c749058 100644 --- a/lib/IR/AutoUpgrade.cpp +++ b/lib/IR/AutoUpgrade.cpp @@ -767,16 +767,14 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { // 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; diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 7001c556d20..099cbd9e0fe 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -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(); - auto GetFnTy = [](Value *V) { - return cast( - cast(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(), @@ -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->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);