function: Do the CLEANUP_EXPENSIVE after shrink-wrapping, not before
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 18 May 2016 10:58:57 +0000 (12:58 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 18 May 2016 10:58:57 +0000 (12:58 +0200)
We should do CLEANUP_EXPENSIVE after shrink-wrapping, because shrink-
wrapping creates constructs that CLEANUP_EXPENSIVE can optimise, and
nothing runs CLEANUP_EXPENSIVE later.

* function.c (rest_of_handle_thread_prologue_and_epilogue): Call
cleanup_cfg with CLEANUP_EXPENSIVE after shrink-wrapping instead
of before.  Add a comment.

From-SVN: r236372

gcc/ChangeLog
gcc/function.c

index a011528db7c7256d1559943a1e2d48abefc75372..4d119bdcef8aad76d603f6fcaae8df921c5c6db4 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-18  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * function.c (rest_of_handle_thread_prologue_and_epilogue): Call
+       cleanup_cfg with CLEANUP_EXPENSIVE after shrink-wrapping instead
+       of before.  Add a comment.
+
 2016-05-18 Bin Cheng  <bin.cheng@arm.com>
 
        * tree-ssa-loop-ivopts.c (get_computation_cost_at): Check invariant
index 70584b95586597e1ec6d1aec2ac902860d7e16e5..9cbe71f25211bb99ab3d550280c7ffc05eec77a0 100644 (file)
@@ -6369,8 +6369,10 @@ make_pass_leaf_regs (gcc::context *ctxt)
 static unsigned int
 rest_of_handle_thread_prologue_and_epilogue (void)
 {
+  /* prepare_shrink_wrap is sensitive to the block structure of the control
+     flow graph, so clean it up first.  */
   if (optimize)
-    cleanup_cfg (CLEANUP_EXPENSIVE);
+    cleanup_cfg (0);
 
   /* On some machines, the prologue and epilogue code, or parts thereof,
      can be represented as RTL.  Doing so lets us schedule insns between
@@ -6384,7 +6386,7 @@ rest_of_handle_thread_prologue_and_epilogue (void)
 
   /* Shrink-wrapping can result in unreachable edges in the epilogue,
      see PR57320.  */
-  cleanup_cfg (0);
+  cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
 
   /* The stack usage info is finalized during prologue expansion.  */
   if (flag_stack_usage_info)