[02/12] ipa-cp: Do not consider useless aggregate constants

Message ID ri6tu35kksn.fsf@suse.cz
State Accepted
Headers
Series [01/12] ipa: IPA-SRA split detection simplification |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Martin Jambor Nov. 12, 2022, 1:45 a.m. UTC
  Hi,

When building vectors of known aggregate values, there is no point in
including those for parameters which are not used in any way
whatsoever.

Bootstrapped and tested on x86_64-linux.  OK for master?

Thanks,

Martin


gcc/ChangeLog:

2022-11-11  Martin Jambor  <mjambor@suse.cz>

	* ipa-cp.cc (push_agg_values_from_edge): Do not consider constants
	in unused aggregate parameters.
---
 gcc/ipa-cp.cc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Martin Jambor Nov. 13, 2022, 9:06 p.m. UTC | #1
On Sat, Nov 12 2022, Martin Jambor wrote:
> Hi,
>
> When building vectors of known aggregate values, there is no point in
> including those for parameters which are not used in any way
> whatsoever.
>
> Bootstrapped and tested on x86_64-linux.  OK for master?
>
> Thanks,
>
> Martin

When doing LTO profiled-bootstrap, the original patch triggered a
checking assert that a selected constant was not among those discovered
to be known.  The following avoids doing any heuristics for unused
parameters too.  With this patch, the whole series passes LTO
profiled-bootstrap (and testing) on x86_64.

Martin



When building vectors of known aggregate values, there is no point in
including those for parameters which are not used in any way
whatsoever.  This patch avoids that together with also other kinds of
constants.

gcc/ChangeLog:

2022-11-13  Martin Jambor  <mjambor@suse.cz>

	* ipa-cp.cc (push_agg_values_from_edge): Do not consider constants
	in unused aggregate parameters.
---
 gcc/ipa-cp.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index d2bcd5e5e69..313336a9ccd 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -5783,7 +5783,8 @@ push_agg_values_from_edge (struct cgraph_edge *cs,
 	}
 
       ipcp_param_lattices *plats = ipa_get_parm_lattices (dest_info, index);
-      if (plats->aggs_bottom)
+      if (!ipa_is_param_used (dest_info, index)
+	  || plats->aggs_bottom)
 	continue;
       push_agg_values_for_index_from_edge (cs, index, res, interim);
     }
@@ -6147,6 +6148,9 @@ decide_whether_version_node (struct cgraph_node *node)
 
   for (i = 0; i < count;i++)
     {
+      if (!ipa_is_param_used (info, i))
+	continue;
+
       class ipcp_param_lattices *plats = ipa_get_parm_lattices (info, i);
       ipcp_lattice<tree> *lat = &plats->itself;
       ipcp_lattice<ipa_polymorphic_call_context> *ctxlat = &plats->ctxlat;
  
Jan Hubicka Nov. 16, 2022, 10:50 a.m. UTC | #2
> Hi,
> 
> When building vectors of known aggregate values, there is no point in
> including those for parameters which are not used in any way
> whatsoever.
> 
> Bootstrapped and tested on x86_64-linux.  OK for master?
OK,
thanks!
Honza
> 
> Thanks,
> 
> Martin
> 
> 
> gcc/ChangeLog:
> 
> 2022-11-11  Martin Jambor  <mjambor@suse.cz>
> 
> 	* ipa-cp.cc (push_agg_values_from_edge): Do not consider constants
> 	in unused aggregate parameters.
> ---
>  gcc/ipa-cp.cc | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
> index d2bcd5e5e69..02bd6a0fd1a 100644
> --- a/gcc/ipa-cp.cc
> +++ b/gcc/ipa-cp.cc
> @@ -5783,7 +5783,8 @@ push_agg_values_from_edge (struct cgraph_edge *cs,
>  	}
>  
>        ipcp_param_lattices *plats = ipa_get_parm_lattices (dest_info, index);
> -      if (plats->aggs_bottom)
> +      if (!ipa_is_param_used (dest_info, index)
> +	  || plats->aggs_bottom)
>  	continue;
>        push_agg_values_for_index_from_edge (cs, index, res, interim);
>      }
> -- 
> 2.38.0
>
  

Patch

diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index d2bcd5e5e69..02bd6a0fd1a 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -5783,7 +5783,8 @@  push_agg_values_from_edge (struct cgraph_edge *cs,
 	}
 
       ipcp_param_lattices *plats = ipa_get_parm_lattices (dest_info, index);
-      if (plats->aggs_bottom)
+      if (!ipa_is_param_used (dest_info, index)
+	  || plats->aggs_bottom)
 	continue;
       push_agg_values_for_index_from_edge (cs, index, res, interim);
     }