From: Jan Hubicka <hubicka@ucw.cz>
To: Martin Jambor <mjambor@suse.cz>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH 1/9] ipa-cp: Write transformation summaries of all functions
Date: Mon, 12 Dec 2022 22:43:09 +0100 [thread overview]
Message-ID: <Y5egbaHKukO2wmcS@kam.mff.cuni.cz> (raw)
In-Reply-To: <ri67cywimyy.fsf@suse.cz>
> gcc/ChangeLog:
>
> 2022-11-25 Martin Jambor <mjambor@suse.cz>
>
> * ipa-prop.cc (useful_ipcp_transformation_info_p): New function.
> (write_ipcp_transformation_info): Added a parameter, simplified
> given that is known not to be NULL.
> (ipcp_write_transformation_summaries): Write out all useful
> transformation summaries.
> (read_ipcp_transformation_info): Simplify given that some info
> will be read.
> (read_replacements_section): Remove assert.
> * lto-cgraph.cc (add_node_to): Also set encode_body for clones.
> * lto-streamer-out.cc (lto_output): Do not output virtual clones.
Aha,
sorry, you included the change we discussed. The patch is OK.
Honza
> ---
> gcc/ipa-prop.cc | 153 +++++++++++++++++++---------------------
> gcc/lto-cgraph.cc | 2 +-
> gcc/lto-streamer-out.cc | 3 +-
> 3 files changed, 76 insertions(+), 82 deletions(-)
>
> diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc
> index e6cf25591b3..fcadf64ead7 100644
> --- a/gcc/ipa-prop.cc
> +++ b/gcc/ipa-prop.cc
> @@ -5279,80 +5279,72 @@ ipa_prop_read_jump_functions (void)
> }
> }
>
> -void
> -write_ipcp_transformation_info (output_block *ob, cgraph_node *node)
> +/* Return true if the IPA-CP transformation summary TS is non-NULL and contains
> + useful info. */
> +static bool
> +useful_ipcp_transformation_info_p (ipcp_transformation *ts)
> {
> - int node_ref;
> - unsigned int count = 0;
> - lto_symtab_encoder_t encoder;
> + if (!ts)
> + return false;
> + if (!vec_safe_is_empty (ts->m_agg_values)
> + || !vec_safe_is_empty (ts->bits)
> + || !vec_safe_is_empty (ts->m_vr))
> + return true;
> + return false;
> +}
>
> - encoder = ob->decl_state->symtab_node_encoder;
> - node_ref = lto_symtab_encoder_encode (encoder, node);
> +/* Write into OB IPA-CP transfromation summary TS describing NODE. */
> +
> +void
> +write_ipcp_transformation_info (output_block *ob, cgraph_node *node,
> + ipcp_transformation *ts)
> +{
> + lto_symtab_encoder_t encoder = ob->decl_state->symtab_node_encoder;
> + int node_ref = lto_symtab_encoder_encode (encoder, node);
> streamer_write_uhwi (ob, node_ref);
>
> - ipcp_transformation *ts = ipcp_get_transformation_summary (node);
> - if (ts && !vec_safe_is_empty (ts->m_agg_values))
> + streamer_write_uhwi (ob, vec_safe_length (ts->m_agg_values));
> + for (const ipa_argagg_value &av : ts->m_agg_values)
> {
> - streamer_write_uhwi (ob, ts->m_agg_values->length ());
> - for (const ipa_argagg_value &av : ts->m_agg_values)
> + struct bitpack_d bp;
> +
> + stream_write_tree (ob, av.value, true);
> + streamer_write_uhwi (ob, av.unit_offset);
> + streamer_write_uhwi (ob, av.index);
> +
> + bp = bitpack_create (ob->main_stream);
> + bp_pack_value (&bp, av.by_ref, 1);
> + streamer_write_bitpack (&bp);
> + }
> +
> + streamer_write_uhwi (ob, vec_safe_length (ts->m_vr));
> + for (const ipa_vr &parm_vr : ts->m_vr)
> + {
> + struct bitpack_d bp;
> + bp = bitpack_create (ob->main_stream);
> + bp_pack_value (&bp, parm_vr.known, 1);
> + streamer_write_bitpack (&bp);
> + if (parm_vr.known)
> {
> - struct bitpack_d bp;
> -
> - stream_write_tree (ob, av.value, true);
> - streamer_write_uhwi (ob, av.unit_offset);
> - streamer_write_uhwi (ob, av.index);
> -
> - bp = bitpack_create (ob->main_stream);
> - bp_pack_value (&bp, av.by_ref, 1);
> - streamer_write_bitpack (&bp);
> + streamer_write_enum (ob->main_stream, value_rang_type,
> + VR_LAST, parm_vr.type);
> + streamer_write_wide_int (ob, parm_vr.min);
> + streamer_write_wide_int (ob, parm_vr.max);
> }
> }
> - else
> - streamer_write_uhwi (ob, 0);
>
> - if (ts && vec_safe_length (ts->m_vr) > 0)
> + streamer_write_uhwi (ob, vec_safe_length (ts->bits));
> + for (const ipa_bits *bits_jfunc : ts->bits)
> {
> - count = ts->m_vr->length ();
> - streamer_write_uhwi (ob, count);
> - for (unsigned i = 0; i < count; ++i)
> + struct bitpack_d bp = bitpack_create (ob->main_stream);
> + bp_pack_value (&bp, !!bits_jfunc, 1);
> + streamer_write_bitpack (&bp);
> + if (bits_jfunc)
> {
> - struct bitpack_d bp;
> - ipa_vr *parm_vr = &(*ts->m_vr)[i];
> - bp = bitpack_create (ob->main_stream);
> - bp_pack_value (&bp, parm_vr->known, 1);
> - streamer_write_bitpack (&bp);
> - if (parm_vr->known)
> - {
> - streamer_write_enum (ob->main_stream, value_rang_type,
> - VR_LAST, parm_vr->type);
> - streamer_write_wide_int (ob, parm_vr->min);
> - streamer_write_wide_int (ob, parm_vr->max);
> - }
> + streamer_write_widest_int (ob, bits_jfunc->value);
> + streamer_write_widest_int (ob, bits_jfunc->mask);
> }
> }
> - else
> - streamer_write_uhwi (ob, 0);
> -
> - if (ts && vec_safe_length (ts->bits) > 0)
> - {
> - count = ts->bits->length ();
> - streamer_write_uhwi (ob, count);
> -
> - for (unsigned i = 0; i < count; ++i)
> - {
> - const ipa_bits *bits_jfunc = (*ts->bits)[i];
> - struct bitpack_d bp = bitpack_create (ob->main_stream);
> - bp_pack_value (&bp, !!bits_jfunc, 1);
> - streamer_write_bitpack (&bp);
> - if (bits_jfunc)
> - {
> - streamer_write_widest_int (ob, bits_jfunc->value);
> - streamer_write_widest_int (ob, bits_jfunc->mask);
> - }
> - }
> - }
> - else
> - streamer_write_uhwi (ob, 0);
> }
>
> /* Stream in the aggregate value replacement chain for NODE from IB. */
> @@ -5362,12 +5354,12 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node,
> data_in *data_in)
> {
> unsigned int count, i;
> + ipcp_transformation_initialize ();
> + ipcp_transformation *ts = ipcp_transformation_sum->get_create (node);
>
> count = streamer_read_uhwi (ib);
> if (count > 0)
> {
> - ipcp_transformation_initialize ();
> - ipcp_transformation *ts = ipcp_transformation_sum->get_create (node);
> vec_safe_grow_cleared (ts->m_agg_values, count, true);
> for (i = 0; i <count; i++)
> {
> @@ -5385,8 +5377,6 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node,
> count = streamer_read_uhwi (ib);
> if (count > 0)
> {
> - ipcp_transformation_initialize ();
> - ipcp_transformation *ts = ipcp_transformation_sum->get_create (node);
> vec_safe_grow_cleared (ts->m_vr, count, true);
> for (i = 0; i < count; i++)
> {
> @@ -5407,10 +5397,7 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node,
> count = streamer_read_uhwi (ib);
> if (count > 0)
> {
> - ipcp_transformation_initialize ();
> - ipcp_transformation *ts = ipcp_transformation_sum->get_create (node);
> vec_safe_grow_cleared (ts->bits, count, true);
> -
> for (i = 0; i < count; i++)
> {
> struct bitpack_d bp = streamer_read_bitpack (ib);
> @@ -5432,31 +5419,38 @@ read_ipcp_transformation_info (lto_input_block *ib, cgraph_node *node,
> void
> ipcp_write_transformation_summaries (void)
> {
> - struct cgraph_node *node;
> struct output_block *ob;
> unsigned int count = 0;
> - lto_symtab_encoder_iterator lsei;
> lto_symtab_encoder_t encoder;
>
> ob = create_output_block (LTO_section_ipcp_transform);
> encoder = ob->decl_state->symtab_node_encoder;
> ob->symbol = NULL;
> - for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei);
> - lsei_next_function_in_partition (&lsei))
> +
> + for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
> {
> - node = lsei_cgraph_node (lsei);
> - if (node->has_gimple_body_p ())
> + symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
> + cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
> + if (!cnode)
> + continue;
> + ipcp_transformation *ts = ipcp_get_transformation_summary (cnode);
> + if (useful_ipcp_transformation_info_p (ts)
> + && lto_symtab_encoder_encode_body_p (encoder, cnode))
> count++;
> }
>
> streamer_write_uhwi (ob, count);
>
> - for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei);
> - lsei_next_function_in_partition (&lsei))
> + for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
> {
> - node = lsei_cgraph_node (lsei);
> - if (node->has_gimple_body_p ())
> - write_ipcp_transformation_info (ob, node);
> + symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
> + cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
> + if (!cnode)
> + continue;
> + ipcp_transformation *ts = ipcp_get_transformation_summary (cnode);
> + if (useful_ipcp_transformation_info_p (ts)
> + && lto_symtab_encoder_encode_body_p (encoder, cnode))
> + write_ipcp_transformation_info (ob, cnode, ts);
> }
> streamer_write_char_stream (ob->main_stream, 0);
> produce_asm (ob, NULL);
> @@ -5497,7 +5491,6 @@ read_replacements_section (struct lto_file_decl_data *file_data,
> encoder = file_data->symtab_node_encoder;
> node = dyn_cast<cgraph_node *> (lto_symtab_encoder_deref (encoder,
> index));
> - gcc_assert (node->definition);
> read_ipcp_transformation_info (&ib_main, node, data_in);
> }
> lto_free_section_data (file_data, LTO_section_jump_functions, NULL, data,
> diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc
> index 350195d86db..11079b0f0f0 100644
> --- a/gcc/lto-cgraph.cc
> +++ b/gcc/lto-cgraph.cc
> @@ -797,7 +797,7 @@ add_node_to (lto_symtab_encoder_t encoder, struct cgraph_node *node,
> {
> if (node->clone_of)
> add_node_to (encoder, node->clone_of, include_body);
> - else if (include_body)
> + if (include_body)
> lto_set_symtab_encoder_encode_body (encoder, node);
> lto_symtab_encoder_encode (encoder, node);
> }
> diff --git a/gcc/lto-streamer-out.cc b/gcc/lto-streamer-out.cc
> index 1e389049062..08f75b09204 100644
> --- a/gcc/lto-streamer-out.cc
> +++ b/gcc/lto-streamer-out.cc
> @@ -2752,7 +2752,8 @@ lto_output (void)
> continue;
> if (cgraph_node *node = dyn_cast <cgraph_node *> (snode))
> {
> - if (lto_symtab_encoder_encode_body_p (encoder, node))
> + if (lto_symtab_encoder_encode_body_p (encoder, node)
> + && !node->clone_of)
> symbols_to_copy.safe_push (node);
> }
> else if (varpool_node *node = dyn_cast <varpool_node *> (snode))
> --
> 2.38.1
>
prev parent reply other threads:[~2022-12-12 21:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-12 16:52 Martin Jambor
2022-12-12 20:37 ` Jan Hubicka
2022-12-12 21:43 ` Jan Hubicka [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y5egbaHKukO2wmcS@kam.mff.cuni.cz \
--to=hubicka@ucw.cz \
--cc=gcc-patches@gcc.gnu.org \
--cc=mjambor@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).