This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Preserving tree node fields for access in LTO?
- From: "Uday P. Khedker" <uday at cse dot iitb dot ac dot in>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>, Pritam Gharat <pritamg at cse dot iitb dot ac dot in>
- Date: Tue, 28 Jul 2015 20:07:15 +0530
- Subject: Re: Preserving tree node fields for access in LTO?
- Authentication-results: sourceware.org; auth=none
- References: <55B65F46 dot 4000302 at cse dot iitb dot ac dot in> <55B666EE dot 5060607 at cse dot iitb dot ac dot in> <CAFiYyc3kf3nZAjcWVDD3upYH_vgx57H2jp3SA_xtSaoHebKnTA at mail dot gmail dot com>
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.