From fe8a86e1f445c4f97c06ddc36ce68ca40627a1cc Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 9 Oct 2018 11:43:46 +0000 Subject: [PATCH] re PR middle-end/63155 (memory hog) 2018-10-09 Richard Biener 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 --- gcc/ChangeLog | 7 ++++++ gcc/tree-ssa-structalias.c | 48 +++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 706497b3012..13e046147cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-10-09 Richard Biener + + 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 * tree-vectorizer.c (dump_stmt_cost): Fix cut&paste missing diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 22558351138..06ac0016e03 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -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 *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 lhsc; auto_vec 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