* config/i386/i386.md (allocate_stack): Simplify.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Mar 2012 22:16:45 +0000 (22:16 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Mar 2012 22:16:45 +0000 (22:16 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185545 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.md

index 67a1119..258bda9 100644 (file)
@@ -1,5 +1,9 @@
 2012-03-19  Uros Bizjak  <ubizjak@gmail.com>
 
+       * config/i386/i386.md (allocate_stack): Simplify.
+
+2012-03-19  Uros Bizjak  <ubizjak@gmail.com>
+
        * builtins.c (expand_builtin_cexpi): Use copy_addr_to_reg instead of
        copy_to_mode_reg (Pmode, ...).
        (expand_builtin_frame_address): Ditto.
@@ -10,7 +14,6 @@
        (ix86_expand_setmem): Ditto.
        (ix86_trampoline_init): DItto.
        * config/i386/i386.md (cmpstrnsi): Ditto.
-       (allocate_stack): Ditto.
 
 2012-03-19  Sandra Loosemore  <sandra@codesourcery.com>
 
index 0db0222..4bcb7d2 100644 (file)
 
   if (CHECK_STACK_LIMIT && CONST_INT_P (operands[1])
       && INTVAL (operands[1]) < CHECK_STACK_LIMIT)
-    {
-      x = expand_simple_binop (Pmode, MINUS, stack_pointer_rtx, operands[1],
-                              stack_pointer_rtx, 0, OPTAB_DIRECT);
-      if (x != stack_pointer_rtx)
-       emit_move_insn (stack_pointer_rtx, x);
-    }
+    x = operands[1];
   else
     {
-      x = copy_addr_to_reg (operands[1]);
-      if (TARGET_64BIT)
-        emit_insn (gen_allocate_stack_worker_probe_di (x, x));
-      else
-        emit_insn (gen_allocate_stack_worker_probe_si (x, x));
-      x = expand_simple_binop (Pmode, MINUS, stack_pointer_rtx, x,
-                              stack_pointer_rtx, 0, OPTAB_DIRECT);
-      if (x != stack_pointer_rtx)
-       emit_move_insn (stack_pointer_rtx, x);
+      rtx (*insn) (rtx, rtx);
+
+      x = copy_to_mode_reg (Pmode, operands[1]);
+
+      insn = (TARGET_64BIT
+             ? gen_allocate_stack_worker_probe_di
+             : gen_allocate_stack_worker_probe_si);
+
+      emit_insn (insn (x, x));
     }
 
+  x = expand_simple_binop (Pmode, MINUS, stack_pointer_rtx, x,
+                          stack_pointer_rtx, 0, OPTAB_DIRECT);
+
+  if (x != stack_pointer_rtx)
+    emit_move_insn (stack_pointer_rtx, x);
+
   emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
   DONE;
 })