re PR rtl-optimization/72488 (wrong code (SIGFPE) at -Os and above on x86_64-linux...
authorRichard Biener <rguenther@suse.de>
Thu, 19 Jan 2017 12:00:42 +0000 (12:00 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 19 Jan 2017 12:00:42 +0000 (12:00 +0000)
2017-01-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/72488
* tree-ssa-sccvn.c (run_scc_vn): When we abort the VN make
sure to restore SSA info.
* tree-ssa.c (verify_ssa): Verify SSA info is not shared.

From-SVN: r244623

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

index bb725d66140245104be16413255d3e8cb1cd168b..20b703f1fe77c587402544b8f3f5664536d8ab4d 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/72488
+       * tree-ssa-sccvn.c (run_scc_vn): When we abort the VN make
+       sure to restore SSA info.
+       * tree-ssa.c (verify_ssa): Verify SSA info is not shared.
+
 2017-01-19  Richard Earnshaw  <rearnsha@arm.com>
 
        PR rtl-optimization/79121
index 97e17bbcfbf39ac0fa7eff23aa9b7981b1b148b4..8a9fff57e977e2d2255d20a08d21b00ef8b46517 100644 (file)
@@ -4844,6 +4844,7 @@ run_scc_vn (vn_lookup_kind default_vn_walk_kind_)
   walker.walk (ENTRY_BLOCK_PTR_FOR_FN (cfun));
   if (walker.fail)
     {
+      scc_vn_restore_ssa_info ();
       free_scc_vn ();
       return false;
     }
index 605ee0f64bc114a5b9144eadaf8d7b1656f0c35b..067143f49b82fc8ad23c8fa47ba539b668f03180 100644 (file)
@@ -1027,24 +1027,49 @@ verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
 
   timevar_push (TV_TREE_SSA_VERIFY);
 
-  /* Keep track of SSA names present in the IL.  */
-  size_t i;
-  tree name;
-
-  FOR_EACH_SSA_NAME (i, name, cfun)
     {
-      gimple *stmt;
-      TREE_VISITED (name) = 0;
-
-      verify_ssa_name (name, virtual_operand_p (name));
+      /* Keep track of SSA names present in the IL.  */
+      size_t i;
+      tree name;
+      hash_map <void *, tree> ssa_info;
 
-      stmt = SSA_NAME_DEF_STMT (name);
-      if (!gimple_nop_p (stmt))
+      FOR_EACH_SSA_NAME (i, name, cfun)
        {
-         basic_block bb = gimple_bb (stmt);
-         if (verify_def (bb, definition_block,
-                         name, stmt, virtual_operand_p (name)))
-           goto err;
+         gimple *stmt;
+         TREE_VISITED (name) = 0;
+
+         verify_ssa_name (name, virtual_operand_p (name));
+
+         stmt = SSA_NAME_DEF_STMT (name);
+         if (!gimple_nop_p (stmt))
+           {
+             basic_block bb = gimple_bb (stmt);
+             if (verify_def (bb, definition_block,
+                             name, stmt, virtual_operand_p (name)))
+               goto err;
+           }
+
+         void *info = NULL;
+         if (POINTER_TYPE_P (TREE_TYPE (name)))
+           info = SSA_NAME_PTR_INFO (name);
+         else if (INTEGRAL_TYPE_P (TREE_TYPE (name)))
+           info = SSA_NAME_RANGE_INFO (name);
+         if (info)
+           {
+             bool existed;
+             tree &val = ssa_info.get_or_insert (info, &existed);
+             if (existed)
+               {
+                 error ("shared SSA name info");
+                 print_generic_expr (stderr, val, 0);
+                 fprintf (stderr, " and ");
+                 print_generic_expr (stderr, name, 0);
+                 fprintf (stderr, "\n");
+                 goto err;
+               }
+             else
+               val = name;
+           }
        }
     }