Preserving tree node fields for access in LTO?
Uday P. Khedker
uday@cse.iitb.ac.in
Tue Jul 28 14:32:00 GMT 2015
Richard Biener wrote on Tuesday 28 July 2015 01:12 PM:
> On Mon, Jul 27, 2015 at 7:14 PM, Uday Khedker <uday@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
Uday.
More information about the Gcc
mailing list