getArgOperandNo helper function.

Summary: A helper function to get argument number of a arg operand Use.

Reviewers: jdoerfert, uenoku

Subscribers: hiraditya, lebedev.ri, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66844
This commit is contained in:
Stefan Stipanovic 2019-11-10 21:45:11 +01:00
parent 8e9e433a2a
commit c250ebf7bc
2 changed files with 15 additions and 2 deletions

View File

@ -1272,6 +1272,19 @@ public:
return isArgOperand(&UI.getUse()); return isArgOperand(&UI.getUse());
} }
/// Given a use for a arg operand, get the arg operand number that
/// corresponds to it.
unsigned getArgOperandNo(const Use *U) const {
assert(isArgOperand(U) && "Arg operand # out of range!");
return U - arg_begin();
}
/// Given a value use iterator, return the arg operand number corresponding to
/// it. Iterator must actually correspond to a data operand.
unsigned getArgOperandNo(Value::const_user_iterator UI) const {
return getArgOperandNo(&UI.getUse());
}
/// Returns true if this CallSite passes the given Value* as an argument to /// Returns true if this CallSite passes the given Value* as an argument to
/// the called function. /// the called function.
bool hasArgument(const Value *V) const { bool hasArgument(const Value *V) const {

View File

@ -1572,7 +1572,7 @@ struct AANoFreeFloating : AANoFreeImpl {
if (!CB->isArgOperand(U)) if (!CB->isArgOperand(U))
continue; continue;
unsigned ArgNo = U - CB->arg_begin(); unsigned ArgNo = CB->getArgOperandNo(U);
const auto &NoFreeArg = A.getAAFor<AANoFree>( const auto &NoFreeArg = A.getAAFor<AANoFree>(
*this, IRPosition::callsite_argument(*CB, ArgNo)); *this, IRPosition::callsite_argument(*CB, ArgNo));
@ -4144,7 +4144,7 @@ ChangeStatus AAHeapToStackImpl::updateImpl(Attributor &A) {
const auto &NoFreeAA = const auto &NoFreeAA =
A.getAAFor<AANoFree>(*this, IRPosition::callsite_function(*CB)); A.getAAFor<AANoFree>(*this, IRPosition::callsite_function(*CB));
unsigned ArgNo = U - CB->arg_begin(); unsigned ArgNo = CB->getArgOperandNo(U);
const auto &NoCaptureAA = A.getAAFor<AANoCapture>( const auto &NoCaptureAA = A.getAAFor<AANoCapture>(
*this, IRPosition::callsite_argument(*CB, ArgNo)); *this, IRPosition::callsite_argument(*CB, ArgNo));