[llvm-dev] [LLVMdev] Interprocedural use-def chains

Sanjoy Das via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 26 14:51:51 PDT 2016

Hi Dounia,

Dounia Khaldi via llvm-dev wrote:
 > I have been using the USE class to access the use-def chains of
 > different values. However, what I have noticed is that the set of users
 > of a particular value is limited for the appearance of that variable in
 > the current function.
 > How can I get the interprocedural use of a particular value? For
 > example, if a variable /a/ is used as an argument in a function call
 > /foo/, the USE analysis would go to the definition of/foo/, and get me
 > the users of that argument in the called function as well. Currently,
 > what USE does is that it returns the call as a use and stops there.

Why not just recurse to uses of the corresponding llvm::Argument
instance?  Is there a reason why you're avoiding that?  This won't
work for varargs, but that's a difficult problem anyway.

Specifically, I'm saying:

   if (user is CallInst or InvokeInst) {
     unsigned ArgNo = // Get argument no. of Use &
     if (auto *F = getCallTargetIfPossible()) {
       pushToWorklist(F->getArgument(ArgNo)->users()); // Or recurse

-- Sanjoy

More information about the llvm-dev mailing list