From: Chandler Carruth Date: Mon, 11 Feb 2019 07:54:10 +0000 (+0000) Subject: [CallSite removal] Port InstSimplify over to use `CallBase` both in its X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=89e74d724de5474b2d2696e72aed454aeddcbc91;p=llvm [CallSite removal] Port InstSimplify over to use `CallBase` both in its interface and implementation. Port code with: `cast(CS.getInstruction())`. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353662 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Analysis/InstructionSimplify.h b/include/llvm/Analysis/InstructionSimplify.h index daa8fb1b959..a9040439d94 100644 --- a/include/llvm/Analysis/InstructionSimplify.h +++ b/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/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index 5145e277fb7..843b3e97c07 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/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, - const SimplifyQuery &Q) { - return ::SimplifyCall(CS, V, ArgBegin, ArgEnd, Q, RecursionLimit); +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(ImmutableCallSite CS, Value *V, - ArrayRef Args, const SimplifyQuery &Q) { - return ::SimplifyCall(CS, V, Args.begin(), Args.end(), Q, RecursionLimit); +Value *llvm::SimplifyCall(CallBase *Call, Value *V, ArrayRef Args, + const SimplifyQuery &Q) { + return ::SimplifyCall(Call, 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: