explow.c (probe_stack_range): Restore simple control flow and stop again when...
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 30 May 2012 08:52:36 +0000 (08:52 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 30 May 2012 08:52:36 +0000 (08:52 +0000)
* explow.c (probe_stack_range): Restore simple control flow and stop
again when the probe cannot be generated if HAVE_check_stack.

From-SVN: r188003

gcc/ChangeLog
gcc/explow.c

index b915e68..0df8c16 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-30  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * explow.c (probe_stack_range): Restore simple control flow and stop
+       again when the probe cannot be generated if HAVE_check_stack.
+
 2012-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/53519
index 5513a12..be8bf3e 100644 (file)
@@ -1579,12 +1579,11 @@ probe_stack_range (HOST_WIDE_INT first, rtx size)
                                                                size, first)));
       emit_library_call (stack_check_libfunc, LCT_NORMAL, VOIDmode, 1, addr,
                         Pmode);
-      return;
     }
 
   /* Next see if we have an insn to check the stack.  */
 #ifdef HAVE_check_stack
-  if (HAVE_check_stack)
+  else if (HAVE_check_stack)
     {
       struct expand_operand ops[1];
       rtx addr = memory_address (Pmode,
@@ -1592,10 +1591,10 @@ probe_stack_range (HOST_WIDE_INT first, rtx size)
                                                 stack_pointer_rtx,
                                                 plus_constant (Pmode,
                                                                size, first)));
-
+      bool success;
       create_input_operand (&ops[0], addr, Pmode);
-      if (maybe_expand_insn (CODE_FOR_check_stack, 1, ops))
-       return;
+      success = maybe_expand_insn (CODE_FOR_check_stack, 1, ops);
+      gcc_assert (success);
     }
 #endif