[LLVMdev] Getting the DSNode from a Pool Descriptor?

Harmen van der Spek hvdspek at liacs.nl
Wed Mar 17 02:01:03 PDT 2010


You might want to have a look at PoolAllocate.h.

Per function, a PA::FuncInfo structure keeps track of all DSNodes that 
should be pool allocated. ArgNodes contains pool arguments, NodesToPA
contains nodes that are locally pool allocated and thus initialized 
using poolinit.

PoolDescriptors contains a mapping from DSNodes to pool descriptors, and
you could easily invert this mapping.

Finding a corresponding DSNode which is complete is not uniquely 
determined. For example, if a function F uses a pool, but its DSNode
is incomplete, it might be called from two different function G and H,
which both have a complete DSNode that maps to the DSNode in F.

You can assume that if a function is cloned, so that its DSNodes
are pool allocated, those DSNodes originate from a complete DSNode
somewhere higher in the call chain.

Per function, a pool-allocated version can be generated. After that,
function calls are rewritten to call the pool allocated version. This is 
done in TransformFunctionBody.cpp. by calling TransformBody from 
PoolAllocate.cpp.



Harmen



Patrick Alexander Simmons wrote:
> I figure (hopefully correctly) that I can iterate over all pool 
> descriptors in a program by iterating over all users of poolinit and 
> looking at the first argument.  However, once I have a pool descriptor, 
> I need to get its corresponding DSNode in the function in which it is 
> complete (or in the global graph if it is a global).  How do I do this?
> 
> Thanks,
> --Patrick




More information about the llvm-dev mailing list