Backport r268762

2019-02-15  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-15  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.

From-SVN: r268937
This commit is contained in:
Martin Liska 2019-02-15 11:58:49 +01:00 committed by Martin Liska
parent f09d4c9b7d
commit 75babf8b3b
8 changed files with 35 additions and 12 deletions

View File

@ -1,3 +1,21 @@
2019-02-15 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-11 Stefan Agner <stefan@agner.ch>
Backport from mainline.

View File

@ -810,7 +810,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

View File

@ -1745,7 +1745,7 @@ inline_small_functions (void)
metrics. */
max_count = 0;
ipa_reduced_postorder (order, true, true, NULL);
ipa_reduced_postorder (order, true, NULL);
free (order);
FOR_EACH_DEFINED_FUNCTION (node)

View File

@ -1233,7 +1233,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)
{
@ -1566,7 +1566,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)
{

View File

@ -730,7 +730,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);

View File

@ -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;

View File

@ -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 *);

View File

@ -1,3 +1,11 @@
2019-02-15 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-15 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/sparc/struct-ret-check-1.c: Add -fno-pie option.