getArgOperandNo helper function.
authorStefan Stipanovic <sstipanovic@s-energize.com>
Sun, 10 Nov 2019 20:45:11 +0000 (21:45 +0100)
committerStefan Stipanovic <sstipanovic@s-energize.com>
Sun, 10 Nov 2019 20:45:11 +0000 (21:45 +0100)
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

llvm/include/llvm/IR/InstrTypes.h
llvm/lib/Transforms/IPO/Attributor.cpp

index faf58cf19014664d951a3219cac13893dc5c8b9f..a85e0f2934692e968ed2492bd80ede5139ab5050 100644 (file)
@@ -1272,6 +1272,19 @@ public:
     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
   /// the called function.
   bool hasArgument(const Value *V) const {
index b7471a32faf425f0a7a8de81473fa097892a68c7..b959dc0e60704d8c0cecde687531e99976e956b0 100644 (file)
@@ -1572,7 +1572,7 @@ struct AANoFreeFloating : AANoFreeImpl {
         if (!CB->isArgOperand(U))
           continue;
 
-        unsigned ArgNo = U - CB->arg_begin();
+        unsigned ArgNo = CB->getArgOperandNo(U);
 
         const auto &NoFreeArg = A.getAAFor<AANoFree>(
             *this, IRPosition::callsite_argument(*CB, ArgNo));
@@ -4144,7 +4144,7 @@ ChangeStatus AAHeapToStackImpl::updateImpl(Attributor &A) {
         const auto &NoFreeAA =
             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>(
             *this, IRPosition::callsite_argument(*CB, ArgNo));