This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Traversing trees in a plugin...


On Sat, 2 Jun 2012 10:48:47 -0700
Brett Foster <fosterb@edgeandvertex.org> wrote:

> Hi all,
> 
> I'm working on a GCC plugin, having made a lot of progress on that
> front. So far running my plugin works 'more or less' on things like
> the linux kernel. On the other hand running it on the plugin itself
> causes problems. Given that some of the data structures are pretty
> complicated in GCC I'm not surprised.
> 
> So the question I have (w.r.t. TREE data structures) are:
> 
> 1) How to marking a node as visited by my algorithm (without screwing
> up the compiler!)
> 
> 2) How to associate additional data (perhaps a pointer to something
> else) to a node (like a unique identifier, or a pointer to a data
> structure).


In the MELT meta-plugin (recall that MELT is a high-level domain specific language to
extend GCC, see http://gcc-melt.org/ for more) we extensively use associative hash-tables
for that. MELT offers homogeneous hash-tables, e.g. hash-table associating tree (i.e.
non-null tree pointers) to arbitrary non-null MELT values (e.g. MELT closures, or MELT
lists, or MELT objects, etc etc), or hash-table associating (non null) gimple to non
null MELT values.

So you can have e.g. an hash-table associating each tree (every tree is in GCC a non-null
pointer to a structure) with data associated to it. Once it has some data you know that
this tree has been visited.

You cannot (in current GCC architecture) extend existing GCC core data representations.
For example, you cannot add a new field to the union tree_node or to the struct
tree_decl_common ... I recommend associating information in your own plugin data
structure, such as some hash table.

In a few words, plugins cannot extend existing GCC data structures, but can associate them
to their own data.

Regards

-- 
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]