OSDN Git Service

Backport from mainline
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Nov 2012 17:38:25 +0000 (17:38 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Nov 2012 17:38:25 +0000 (17:38 +0000)
2012-11-06  Uros Bizjak  <ubizjak@gmail.com>

* config/i386/i386.c (ix86_init_machine_status): Do not
explicitly clear tls_descriptor_call_expanded_p again.

2012-11-06  Uros Bizjak  <ubizjak@gmail.com>

* config/i386/sse.md
(<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Mark operand 0
as read and written by the instruction.

2012-11-06  Uros Bizjak  <ubizjak@gmail.com>

* config/i386/i386.c (TARGET_INSTANTIATE_DECLS): New define.
(ix86_instantiate_decls): New function.
(ix86_expand_builtin) <case IX86_BUILTIN_LDMXCSR>: Use SLOT_TEMP
stack slot instead of SLOT_VIRTUAL.
<case IX86_BUILTIN_STMXCSR>: Ditto.
(assign_386_stack_local): Do not assert when virtual slot is valid.
* config/i386/i386.h (enum ix86_stack_slot): Remove SLOT_VIRTUAL.
* config/i386/i386.md (truncdfsf2): Do not use SLOT_VIRTUAL stack slot.
(truncxf<mode>2): Ditto.
(floatunssi<mode>2): Ditto.
(isinf<mode>2): Ditto.
* config/i386/sync.md (atomic_load<mode>): Ditto.
(atomic_store<mode>): Ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@193333 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/i386/sse.md
gcc/config/i386/sync.md

index 71d14d8..e7dd8fd 100644 (file)
@@ -1,3 +1,33 @@
+2012-11-07  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2012-11-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_init_machine_status): Do not
+       explicitly clear tls_descriptor_call_expanded_p again.
+
+       2012-11-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/sse.md
+       (<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Mark operand 0
+       as read and written by the instruction.
+
+       2012-11-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (TARGET_INSTANTIATE_DECLS): New define.
+       (ix86_instantiate_decls): New function.
+       (ix86_expand_builtin) <case IX86_BUILTIN_LDMXCSR>: Use SLOT_TEMP
+       stack slot instead of SLOT_VIRTUAL.
+       <case IX86_BUILTIN_STMXCSR>: Ditto.
+       (assign_386_stack_local): Do not assert when virtual slot is valid.
+       * config/i386/i386.h (enum ix86_stack_slot): Remove SLOT_VIRTUAL.
+       * config/i386/i386.md (truncdfsf2): Do not use SLOT_VIRTUAL stack slot.
+       (truncxf<mode>2): Ditto.
+       (floatunssi<mode>2): Ditto.
+       (isinf<mode>2): Ditto.
+       * config/i386/sync.md (atomic_load<mode>): Ditto.
+       (atomic_store<mode>): Ditto.
+
 2012-11-07  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR middle-end/55219
index b42870f..6589227 100644 (file)
@@ -23318,7 +23318,6 @@ ix86_init_machine_status (void)
 
   f = ggc_alloc_cleared_machine_function ();
   f->use_fast_prologue_epilogue_nregs = -1;
-  f->tls_descriptor_call_expanded_p = 0;
   f->call_abi = ix86_abi;
 
   return f;
@@ -23337,9 +23336,6 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n)
 
   gcc_assert (n < MAX_386_STACK_LOCALS);
 
-  /* Virtual slot is valid only before vregs are instantiated.  */
-  gcc_assert ((n == SLOT_VIRTUAL) == !virtuals_instantiated);
-
   for (s = ix86_stack_locals; s; s = s->next)
     if (s->mode == mode && s->n == n)
       return validize_mem (copy_rtx (s->rtl));
@@ -23353,6 +23349,16 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n)
   ix86_stack_locals = s;
   return validize_mem (s->rtl);
 }
+
+static void
+ix86_instantiate_decls (void)
+{
+  struct stack_local_entry *s;
+
+  for (s = ix86_stack_locals; s; s = s->next)
+    if (s->rtl != NULL_RTX)
+      instantiate_decl_rtl (s->rtl);
+}
 \f
 /* Calculate the length of the memory address in the instruction encoding.
    Includes addr32 prefix, does not include the one-byte modrm, opcode,
@@ -29401,13 +29407,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
 
     case IX86_BUILTIN_LDMXCSR:
       op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
-      target = assign_386_stack_local (SImode, SLOT_VIRTUAL);
+      target = assign_386_stack_local (SImode, SLOT_TEMP);
       emit_move_insn (target, op0);
       emit_insn (gen_sse_ldmxcsr (target));
       return 0;
 
     case IX86_BUILTIN_STMXCSR:
-      target = assign_386_stack_local (SImode, SLOT_VIRTUAL);
+      target = assign_386_stack_local (SImode, SLOT_TEMP);
       emit_insn (gen_sse_stmxcsr (target));
       return copy_to_mode_reg (SImode, target);
 
@@ -38906,6 +38912,9 @@ ix86_autovectorize_vector_sizes (void)
 #undef TARGET_PROMOTE_FUNCTION_MODE
 #define TARGET_PROMOTE_FUNCTION_MODE ix86_promote_function_mode
 
+#undef TARGET_INSTANTIATE_DECLS
+#define TARGET_INSTANTIATE_DECLS ix86_instantiate_decls
+
 #undef TARGET_SECONDARY_RELOAD
 #define TARGET_SECONDARY_RELOAD ix86_secondary_reload
 
index 3a49803..80d19f1 100644 (file)
@@ -2113,8 +2113,7 @@ enum ix86_entity
 
 enum ix86_stack_slot
 {
-  SLOT_VIRTUAL = 0,
-  SLOT_TEMP,
+  SLOT_TEMP = 0,
   SLOT_CW_STORED,
   SLOT_CW_TRUNC,
   SLOT_CW_FLOOR,
index f1b53a0..affc5dd 100644 (file)
     ;
   else
     {
-      enum ix86_stack_slot slot = (virtuals_instantiated
-                                  ? SLOT_TEMP
-                                  : SLOT_VIRTUAL);
-      rtx temp = assign_386_stack_local (SFmode, slot);
+      rtx temp = assign_386_stack_local (SFmode, SLOT_TEMP);
       emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp));
       DONE;
     }
       DONE;
     }
   else
-    {
-      enum ix86_stack_slot slot = (virtuals_instantiated
-                                  ? SLOT_TEMP
-                                  : SLOT_VIRTUAL);
-      operands[2] = assign_386_stack_local (<MODE>mode, slot);
-    }
+    operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
 })
 
 (define_insn "*truncxfsf2_mixed"
       DONE;
     }
   else
-    {
-      enum ix86_stack_slot slot = (virtuals_instantiated
-                                  ? SLOT_TEMP
-                                  : SLOT_VIRTUAL);
-      operands[2] = assign_386_stack_local (DImode, slot);
-    }
+    operands[2] = assign_386_stack_local (DImode, SLOT_TEMP);
 })
 
 (define_expand "floatunsdisf2"
     emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, operands[1]));
   else
     {
-      enum ix86_stack_slot slot = (virtuals_instantiated
-                                  ? SLOT_TEMP
-                                  : SLOT_VIRTUAL);
-      rtx temp = assign_386_stack_local (<MODE>mode, slot);
+      rtx temp = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
 
       emit_move_insn (temp, operands[1]);
       emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, temp));
index 0621d61..e1600de 100644 (file)
    (set_attr "mode" "<sseinsnmode>")])
 
 (define_insn "<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:V48_AVX2 0 "memory_operand" "=m")
+  [(set (match_operand:V48_AVX2 0 "memory_operand" "+m")
        (unspec:V48_AVX2
          [(match_operand:<sseintvecmode> 1 "register_operand" "x")
           (match_operand:V48_AVX2 2 "register_operand" "x")
index ddff1e6..a58a1b9 100644 (file)
   if (<MODE>mode == DImode && !TARGET_64BIT)
     emit_insn (gen_atomic_loaddi_fpu
               (operands[0], operands[1],
-               assign_386_stack_local (DImode,
-                                       (virtuals_instantiated
-                                        ? SLOT_TEMP : SLOT_VIRTUAL))));
+               assign_386_stack_local (DImode, SLOT_TEMP)));
   else
     emit_move_insn (operands[0], operands[1]);
   DONE;
         out to be significantly larger than this plus a barrier.  */
       emit_insn (gen_atomic_storedi_fpu
                 (operands[0], operands[1],
-                 assign_386_stack_local (DImode,
-                                         (virtuals_instantiated
-                                          ? SLOT_TEMP : SLOT_VIRTUAL))));
+                 assign_386_stack_local (DImode, SLOT_TEMP)));
     }
   else
     {