re PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple hot/cold...
authorJan Hubicka <hubicka@ucw.cz>
Thu, 11 Jan 2018 08:02:26 +0000 (09:02 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 11 Jan 2018 08:02:26 +0000 (08:02 +0000)
PR middle-end/83575
* cfgrtl.c (rtl_verify_edges): Only verify fixability of partition
when in layout mode.
(cfg_layout_finalize): Do not verify cfg before we are out of layout.
* cfgcleanup.c (try_optimize_cfg): Only verify flow info when doing
partition fixup.

* gcc.c-torture/compile/pr83575.c: New testcase.

From-SVN: r256479

gcc/ChangeLog
gcc/cfgcleanup.c
gcc/cfgrtl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr83575.c [new file with mode: 0644]

index 7eb6c1cc47c57824c4214afc3d71b238342bab94..1a55b201090797edf02924446247afc065fe7ef8 100644 (file)
@@ -1,3 +1,12 @@
+2018-01-10  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR middle-end/83575
+       * cfgrtl.c (rtl_verify_edges): Only verify fixability of partition
+       when in layout mode.
+       (cfg_layout_finalize): Do not verify cfg before we are out of layout.
+       * cfgcleanup.c (try_optimize_cfg): Only verify flow info when doing
+       partition fixup.
+
 2018-01-10  Michael Collison  <michael.collison@arm.com>
 
        * config/aarch64/aarch64-modes.def (V2HF): New VECTOR_MODE.
index eebbe8f7959bd4ddadcff94513a171696eb559db..c33022c1bb5c6d75736d80af75f0b1469e654e1e 100644 (file)
@@ -3013,8 +3013,10 @@ try_optimize_cfg (int mode)
                  is only visible after newly unreachable blocks are deleted,
                  which will be done in fixup_partitions.  */
              if ((mode & CLEANUP_NO_PARTITIONING) == 0)
-               fixup_partitions ();
-             checking_verify_flow_info ();
+               {
+                 fixup_partitions ();
+                 checking_verify_flow_info ();
+               }
             }
 
          changed_overall |= changed;
index f47a78cfcee233299fc7186d5f0114541b7dad19..6ff80fd5c015052484254825b036386c3edd3c90 100644 (file)
@@ -2615,7 +2615,8 @@ rtl_verify_edges (void)
 
   /* If there are partitions, do a sanity check on them: A basic block in
      a cold partition cannot dominate a basic block in a hot partition.  */
-  if (crtl->has_bb_partition && !err)
+  if (crtl->has_bb_partition && !err
+      && current_ir_type () == IR_RTL_CFGLAYOUT)
     {
       vec<basic_block> bbs_to_fix = find_partition_fixes (true);
       err = !bbs_to_fix.is_empty ();
@@ -4322,7 +4323,6 @@ break_superblocks (void)
 void
 cfg_layout_finalize (void)
 {
-  checking_verify_flow_info ();
   free_dominance_info (CDI_DOMINATORS);
   force_one_exit_fallthru ();
   rtl_register_cfg_hooks ();
index 209d6d896bd8c64848b78b978f013805126b4734..68fe8ef65befb043520cf4a9f0d0fac00437a64b 100644 (file)
@@ -1,3 +1,7 @@
+2018-01-10  Jan Hubicka  <hubicka@ucw.cz>
+
+       * gcc.c-torture/compile/pr83575.c: New testcase.
+
 2018-01-10  Michael Collison  <michael.collison@arm.com>
 
        gcc.target/aarch64/fp16_fmul_high_1.c: New testcase.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr83575.c b/gcc/testsuite/gcc.c-torture/compile/pr83575.c
new file mode 100644 (file)
index 0000000..1c554e9
--- /dev/null
@@ -0,0 +1,33 @@
+/* { dg-options "-O2 -funroll-loops -fno-tree-dominator-opts -fno-tree-loop-im -fno-code-hoisting -fno-tree-pre -fno-guess-branch-probability" } */
+int tw, be;
+
+void
+fp (void)
+{
+  if (tw == 0)
+    goto gq;
+  else if (be == 0)
+    goto ob;
+  else
+    return;
+
+  for (;;)
+    if (tw < 1)
+      {
+        while (tw < 1)
+          {
+ gq:
+            tw = 0;
+          }
+
+        while (be < 1)
+          {
+ ob:
+            tw = 0;
+          }
+
+        while (be < 1)
+          ++be;
+      }
+}
+