Yan Lin Aung
2013-Aug-31 07:23 UTC
[LLVMdev] Extracting the global variables accessed by individual function with function pass
Hi All, Is there a way to dump the global variables, which are accessed (read/written to) by each function within the LLVM function pass? Any pointers on how that info can be extracted in LLVM for each function in the application? Thanks. Regards, Yan Lin Aung -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130831/f4342b10/attachment.html>
Duncan Sands
2013-Sep-02 11:15 UTC
[LLVMdev] Extracting the global variables accessed by individual function with function pass
Hi,> Is there a way to dump the global variables, which are accessed (read/written > to) by each function within the LLVM function pass? > Any pointers on how that info can be extracted in LLVM for each function in the > application?you will have to write your own pass to do this. For each global, visit each of its uses (via use_begin, use_end). If the use is a constant (isa<Constant>), visit each of its uses too (do this recursively until you aren't visiting constants any more). If a use isn't a constant, check whether it's parent (getParent) is the function you are interested in. The point of recursing on constant uses is that the global may be used in a constant expression (eg a constant bitcast) before actually being used by an instruction. Ciao, Duncan.
John Criswell
2013-Sep-06 15:41 UTC
[LLVMdev] Extracting the global variables accessed by individual function with function pass
On 9/2/13 6:15 AM, Duncan Sands wrote:> Hi, > >> Is there a way to dump the global variables, which are accessed >> (read/written >> to) by each function within the LLVM function pass? >> Any pointers on how that info can be extracted in LLVM for each >> function in the >> application? > > you will have to write your own pass to do this. For each global, > visit each > of its uses (via use_begin, use_end). If the use is a constant > (isa<Constant>), > visit each of its uses too (do this recursively until you aren't visiting > constants any more). If a use isn't a constant, check whether it's > parent > (getParent) is the function you are interested in. The point of > recursing on > constant uses is that the global may be used in a constant expression > (eg a > constant bitcast) before actually being used by an instruction.Note that this only finds globals that are directly accessed by the function. It won't find globals that are accessed by the function due to the global being passed into the function as an argument or loaded from memory via an LLVM load instruction. To find those, you'll need to use alias analysis or a points-to analysis. -- John T.> > Ciao, Duncan. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Possibly Parallel Threads
- [LLVMdev] Extracting the global variables accessed by individual function with function pass
- [LLVMdev] Extracting the global variables accessed by individual function with function pass
- [LLVMdev] BasicCallGraph patch
- [LLVMdev] Computing live values
- [LLVMdev] BasicCallGraph patch