[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