]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
IPA-CP: Remove bogus static keyword (PR 92971)
authorMartin Jambor <mjambor@suse.cz>
Fri, 10 Jan 2020 19:30:56 +0000 (20:30 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Fri, 10 Jan 2020 19:30:56 +0000 (20:30 +0100)
2020-01-10  Martin Jambor  <mjambor@suse.cz>

Backport from mainline
2019-12-17  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: r280131

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

index 1e4ff7e6e2b01dd15da4cce6c58a6da2813eb856..614fdc1cab9e5c7d0c9d1a99c13cdff64a3233fd 100644 (file)
@@ -1,3 +1,12 @@
+2020-01-10  Martin Jambor  <mjambor@suse.cz>
+
+       Backport from mainline
+       2019-12-17  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.
+
 2020-01-10  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
 
        Backport from trunk
index d414632e602639a73f3e99678e7dae550df724be..36ec54d77534e1c8b5929beb3c06f9f46d795877 100644 (file)
@@ -4452,7 +4452,6 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
 
   for (i = 0; i < count; i++)
     {
-      static vec<ipa_agg_jf_item> values = vec<ipa_agg_jf_item>();
       struct ipcp_param_lattices *plats;
       bool interesting = false;
       for (struct ipa_agg_replacement_value *av = aggval; av; av = av->next)
@@ -4468,7 +4467,8 @@ 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_jf_item> values
+       = intersect_aggregates_with_edge (cs, i, vNULL);
       if (!values.exists ())
        return false;
 
@@ -4492,6 +4492,7 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
                return false;
              }
          }
+      values.release ();
     }
   return true;
 }
index 659203f4707ed5c2cb87d4a46d449fc625ea91b7..d4b034414d04738018bd157a583c6fc8bea876e4 100644 (file)
@@ -1,3 +1,11 @@
+2020-01-10  Martin Jambor  <mjambor@suse.cz>
+
+       Backport from mainline
+       2019-12-17  Martin Jambor  <mjambor@suse.cz>
+
+        PR ipa/92971
+        * gcc.dg/ipa/ipcp-agg-12.c: New test.
+
 2020-01-10  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>
 
        Backport from trunk
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" } } */