IPA-CP: Remove bogus static keyword (PR 92971)
authorMartin Jambor <mjambor@suse.cz>
Wed, 18 Dec 2019 16:08:09 +0000 (17:08 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Wed, 18 Dec 2019 16:08:09 +0000 (17:08 +0100)
2019-12-18  Martin Jambor  <mjambor@suse.cz>

PR ipa/92971
* ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Fix
          definition of values, release memory on exit.

testsuite/
* gcc.dg/ipa/ipcp-agg-12.c: New test.

From-SVN: r279525

gcc/ChangeLog
gcc/ipa-cp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/ipcp-agg-12.c [new file with mode: 0644]

index 198aa78fd170c522ef707d2e7a77e621b0501f1a..51e45a82e48d0d05ee64d790b45f5ed58f55ae3d 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-18  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/92971
+       * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Fix
+          definition of values, release memory on exit.
+
 2019-12-17  Jan Hubicka  <hubicka@ucw.cz>
            Martin Jambor  <mjambor@suse.cz>
 
index 1a80ccbde2ddc6ccc24d1191a11713908b426bbe..243b064ee2ca510c7e4a0384aa17250b2974804b 100644 (file)
@@ -5117,7 +5117,6 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
 
   for (i = 0; i < count; i++)
     {
-      static vec<ipa_agg_value> values = vNULL;
       class ipcp_param_lattices *plats;
       bool interesting = false;
       for (struct ipa_agg_replacement_value *av = aggval; av; av = av->next)
@@ -5133,7 +5132,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
       if (plats->aggs_bottom)
        return false;
 
-      values = intersect_aggregates_with_edge (cs, i, values);
+      vec<ipa_agg_value> values = intersect_aggregates_with_edge (cs, i, vNULL);
       if (!values.exists ())
        return false;
 
@@ -5157,6 +5156,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
                return false;
              }
          }
+      values.release ();
     }
   return true;
 }
index bcdfaa89c903f070c9fe14cabec073ee29870c8c..df1299dc9bf0c4695724fb6b8236d93e49984b6f 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-18  Martin Jambor  <mjambor@suse.cz>
+
+       PR ipa/92971
+       * gcc.dg/ipa/ipcp-agg-12.c: New test.
+
 2019-12-17  Jan Hubicka  <hubicka@ucw.cz>
            Martin Jambor  <mjambor@suse.cz>
 
diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-agg-12.c b/gcc/testsuite/gcc.dg/ipa/ipcp-agg-12.c
new file mode 100644 (file)
index 0000000..5c57913
--- /dev/null
@@ -0,0 +1,53 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-cp-details --param=ipa-cp-eval-threshold=2"  } */
+
+struct S
+{
+  int a, b, c;
+};
+
+int __attribute__((noinline)) foo (int i, struct S s);
+int __attribute__((noinline)) bar (int i, struct S s);
+int __attribute__((noinline)) baz (int i, struct S s);
+
+
+int __attribute__((noinline))
+bar (int i, struct S s)
+{
+  return baz (i, s);
+}
+
+int __attribute__((noinline))
+baz (int i, struct S s)
+{
+  return foo (i, s);
+}
+
+int __attribute__((noinline))
+foo (int i, struct S s)
+{
+  if (i == 2)
+    return 0;
+  else
+    return s.b * s.b + bar (i - 1, s);
+}
+
+volatile int g;
+
+void entry (void)
+{
+  struct S s;
+  s.b = 4;
+  g = bar (g, s);
+}
+
+
+void entry2 (void)
+{
+  struct S s;
+  s.b = 6;
+  g = baz (g, s);
+}
+
+
+/* { dg-final { scan-ipa-dump-times "adding an extra caller" 2 "cp" } } */