forked from OSchip/llvm-project
[NFC] Extract out a helper function for SimplifyCall(CS, Q)
This simplifies code, but the real motivation is that it lets me clean up some downstream code. llvm-svn: 321466
This commit is contained in:
parent
8af1e1cb78
commit
7a6db4fc4f
|
@ -197,6 +197,9 @@ Value *SimplifyBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
|||
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);
|
||||
|
||||
/// Given a function and iterators over arguments, fold the result or return
|
||||
/// null.
|
||||
Value *SimplifyCall(ImmutableCallSite CS, Value *V, User::op_iterator ArgBegin,
|
||||
|
|
|
@ -4617,6 +4617,12 @@ Value *llvm::SimplifyCall(ImmutableCallSite CS, Value *V,
|
|||
return ::SimplifyCall(CS, V, Args.begin(), Args.end(), Q, RecursionLimit);
|
||||
}
|
||||
|
||||
Value *llvm::SimplifyCall(ImmutableCallSite ICS, const SimplifyQuery &Q) {
|
||||
CallSite CS(const_cast<Instruction*>(ICS.getInstruction()));
|
||||
return ::SimplifyCall(CS, CS.getCalledValue(), CS.arg_begin(), CS.arg_end(),
|
||||
Q, RecursionLimit);
|
||||
}
|
||||
|
||||
/// See if we can compute a simplified version of this instruction.
|
||||
/// If not, this returns null.
|
||||
|
||||
|
@ -4751,8 +4757,7 @@ Value *llvm::SimplifyInstruction(Instruction *I, const SimplifyQuery &SQ,
|
|||
break;
|
||||
case Instruction::Call: {
|
||||
CallSite CS(cast<CallInst>(I));
|
||||
Result = SimplifyCall(CS, CS.getCalledValue(), CS.arg_begin(), CS.arg_end(),
|
||||
Q);
|
||||
Result = SimplifyCall(CS, Q);
|
||||
break;
|
||||
}
|
||||
#define HANDLE_CAST_INST(num, opc, clas) case Instruction::opc:
|
||||
|
|
|
@ -1802,9 +1802,7 @@ Instruction *InstCombiner::visitVACopyInst(VACopyInst &I) {
|
|||
/// instructions. For normal calls, it allows visitCallSite to do the heavy
|
||||
/// lifting.
|
||||
Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
auto Args = CI.arg_operands();
|
||||
if (Value *V = SimplifyCall(&CI, CI.getCalledValue(), Args.begin(),
|
||||
Args.end(), SQ.getWithInstruction(&CI)))
|
||||
if (Value *V = SimplifyCall(&CI, SQ.getWithInstruction(&CI)))
|
||||
return replaceInstUsesWith(CI, V);
|
||||
|
||||
if (isFreeCall(&CI, &TLI))
|
||||
|
|
Loading…
Reference in New Issue