From dac20a82540d51177e127a608a972e502ad27113 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 11 Feb 2019 07:54:10 +0000 Subject: [PATCH] [CallSite removal] Port InstSimplify over to use `CallBase` both in its interface and implementation. Port code with: `cast(CS.getInstruction())`. llvm-svn: 353662 --- .../llvm/Analysis/InstructionSimplify.h | 8 ++-- llvm/lib/Analysis/InstructionSimplify.cpp | 38 +++++++++---------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/llvm/include/llvm/Analysis/InstructionSimplify.h b/llvm/include/llvm/Analysis/InstructionSimplify.h index daa8fb1b9591..a9040439d94c 100644 --- a/llvm/include/llvm/Analysis/InstructionSimplify.h +++ b/llvm/include/llvm/Analysis/InstructionSimplify.h @@ -40,8 +40,8 @@ class Function; template class AnalysisManager; template class ArrayRef; class AssumptionCache; +class CallBase; class DominatorTree; -class ImmutableCallSite; class DataLayout; class FastMathFlags; struct LoopStandardAnalysisResults; @@ -238,15 +238,15 @@ Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS, FastMathFlags FMF, const SimplifyQuery &Q); /// Given a callsite, fold the result or return null. -Value *SimplifyCall(ImmutableCallSite CS, const SimplifyQuery &Q); +Value *SimplifyCall(CallBase *Call, const SimplifyQuery &Q); /// Given a function and iterators over arguments, fold the result or return /// null. -Value *SimplifyCall(ImmutableCallSite CS, Value *V, User::op_iterator ArgBegin, +Value *SimplifyCall(CallBase *Call, Value *V, User::op_iterator ArgBegin, User::op_iterator ArgEnd, const SimplifyQuery &Q); /// Given a function and set of arguments, fold the result or return null. -Value *SimplifyCall(ImmutableCallSite CS, Value *V, ArrayRef Args, +Value *SimplifyCall(CallBase *Call, Value *V, ArrayRef Args, const SimplifyQuery &Q); /// See if we can compute a simplified version of this instruction. If not, diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 5145e277fb7b..843b3e97c076 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -33,6 +33,8 @@ #include "llvm/IR/Dominators.h" #include "llvm/IR/GetElementPtrTypeIterator.h" #include "llvm/IR/GlobalAlias.h" +#include "llvm/IR/InstrTypes.h" +#include "llvm/IR/Instructions.h" #include "llvm/IR/Operator.h" #include "llvm/IR/PatternMatch.h" #include "llvm/IR/ValueHandle.h" @@ -671,8 +673,8 @@ static Constant *stripAndComputeConstantOffsets(const DataLayout &DL, Value *&V, break; V = GA->getAliasee(); } else { - if (auto CS = CallSite(V)) - if (Value *RV = CS.getReturnedArgOperand()) { + if (auto *Call = dyn_cast(V)) + if (Value *RV = Call->getReturnedArgOperand()) { V = RV; continue; } @@ -5145,7 +5147,7 @@ static Value *simplifyIntrinsic(Function *F, IterTy ArgBegin, IterTy ArgEnd, } template -static Value *SimplifyCall(ImmutableCallSite CS, Value *V, IterTy ArgBegin, +static Value *SimplifyCall(CallBase *Call, Value *V, IterTy ArgBegin, IterTy ArgEnd, const SimplifyQuery &Q, unsigned MaxRecurse) { Type *Ty = V->getType(); @@ -5166,7 +5168,7 @@ static Value *SimplifyCall(ImmutableCallSite CS, Value *V, IterTy ArgBegin, if (Value *Ret = simplifyIntrinsic(F, ArgBegin, ArgEnd, Q)) return Ret; - if (!canConstantFoldCallTo(cast(CS.getInstruction()), F)) + if (!canConstantFoldCallTo(Call, F)) return nullptr; SmallVector ConstantArgs; @@ -5178,25 +5180,22 @@ static Value *SimplifyCall(ImmutableCallSite CS, Value *V, IterTy ArgBegin, ConstantArgs.push_back(C); } - return ConstantFoldCall(cast(CS.getInstruction()), F, ConstantArgs, - Q.TLI); + return ConstantFoldCall(Call, F, ConstantArgs, Q.TLI); } -Value *llvm::SimplifyCall(ImmutableCallSite CS, Value *V, - User::op_iterator ArgBegin, User::op_iterator ArgEnd, +Value *llvm::SimplifyCall(CallBase *Call, Value *V, User::op_iterator ArgBegin, + User::op_iterator ArgEnd, const SimplifyQuery &Q) { + return ::SimplifyCall(Call, V, ArgBegin, ArgEnd, Q, RecursionLimit); +} + +Value *llvm::SimplifyCall(CallBase *Call, Value *V, ArrayRef Args, const SimplifyQuery &Q) { - return ::SimplifyCall(CS, V, ArgBegin, ArgEnd, Q, RecursionLimit); + return ::SimplifyCall(Call, V, Args.begin(), Args.end(), Q, RecursionLimit); } -Value *llvm::SimplifyCall(ImmutableCallSite CS, Value *V, - ArrayRef Args, const SimplifyQuery &Q) { - return ::SimplifyCall(CS, V, Args.begin(), Args.end(), Q, RecursionLimit); -} - -Value *llvm::SimplifyCall(ImmutableCallSite ICS, const SimplifyQuery &Q) { - CallSite CS(const_cast(ICS.getInstruction())); - return ::SimplifyCall(CS, CS.getCalledValue(), CS.arg_begin(), CS.arg_end(), - Q, RecursionLimit); +Value *llvm::SimplifyCall(CallBase *Call, const SimplifyQuery &Q) { + return ::SimplifyCall(Call, Call->getCalledValue(), Call->arg_begin(), + Call->arg_end(), Q, RecursionLimit); } /// See if we can compute a simplified version of this instruction. @@ -5335,8 +5334,7 @@ Value *llvm::SimplifyInstruction(Instruction *I, const SimplifyQuery &SQ, Result = SimplifyPHINode(cast(I), Q); break; case Instruction::Call: { - CallSite CS(cast(I)); - Result = SimplifyCall(CS, Q); + Result = SimplifyCall(cast(I), Q); break; } #define HANDLE_CAST_INST(num, opc, clas) case Instruction::opc: