re PR middle-end/63155 (memory hog)
authorRichard Biener <rguenther@suse.de>
Tue, 9 Oct 2018 11:43:46 +0000 (11:43 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 9 Oct 2018 11:43:46 +0000 (11:43 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-structalias.c

index 706497b30124418bfe5d4ac64d54b12434532e7a..13e046147cc42f543c5ddd0178926ac32528c66e 100644 (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
index 225583511384906dca5142f5ae7df1a5abb8838d..06ac0016e03451934d8cebad2156a6cd335dec8b 100644 (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