Hello,

On Sat, Nov 11 2023, Eric Botcazou wrote:
> Hi,
>
> IPA-CP can currently handle addresses of scalar constants (CONST_DECL) so 
> this 
> extends that to addresses of constants in the pool (DECL_IN_CONSTANT_POOL).
> Again this is helpful for so-called fat pointers in Ada, i.e. objects that 
> are 
> semantically pointers but represented by structures made up of two pointers. 
>
> This also moves the unused function print_ipcp_constant_value from ipa-cp.cc 
> to ipa-prop.cc and renames it.

unfortunately, in C++ it is not enough to verify that the source still
builds with a function removed to conclude that the function is unused.
After this patch, dumping of IPA-CP scalar constant lattices is broken
because we attempt to print them with (what was) an
print_ipcp_constant_value overload for polymorphic contexts which are
constructible from trees, so the source compiles, but of course are not
what we want.

I'm about to commit the following patch as obvious (after it has passed
bootstrap and testing on x86_64-linux which is currently underway) and
also backport it to the gcc-14 branch. 

Thanks,

Martin

>
> I have an LTO testcase for which this makes a difference, but it's large so 
> not really suitable for the testsuite.
>
> Bootstrapped/regtested on x86-64/Linux, OK for the mainline?
>
>
> 2023-11-11  Eric Botcazou  <ebotca...@adacore.com>
>
>       * ipa-cp.cc (print_ipcp_constant_value): Move to...
>       (values_equal_for_ipcp_p): Deal with VAR_DECLs from the
>       constant pool.
>       * ipa-prop.cc (ipa_print_constant_value): ...here.  Likewise.
>       (ipa_print_node_jump_functions_for_edge): Call the function
>       ipa_print_constant_value to print IPA_JF_CONST elements.
>

---------- 8< -------------------- 8< -------------------- 8< ----------

Commit gcc-14-5368-ge0787da2633 removed an overloaded variant of
function print_ipcp_constant_value for tree constants.  That did not
break build because the other overloaded variant for polymorphic
contexts-has a parameter which is constructible from a tree, but it
prints polymorphic contexts, not tree constants, so we in dumps we got
things like:

  param [0]: VARIABLE
       ctxs: VARIABLE
       Bits: value = 0x0, mask = 0xfffffffffffffffc
       [prange] struct S * [1, +INF] MASK 0xfffffffffffffffc VALUE 0x0
      ref offset 0:     nothing known [scc: 1, from: 1(1.000000)] [loc_time: 0, 
loc_size: 0, prop_time: 0, prop_size: 0]
      ref offset 32:     nothing known [scc: 2, from: 1(1.000000)] [loc_time: 
0, loc_size: 0, prop_time: 0, prop_size: 0]
      ref offset 64:     nothing known [scc: 3, from: 1(1.000000)] [loc_time: 
0, loc_size: 0, prop_time: 0, prop_size: 0]

instead of:

  param [0]: VARIABLE
       ctxs: VARIABLE
       Bits: value = 0x0, mask = 0xfffffffffffffffc
       [prange] struct S * [1, +INF] MASK 0xfffffffffffffffc VALUE 0x0
      ref offset 0: 1 [scc: 1, from: 1(1.000000)] [loc_time: 0, loc_size: 0, 
prop_time: 0, prop_size: 0]
      ref offset 32: 64 [scc: 2, from: 1(1.000000)] [loc_time: 0, loc_size: 0, 
prop_time: 0, prop_size: 0]
      ref offset 64: 32 [scc: 3, from: 1(1.000000)] [loc_time: 0, loc_size: 0, 
prop_time: 0, prop_size: 0]

This commit re-adds the needed overloaded variant though it uses the
printing function added in the aforementioned commit instead of
printing it itself.

gcc/ChangeLog:

2024-11-13  Martin Jambor  <mjam...@suse.cz>

        * ipa-prop.h (ipa_print_constant_value): Declare.
        * ipa-prop.cc (ipa_print_constant_value): Make public.
        * ipa-cp.cc (print_ipcp_constant_value): Re-add this overloaded
        function for printing tree constants.

gcc/testsuite/ChangeLog:

2024-11-14  Martin Jambor  <mjam...@suse.cz>

        * gcc.dg/ipa/ipcp-agg-1.c: Add a scan dump for a constant value in
        the latice dump.
---
 gcc/ipa-cp.cc                         | 12 +++++++++++-
 gcc/ipa-prop.cc                       |  2 +-
 gcc/ipa-prop.h                        |  1 +
 gcc/testsuite/gcc.dg/ipa/ipcp-agg-1.c |  1 +
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index 212d9ccbbfe..fb65ec0c6a6 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -225,7 +225,17 @@ values_equal_for_ipcp_p (tree x, tree y)
     return operand_equal_p (x, y, 0);
 }
 
-/* Print V which is extracted from a value in a lattice to F.  */
+/* Print V which is extracted from a value in a lattice to F.  This overloaded
+   function is used to print tree constants.  */
+
+static void
+print_ipcp_constant_value (FILE * f, tree v)
+{
+  ipa_print_constant_value (f, v);
+}
+
+/* Print V which is extracted from a value in a lattice to F.  This overloaded
+   function is used to print constant polymorphic call contexts.  */
 
 static void
 print_ipcp_constant_value (FILE * f, ipa_polymorphic_call_context v)
diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc
index 599181d0a94..fd18f847e46 100644
--- a/gcc/ipa-prop.cc
+++ b/gcc/ipa-prop.cc
@@ -413,7 +413,7 @@ ipa_initialize_node_params (struct cgraph_node *node)
 
 /* Print VAL which is extracted from a jump function to F.  */
 
-static void
+void
 ipa_print_constant_value (FILE *f, tree val)
 {
   print_generic_expr (f, val);
diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h
index 7a05c169c42..a9ef3fe3aa6 100644
--- a/gcc/ipa-prop.h
+++ b/gcc/ipa-prop.h
@@ -1179,6 +1179,7 @@ ipcp_get_transformation_summary (cgraph_node *node)
 
 /* Function formal parameters related computations.  */
 void ipa_initialize_node_params (struct cgraph_node *node);
+void ipa_print_constant_value (FILE *f, tree val);
 bool ipa_propagate_indirect_call_infos (struct cgraph_edge *cs,
                                        vec<cgraph_edge *> *new_edges);
 
diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-agg-1.c 
b/gcc/testsuite/gcc.dg/ipa/ipcp-agg-1.c
index 8cfc18799fa..15f6286e54b 100644
--- a/gcc/testsuite/gcc.dg/ipa/ipcp-agg-1.c
+++ b/gcc/testsuite/gcc.dg/ipa/ipcp-agg-1.c
@@ -30,6 +30,7 @@ entry (void)
   foo (&s);
 }
 
+/* { dg-final { scan-ipa-dump "ref offset\[^\n\r\]*: 64\[^\n\r\]*scc:" "cp" } 
} */
 /* { dg-final { scan-ipa-dump "Creating a specialized node of foo.*for all 
known contexts" "cp" } } */
 /* { dg-final { scan-ipa-dump-times "Aggregate replacements:" 2 "cp" } } */
 /* { dg-final { scan-tree-dump-not "->c;" "optimized" } } */
-- 
2.47.0

Reply via email to