re PR middle-end/22057 (Poor -O0 debug information for for loops with no initializer)
authorIan Lance Taylor <ian@airs.com>
Mon, 18 Jul 2005 23:20:09 +0000 (23:20 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 18 Jul 2005 23:20:09 +0000 (23:20 +0000)
PR middle-end/22057
* tree-cfgcleanup.c (cleanup_tree_cfg): Only remove forwarder
blocks when optimizing.

From-SVN: r102142

gcc/ChangeLog
gcc/tree-cfgcleanup.c

index c24f4b410281a7b71a971d5789ae42838c2adc44..9cd5cffac63db454650f4e434b896edf3e7fc649 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-18  Ian Lance Taylor  <ian@airs.com>
+
+       PR middle-end/22057
+       * tree-cfgcleanup.c (cleanup_tree_cfg): Only remove forwarder
+       blocks when optimizing.
+
 2005-07-18  Steve Ellcey  <sje@cup.hp.com>
 
        * common.opt (frename-registers): Initialize to 2.
index bedee9bdef98be1297d01d26aa60fdf4795bd50c..51b2fc59465f246526d1fb1e69f9e4da79f8fb41 100644 (file)
@@ -501,20 +501,28 @@ cleanup_tree_cfg (void)
   retval = cleanup_control_flow ();
   retval |= delete_unreachable_blocks ();
 
-  /* cleanup_forwarder_blocks can redirect edges out of SWITCH_EXPRs,
-     which can get expensive.  So we want to enable recording of edge
-     to CASE_LABEL_EXPR mappings around the call to
-     cleanup_forwarder_blocks.  */
-  start_recording_case_labels ();
-  retval |= cleanup_forwarder_blocks ();
-  end_recording_case_labels ();
+  /* Forwarder blocks can carry line number information which is
+     useful when debugging, so we only clean them up when
+     optimizing.  */
+
+  if (optimize > 0)
+    {
+      /* cleanup_forwarder_blocks can redirect edges out of
+        SWITCH_EXPRs, which can get expensive.  So we want to enable
+        recording of edge to CASE_LABEL_EXPR mappings around the call
+        to cleanup_forwarder_blocks.  */
+      start_recording_case_labels ();
+      retval |= cleanup_forwarder_blocks ();
+      end_recording_case_labels ();
+    }
 
 #ifdef ENABLE_CHECKING
   if (retval)
     {
       gcc_assert (!cleanup_control_flow ());
       gcc_assert (!delete_unreachable_blocks ());
-      gcc_assert (!cleanup_forwarder_blocks ());
+      if (optimize > 0)
+       gcc_assert (!cleanup_forwarder_blocks ());
     }
 #endif