summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2019-02-14 11:24:45 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2019-02-14 11:24:45 +0000
commit2e48cb7168c44c9660fa9b6f72b7ede91f99e54d (patch)
treea94fabca7b8a2342601b1c581538179f5da1d2fa
parent7b62aa6518eb7b1548f79c3e62cffe242e7a5736 (diff)
Backport r268762
2019-02-14 Martin Liska <mliska@suse.cz> Backport from mainline 2019-02-11 Martin Liska <mliska@suse.cz> PR ipa/89009 * ipa-cp.c (build_toporder_info): Remove usage of a param. * ipa-inline.c (inline_small_functions): Likewise. * ipa-pure-const.c (propagate_pure_const): Likewise. (propagate_nothrow): Likewise. * ipa-reference.c (propagate): Likewise. * ipa-utils.c (struct searchc_env): Remove unused field. (searchc): Always search across AVAIL_INTERPOSABLE. (ipa_reduced_postorder): Always allow AVAIL_INTERPOSABLE as the only called IPA pure const can properly not propagate across interposable boundary. * ipa-utils.h (ipa_reduced_postorder): Remove param. 2019-02-14 Martin Liska <mliska@suse.cz> Backport from mainline 2019-02-11 Martin Liska <mliska@suse.cz> PR ipa/89009 * g++.dg/ipa/pr89009.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-8-branch@268871 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/ipa-cp.c2
-rw-r--r--gcc/ipa-inline.c2
-rw-r--r--gcc/ipa-pure-const.c4
-rw-r--r--gcc/ipa-reference.c2
-rw-r--r--gcc/ipa-utils.c9
-rw-r--r--gcc/ipa-utils.h2
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr89009.C12
9 files changed, 47 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ae4092342a6d..8485211f929d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,21 @@
+2019-02-14 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
+ 2019-02-11 Martin Liska <mliska@suse.cz>
+
+ PR ipa/89009
+ * ipa-cp.c (build_toporder_info): Remove usage of a param.
+ * ipa-inline.c (inline_small_functions): Likewise.
+ * ipa-pure-const.c (propagate_pure_const): Likewise.
+ (propagate_nothrow): Likewise.
+ * ipa-reference.c (propagate): Likewise.
+ * ipa-utils.c (struct searchc_env): Remove unused field.
+ (searchc): Always search across AVAIL_INTERPOSABLE.
+ (ipa_reduced_postorder): Always allow AVAIL_INTERPOSABLE as
+ the only called IPA pure const can properly not propagate
+ across interposable boundary.
+ * ipa-utils.h (ipa_reduced_postorder): Remove param.
+
2019-02-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/89314
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index e868b9c26233..5bd4df0ecb7d 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -820,7 +820,7 @@ build_toporder_info (struct ipa_topo_info *topo)
topo->stack = XCNEWVEC (struct cgraph_node *, symtab->cgraph_count);
gcc_checking_assert (topo->stack_top == 0);
- topo->nnodes = ipa_reduced_postorder (topo->order, true, true, NULL);
+ topo->nnodes = ipa_reduced_postorder (topo->order, true, NULL);
}
/* Free information about strongly connected components and the arrays in
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 996b04cb81d0..bde7ecfd0d52 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -1759,7 +1759,7 @@ inline_small_functions (void)
metrics. */
max_count = profile_count::uninitialized ();
- ipa_reduced_postorder (order, true, true, NULL);
+ ipa_reduced_postorder (order, true, NULL);
free (order);
FOR_EACH_DEFINED_FUNCTION (node)
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index a80b6845633e..d36d1ba9b730 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -1443,7 +1443,7 @@ propagate_pure_const (void)
bool remove_p = false;
bool has_cdtor;
- order_pos = ipa_reduced_postorder (order, true, false,
+ order_pos = ipa_reduced_postorder (order, true,
ignore_edge_for_pure_const);
if (dump_file)
{
@@ -1773,7 +1773,7 @@ propagate_nothrow (void)
int i;
struct ipa_dfs_info * w_info;
- order_pos = ipa_reduced_postorder (order, true, false,
+ order_pos = ipa_reduced_postorder (order, true,
ignore_edge_for_nothrow);
if (dump_file)
{
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 6490c03f8d05..b9db61697d15 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -728,7 +728,7 @@ propagate (void)
the global information. All the nodes within a cycle will have
the same info so we collapse cycles first. Then we can do the
propagation in one pass from the leaves to the roots. */
- order_pos = ipa_reduced_postorder (order, true, true, ignore_edge_p);
+ order_pos = ipa_reduced_postorder (order, true, ignore_edge_p);
if (dump_file)
ipa_print_order (dump_file, "reduced", order, order_pos);
diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
index a271bb822cb5..106d3079391e 100644
--- a/gcc/ipa-utils.c
+++ b/gcc/ipa-utils.c
@@ -63,7 +63,6 @@ struct searchc_env {
int order_pos;
splay_tree nodes_marked_new;
bool reduce;
- bool allow_overwritable;
int count;
};
@@ -105,7 +104,7 @@ searchc (struct searchc_env* env, struct cgraph_node *v,
if (w->aux
&& (avail > AVAIL_INTERPOSABLE
- || (env->allow_overwritable && avail == AVAIL_INTERPOSABLE)))
+ || avail == AVAIL_INTERPOSABLE))
{
w_info = (struct ipa_dfs_info *) w->aux;
if (w_info->new_node)
@@ -162,7 +161,7 @@ searchc (struct searchc_env* env, struct cgraph_node *v,
int
ipa_reduced_postorder (struct cgraph_node **order,
- bool reduce, bool allow_overwritable,
+ bool reduce,
bool (*ignore_edge) (struct cgraph_edge *))
{
struct cgraph_node *node;
@@ -175,15 +174,13 @@ ipa_reduced_postorder (struct cgraph_node **order,
env.nodes_marked_new = splay_tree_new (splay_tree_compare_ints, 0, 0);
env.count = 1;
env.reduce = reduce;
- env.allow_overwritable = allow_overwritable;
FOR_EACH_DEFINED_FUNCTION (node)
{
enum availability avail = node->get_availability ();
if (avail > AVAIL_INTERPOSABLE
- || (allow_overwritable
- && (avail == AVAIL_INTERPOSABLE)))
+ || avail == AVAIL_INTERPOSABLE)
{
/* Reuse the info if it is already there. */
struct ipa_dfs_info *info = (struct ipa_dfs_info *) node->aux;
diff --git a/gcc/ipa-utils.h b/gcc/ipa-utils.h
index 1609ac14d7fb..e247d63fd7eb 100644
--- a/gcc/ipa-utils.h
+++ b/gcc/ipa-utils.h
@@ -36,7 +36,7 @@ struct ipa_dfs_info {
/* In ipa-utils.c */
void ipa_print_order (FILE*, const char *, struct cgraph_node**, int);
-int ipa_reduced_postorder (struct cgraph_node **, bool, bool,
+int ipa_reduced_postorder (struct cgraph_node **, bool,
bool (*ignore_edge) (struct cgraph_edge *));
void ipa_free_postorder_info (void);
vec<cgraph_node *> ipa_get_nodes_in_cycle (struct cgraph_node *);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8fac55682d80..33d9d92a8af2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2019-02-14 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
+ 2019-02-11 Martin Liska <mliska@suse.cz>
+
+ PR ipa/89009
+ * g++.dg/ipa/pr89009.C: New test.
+
2019-02-14 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/89314
diff --git a/gcc/testsuite/g++.dg/ipa/pr89009.C b/gcc/testsuite/g++.dg/ipa/pr89009.C
new file mode 100644
index 000000000000..6b4fc65a6414
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr89009.C
@@ -0,0 +1,12 @@
+/* PR ipa/89009 */
+/* { dg-do run } */
+/* { dg-options "-fvisibility=hidden -fpic -O2 -fno-inline" } */
+
+#pragma GCC visibility push(default)
+void foo1() { __builtin_printf ("foo\n"); }
+#pragma GCC visibility pop
+void foo2() { __builtin_printf ("foo\n"); }
+
+int main() { foo2(); return 0; }
+
+/* { dg-output "foo" } */