re PR middle-end/89497 (ICE caused by Segmentation Fault when compiling cups 2.2...
authorRichard Biener <rguenther@suse.de>
Fri, 1 Mar 2019 09:21:30 +0000 (09:21 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 1 Mar 2019 09:21:30 +0000 (09:21 +0000)
2019-03-01  Richard Biener  <rguenther@suse.de>

PR middle-end/89497
* tree-cfgcleanup.h (cleanup_tree_cfg): Add SSA update flags
argument, defaulted to zero.
* passes.c (execute_function_todo): Pass down SSA update flags
to cleanup_tree_cfg.
* tree-cfgcleanup.c: Include tree-into-ssa.h and tree-cfgcleanup.h.
(cleanup_tree_cfg_noloop): After cleanup_control_flow_pre update SSA
form if requested.
(cleanup_tree_cfg): Get and pass down SSA update flags.

* gcc.dg/tree-ssa/reassoc-43.c: Avoid false match in regex.
* g++.dg/tree-prof/devirt.C: Scan tracer dump for foldings
that happen now earlier.

From-SVN: r269302

gcc/ChangeLog
gcc/passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-prof/devirt.C
gcc/testsuite/gcc.dg/tree-ssa/reassoc-43.c
gcc/tree-cfgcleanup.c
gcc/tree-cfgcleanup.h

index 8759ee895b8cd9b8e5fb3ec8f3b6bf33a3c899c7..bce3f74b5f3925f34f61771bac0f11b29c38e259 100644 (file)
@@ -1,3 +1,15 @@
+2019-03-01  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/89497
+       * tree-cfgcleanup.h (cleanup_tree_cfg): Add SSA update flags
+       argument, defaulted to zero.
+       * passes.c (execute_function_todo): Pass down SSA update flags
+       to cleanup_tree_cfg.
+       * tree-cfgcleanup.c: Include tree-into-ssa.h and tree-cfgcleanup.h.
+       (cleanup_tree_cfg_noloop): After cleanup_control_flow_pre update SSA
+       form if requested.
+       (cleanup_tree_cfg): Get and pass down SSA update flags.
+
 2019-03-01  Jakub Jelinek  <jakub@redhat.com>
 
        PR bootstrap/89539
index 7602abd572ded9d16413b51bbb4f48aa074c1a86..41aa7655ec56057da498aafcf29543ad152e9846 100644 (file)
@@ -1927,7 +1927,7 @@ execute_function_todo (function *fn, void *data)
   /* Always cleanup the CFG before trying to update SSA.  */
   if (flags & TODO_cleanup_cfg)
     {
-      cleanup_tree_cfg ();
+      cleanup_tree_cfg (flags & TODO_update_ssa_any);
 
       /* When cleanup_tree_cfg merges consecutive blocks, it may
         perform some simplistic propagation when removing single
index cf4f06eb88d62fd722aff5947bc465b2b7dc2899..b1b4886c3ef11cd0823a85556c0b5dd1575192a9 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-01  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/89497
+       * gcc.dg/tree-ssa/reassoc-43.c: Avoid false match in regex.
+       * g++.dg/tree-prof/devirt.C: Scan tracer dump for foldings
+       that happen now earlier.
+
 2019-02-28  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc.c-torture/execute/20190228-1.c: New test.
index 3de5dbcf688f36ead1340c312243f395ec31f585..8c2913a39309ed05842caf3ceaf4a58c2f1c4a58 100644 (file)
@@ -1,5 +1,5 @@
 /* PR ipa/88561 */
-/* { dg-options "-O3 -fdump-tree-dom3-details" } */
+/* { dg-options "-O3 -fdump-tree-tracer-details -fdump-tree-dom3-details" } */
 
 struct nsISupports
 {
@@ -121,6 +121,6 @@ main ()
     __builtin_abort ();
 }
 
-/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::_ZThn16" 1 "dom3" { target { lp64 || llp64 } } } } */
+/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::_ZThn16" 1 "tracer" { target { lp64 || llp64 } } } } */
 /* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::_ZThn8" 1 "dom3" { target ilp32 } } } */
-/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::AddRef" 1 "dom3" } } */
+/* { dg-final-use-not-autofdo { scan-tree-dump-times "folding virtual function call to virtual unsigned int mozPersonalDictionary::AddRef" 1 "tracer" } } */
index ea44f300f94e7e282f964283805aa444ea92769f..90e1e86b3cbda6555329d4b9a5bb458385847202 100644 (file)
@@ -50,4 +50,4 @@ c_parser_translation_unit (c_parser * parser)
        }
     }
 }
-/* { dg-final { scan-tree-dump-not "0 != 0" "reassoc2"} } */
+/* { dg-final { scan-tree-dump-not "\[ (\]0 != 0" "reassoc2"} } */
index 63db3308344341cbcae1ca1694aa4070684ea571..f7bd5651a90838b70d27e2945b6b0636f054fa22 100644 (file)
@@ -44,6 +44,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-fold.h"
 #include "tree-ssa-loop-niter.h"
 #include "cgraph.h"
+#include "tree-into-ssa.h"
+#include "tree-cfgcleanup.h"
+
 
 /* The set of blocks in that at least one of the following changes happened:
    -- the statement at the end of the block was changed
@@ -943,7 +946,7 @@ mfb_keep_latches (edge e)
    Return true if the flowgraph was modified, false otherwise.  */
 
 static bool
-cleanup_tree_cfg_noloop (void)
+cleanup_tree_cfg_noloop (unsigned ssa_update_flags)
 {
   timevar_push (TV_TREE_CLEANUP_CFG);
 
@@ -1023,6 +1026,8 @@ cleanup_tree_cfg_noloop (void)
 
   /* After doing the above SSA form should be valid (or an update SSA
      should be required).  */
+  if (ssa_update_flags)
+    update_ssa (ssa_update_flags);
 
   /* Compute dominator info which we need for the iterative process below.  */
   if (!dom_info_available_p (CDI_DOMINATORS))
@@ -1125,9 +1130,9 @@ repair_loop_structures (void)
 /* Cleanup cfg and repair loop structures.  */
 
 bool
-cleanup_tree_cfg (void)
+cleanup_tree_cfg (unsigned ssa_update_flags)
 {
-  bool changed = cleanup_tree_cfg_noloop ();
+  bool changed = cleanup_tree_cfg_noloop (ssa_update_flags);
 
   if (current_loops != NULL
       && loops_state_satisfies_p (LOOPS_NEED_FIXUP))
index bd27505fd5c8092611bcfc3800be24818807a3de..d69b6f5a62d2b1cfcf3f70769ebeab8bbaa1ce6e 100644 (file)
@@ -22,7 +22,7 @@ along with GCC; see the file COPYING3.  If not see
 
 /* In tree-cfgcleanup.c  */
 extern bitmap cfgcleanup_altered_bbs;
-extern bool cleanup_tree_cfg (void);
+extern bool cleanup_tree_cfg (unsigned = 0);
 extern bool fixup_noreturn_call (gimple *stmt);
 extern bool delete_unreachable_blocks_update_callgraph (cgraph_node *dst_node,
                                                        bool update_clones);