On 07/28/2015 08:10 PM, Richard Biener wrote:
On July 28, 2015 4:37:15 PM GMT+02:00, "Uday P. Khedker" <u...@cse.iitb.ac.in> 
wrote:

Richard Biener wrote on Tuesday 28 July 2015 01:12 PM:
On Mon, Jul 27, 2015 at 7:14 PM, Uday Khedker <u...@cse.iitb.ac.in>
wrote:
We have added a new field (bool ptr_arith in struct tree_base) to
the tree
node. We are assigning values to this field in a gimple pass in
non-LTO mode
and would like to access them in LTO mode in our ipa passes. It
appears that
all fields of tree node are not preserved in LTO mode. Is there any
way to
tell GCC that a given field should be preserved so that it can be
accessed
in LTO mode?
You have to explicitely add the streaming to tree-streamer-{in,out}.c


Thanks for this info. We have done the following:

(a) Added a field to tree_base in the file tree.h as follows:

       unsigned ptr_arith : 1;

      right after

       ENUM_BITFIELD(tree_code) code : 16;

(b) Added the following code to function  pack_ts_base_value_fields in
the file tree-streamer-out.c

        bp_pack_value (bp, TREE_PTR_ARITH (expr), 1);

       just after

        bp_pack_value (bp, TREE_CODE (expr), 16);

        Macro TREE_PTR_ARITH access the field pts_arith.

(c) Added the following code to function unpack_ts_base_value_fields in
the file tree-streamer-in.c

        TREE_PTR_ARITH (expr) = (unsigned) bp_unpack_value (bp, 1);

       right in the beginning.

We are getting the correct values in non-LTO mode of our pass. However,
the same code has values 0 in the LTO mode execution.

Is there anything else that we need to do? We briefly looked at the
functions in tree-streamer-{in,out}.c but could not guess if something
more needs to be done
No, that should be all.  Though dependent on what trees the flags are on you 
might want to change the tree compare function in lto.c as well.

Are you sure the trees survive until lto streaming?


The trees survive because all other fields show correct values. Only the new flag remains 0.

Our flag is present in the tree unconditionally. We have written a pass which sets this flag conditionally for a tree that involves a pointer arithmetic (default value is 0).

Which comparison function are you referring to? There is a function lto_splay_tree_compare_ids in lto.c. Is there any other function that we are missing?

If it matters: We are using gcc-4.7.2 and using the option -flto-partition=none.

Uday.


Reply via email to