[LLVMdev] Questions bout the Steensguard AA Pass in rDSA
John Criswell
criswell at illinois.edu
Mon Jun 16 08:33:49 PDT 2014
On 6/15/14, 10:20 PM, Daniel Guo wrote:
> Hi John,
>
> Many thanks for the suggestion.
> I read the user manual and the source code of the Local DSA pass, and
> it seems that the output of the Local pass is a set of graphs for some
> further analysis.
The result is best described as a shape graph. It maps LLVM scalar
values to nodes in the shape graph; the shape graph describes the links
between memory objects (i.e., heap objects, stack objects, and global
variable objects).
>
> And my requirements are:
> 1. I need a alias analysis pass that implements the universal
> AA->alias(Pointer, size, Inst, ...), here the "Inst" is obtained from
> previous process and the alias function is detecting if "Pointer" and
> "Inst" are aliasing.
> 2. The "Inst" here is an Instruction* accessing a global variable.
> 3. Right now the "Pointer" is from the iteration on the Instructions
> of each function.
>
> So my questions are:
> 1. How can i take use of the graphs as they contain the "pointing-to"
> relationship among different objects?
Give two LLVM values, you can determine their local aliasing behavior by:
1) Get the DSGraph for the function.
2) Get the DSNode for each value:
a) If it's a GlobalVariable, the DSNode is in the global GlobalsGraph.
b) If it's a local LLVM value (e.g., result of a load), the DSNode
is in the local graph or in the local GlobalsGraph (or both).
3) If the two values point to the same DSNode, then they may alias.
4) If one or both values have the Incomplete or External flags set, then
DSA does not know their aliasing behavior, so assume may alias.
Just to be on the paranoid side, I'd try looking up each LLVM value in
the global GlobalsGraph, the local GlobalsGraph, and the local DSGraph
and comparing all three.
Note that you've asked about doing intra-procedural points-to analysis,
meaning that you'll get lots of DSNodes with Incomplete flags because
the analysis will know nothing about values coming from callers or
manipulated by callees. If you need that information, then you need to
use the Bottom-Up or Top-Down DSA passes.
If you want to make life really easy, use the DSNodeEquivs pass. That
pass uses the top-down DSA pass and places all potentially aliasing
DSNodes into an equivalence class. To see if two values alias, you just
ask DSNodeEquivs if their DSNodes are in the same equivalence class.
> 2. Which api or data structures in DSA can be used to get the useful
> information?
The pass class itself has a getGlobalsGraph() method which will return
the global GlobalsGraph. The pass class has a getDSGgraph() method for
returning a function's DSGraph. The DSGraph class has methods for
returning a handle to a DSNode (getDSNodeHandle()) and the function's
globalGraph (getGlobalGraph()). The DSNodeHandle::getNode() method will
return the DSNode pointed to by a DSNodeHandle.
The dsa-manual in the docs directory has more information, and there's
plenty of examples in the source code.
Regards,
John Criswell
>
> Thanks very much John and have a good night~!
>
> Dan.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140616/36bd3e3e/attachment.html>
More information about the llvm-dev
mailing list