diff --git a/llvm/include/llvm/Analysis/MemoryBuiltins.h b/llvm/include/llvm/Analysis/MemoryBuiltins.h --- a/llvm/include/llvm/Analysis/MemoryBuiltins.h +++ b/llvm/include/llvm/Analysis/MemoryBuiltins.h @@ -19,7 +19,6 @@ #include "llvm/ADT/SmallPtrSet.h" #include "llvm/Analysis/TargetFolder.h" #include "llvm/Analysis/TargetLibraryInfo.h" -#include "llvm/IR/CallSite.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstVisitor.h" #include "llvm/IR/ValueHandle.h" @@ -267,7 +266,7 @@ // compute() should be used by external users. SizeOffsetType visitAllocaInst(AllocaInst &I); SizeOffsetType visitArgument(Argument &A); - SizeOffsetType visitCallSite(CallSite CS); + SizeOffsetType visitCallBase(CallBase &CB); SizeOffsetType visitConstantPointerNull(ConstantPointerNull&); SizeOffsetType visitExtractElementInst(ExtractElementInst &I); SizeOffsetType visitExtractValueInst(ExtractValueInst &I); @@ -337,7 +336,7 @@ // The individual instruction visitors should be treated as private. SizeOffsetEvalType visitAllocaInst(AllocaInst &I); - SizeOffsetEvalType visitCallSite(CallSite CS); + SizeOffsetEvalType visitCallBase(CallBase &CB); SizeOffsetEvalType visitExtractElementInst(ExtractElementInst &I); SizeOffsetEvalType visitExtractValueInst(ExtractValueInst &I); SizeOffsetEvalType visitGEPOperator(GEPOperator &GEP); diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -119,13 +119,13 @@ if (LookThroughBitCast) V = V->stripPointerCasts(); - ImmutableCallSite CS(V); - if (!CS.getInstruction()) + const auto *CB = dyn_cast(V); + if (!CB) return nullptr; - IsNoBuiltin = CS.isNoBuiltin(); + IsNoBuiltin = CB->isNoBuiltin(); - if (const Function *Callee = CS.getCalledFunction()) + if (const Function *Callee = CB->getCalledFunction()) return Callee; return nullptr; } @@ -227,8 +227,9 @@ } static bool hasNoAliasAttr(const Value *V, bool LookThroughBitCast) { - ImmutableCallSite CS(LookThroughBitCast ? V->stripPointerCasts() : V); - return CS && CS.hasRetAttr(Attribute::NoAlias); + const auto *CB = + dyn_cast(LookThroughBitCast ? V->stripPointerCasts() : V); + return CB && CB->hasRetAttr(Attribute::NoAlias); } /// Tests if a value is a call or invoke to a library function that @@ -682,21 +683,21 @@ return std::make_pair(align(Size, A.getParamAlignment()), Zero); } -SizeOffsetType ObjectSizeOffsetVisitor::visitCallSite(CallSite CS) { - Optional FnData = getAllocationSize(CS.getInstruction(), TLI); +SizeOffsetType ObjectSizeOffsetVisitor::visitCallBase(CallBase &CB) { + Optional FnData = getAllocationSize(&CB, TLI); if (!FnData) return unknown(); // Handle strdup-like functions separately. if (FnData->AllocTy == StrDupLike) { - APInt Size(IntTyBits, GetStringLength(CS.getArgument(0))); + APInt Size(IntTyBits, GetStringLength(CB.getArgOperand(0))); if (!Size) return unknown(); // Strndup limits strlen. if (FnData->FstParam > 0) { ConstantInt *Arg = - dyn_cast(CS.getArgument(FnData->FstParam)); + dyn_cast(CB.getArgOperand(FnData->FstParam)); if (!Arg) return unknown(); @@ -707,7 +708,7 @@ return std::make_pair(Size, Zero); } - ConstantInt *Arg = dyn_cast(CS.getArgument(FnData->FstParam)); + ConstantInt *Arg = dyn_cast(CB.getArgOperand(FnData->FstParam)); if (!Arg) return unknown(); @@ -719,7 +720,7 @@ if (FnData->SndParam < 0) return std::make_pair(Size, Zero); - Arg = dyn_cast(CS.getArgument(FnData->SndParam)); + Arg = dyn_cast(CB.getArgOperand(FnData->SndParam)); if (!Arg) return unknown(); @@ -947,8 +948,8 @@ return std::make_pair(Size, Zero); } -SizeOffsetEvalType ObjectSizeOffsetEvaluator::visitCallSite(CallSite CS) { - Optional FnData = getAllocationSize(CS.getInstruction(), TLI); +SizeOffsetEvalType ObjectSizeOffsetEvaluator::visitCallBase(CallBase &CB) { + Optional FnData = getAllocationSize(&CB, TLI); if (!FnData) return unknown(); @@ -958,12 +959,12 @@ return unknown(); } - Value *FirstArg = CS.getArgument(FnData->FstParam); + Value *FirstArg = CB.getArgOperand(FnData->FstParam); FirstArg = Builder.CreateZExtOrTrunc(FirstArg, IntTy); if (FnData->SndParam < 0) return std::make_pair(FirstArg, Zero); - Value *SecondArg = CS.getArgument(FnData->SndParam); + Value *SecondArg = CB.getArgOperand(FnData->SndParam); SecondArg = Builder.CreateZExtOrTrunc(SecondArg, IntTy); Value *Size = Builder.CreateMul(FirstArg, SecondArg); return std::make_pair(Size, Zero);