re PR middle-end/63155 (memory hog)

2018-10-09  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/63155
	* tree-ssa-structalias.c: Include tree-ssa.h.
	(get_constraint_for_ssa_var): For undefs return nothing_id.
	(find_func_aliases): Cleanup PHI handling.

From-SVN: r264956
This commit is contained in:
Richard Biener 2018-10-09 11:43:46 +00:00 committed by Richard Biener
parent c885142a15
commit fe8a86e1f4
2 changed files with 29 additions and 26 deletions

View File

@ -1,3 +1,10 @@
2018-10-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/63155
* tree-ssa-structalias.c: Include tree-ssa.h.
(get_constraint_for_ssa_var): For undefs return nothing_id.
(find_func_aliases): Cleanup PHI handling.
2018-10-09 Richard Biener <rguenther@suse.de>
* tree-vectorizer.c (dump_stmt_cost): Fix cut&paste missing

View File

@ -42,6 +42,7 @@
#include "varasm.h"
#include "stringpool.h"
#include "attribs.h"
#include "tree-ssa.h"
/* The idea behind this analyzer is to generate set constraints from the
program, then solve the resulting constraints in order to generate the
@ -2928,15 +2929,26 @@ get_constraint_for_ssa_var (tree t, vec<ce_s> *results, bool address_p)
/* We allow FUNCTION_DECLs here even though it doesn't make much sense. */
gcc_assert (TREE_CODE (t) == SSA_NAME || DECL_P (t));
/* For parameters, get at the points-to set for the actual parm
decl. */
if (TREE_CODE (t) == SSA_NAME
&& SSA_NAME_IS_DEFAULT_DEF (t)
&& (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL
|| TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL))
&& SSA_NAME_IS_DEFAULT_DEF (t))
{
get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p);
return;
/* For parameters, get at the points-to set for the actual parm
decl. */
if (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL
|| TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL)
{
get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p);
return;
}
/* For undefined SSA names return nothing. */
else if (!ssa_defined_default_def_p (t))
{
cexpr.var = nothing_id;
cexpr.type = SCALAR;
cexpr.offset = 0;
results->safe_push (cexpr);
return;
}
}
/* For global variables resort to the alias target. */
@ -4833,35 +4845,19 @@ find_func_aliases (struct function *fn, gimple *origt)
gimple *t = origt;
auto_vec<ce_s, 16> lhsc;
auto_vec<ce_s, 16> rhsc;
struct constraint_expr *c;
varinfo_t fi;
/* Now build constraints expressions. */
if (gimple_code (t) == GIMPLE_PHI)
{
size_t i;
unsigned int j;
/* For a phi node, assign all the arguments to
the result. */
get_constraint_for (gimple_phi_result (t), &lhsc);
for (i = 0; i < gimple_phi_num_args (t); i++)
for (unsigned i = 0; i < gimple_phi_num_args (t); i++)
{
tree strippedrhs = PHI_ARG_DEF (t, i);
STRIP_NOPS (strippedrhs);
get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc);
FOR_EACH_VEC_ELT (lhsc, j, c)
{
struct constraint_expr *c2;
while (rhsc.length () > 0)
{
c2 = &rhsc.last ();
process_constraint (new_constraint (*c, *c2));
rhsc.pop ();
}
}
process_all_all_constraints (lhsc, rhsc);
rhsc.truncate (0);
}
}
/* In IPA mode, we need to generate constraints to pass call