]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Use assign_stack_temp instead of assign_386_stack_local with SLOT_TEMP
authorUros Bizjak <ubizjak@gmail.com>
Wed, 30 Oct 2024 07:17:15 +0000 (08:17 +0100)
committerUros Bizjak <ubizjak@gmail.com>
Wed, 30 Oct 2024 07:17:50 +0000 (08:17 +0100)
It is better to use assign_stack_temp instead of assign_386_stack_local
with SLOT_TEMP because assign_stack_temp also shares sub-space of stack
slots (e.g. HImode temp shares stack slot with SImode stack slot).

Use assign_386_stack_local only for special stack slots (SLOT_STV_TEMP that
can be nested inside other stack temp access, SLOT_FLOATxFDI_387 that has
relaxed alignment constraint) or slots that can't be shared (SLOT_CW_*).

The patch removes SLOT_TEMP. assign_stack_temp should be used instead.

gcc/ChangeLog:

* config/i386/i386.h (enum ix86_stack_slot): Remove SLOT_TEMP.
* config/i386/i386-expand.cc (ix86_expand_builtin)
<case IX86_BUILTIN_LDMXCSR>: Use assign_stack_temp instead of
assign_386_stack_local with SLOT_TEMP.
<case IX86_BUILTIN_LDMXCSR>: Ditto.
(ix86_expand_divmod_libfunc): Ditto.
* config/i386/i386.md (floatunssi<mode>2): Ditto.
* config/i386/sync.md (atomic_load<mode>): Ditto.
(atomic_store<mode>): Ditto.

gcc/config/i386/i386-expand.cc
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/i386/sync.md

index 36011cc6b355cd6b6bac3eb9c66d727415688287..0de0e84273146b0c3cea502dd3b1918d08d65f34 100644 (file)
@@ -13738,13 +13738,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
 
     case IX86_BUILTIN_LDMXCSR:
       op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
-      target = assign_386_stack_local (SImode, SLOT_TEMP);
+      target = assign_stack_temp (SImode, GET_MODE_SIZE (SImode));
       emit_move_insn (target, op0);
       emit_insn (gen_sse_ldmxcsr (target));
       return 0;
 
     case IX86_BUILTIN_STMXCSR:
-      target = assign_386_stack_local (SImode, SLOT_TEMP);
+      target = assign_stack_temp (SImode, GET_MODE_SIZE (SImode));
       emit_insn (gen_sse_stmxcsr (target));
       return copy_to_mode_reg (SImode, target);
 
@@ -25743,7 +25743,7 @@ ix86_expand_divmod_libfunc (rtx libfunc, machine_mode mode,
                            rtx op0, rtx op1,
                            rtx *quot_p, rtx *rem_p)
 {
-  rtx rem = assign_386_stack_local (mode, SLOT_TEMP);
+  rtx rem = assign_stack_temp (mode, GET_MODE_SIZE (mode));
 
   rtx quot = emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
                                      mode, op0, mode, op1, mode,
index 2dcd8803a08e1220461a67e857482232ac111239..51934400951f22a9b34fd166d3080b399a8acbe6 100644 (file)
@@ -2539,8 +2539,7 @@ enum ix86_fpcmp_strategy {
 
 enum ix86_stack_slot
 {
-  SLOT_TEMP = 0,
-  SLOT_CW_STORED,
+  SLOT_CW_STORED = 0,
   SLOT_CW_ROUNDEVEN,
   SLOT_CW_TRUNC,
   SLOT_CW_FLOOR,
index e4d1c56ea542320297ba1c6c91e79d327a8c54a9..fb6aaa815056049326d1658065684b44328e1664 100644 (file)
     {
       emit_insn (gen_floatunssi<mode>2_i387_with_xmm
                  (operands[0], operands[1],
-                  assign_386_stack_local (DImode, SLOT_TEMP)));
+                  assign_stack_temp (DImode, GET_MODE_SIZE (DImode))));
       DONE;
     }
   if (!TARGET_AVX512F)
index f2b3ba0aa7aa8df2d064a8c831701b67633df5fd..f03d418c36927f2d1ef5dfb3cc60dfa61938bdc2 100644 (file)
   if (<MODE>mode == DImode && !TARGET_64BIT)
     emit_insn (gen_atomic_loaddi_fpu
               (operands[0], operands[1],
-               assign_386_stack_local (DImode, SLOT_TEMP)));
+               assign_stack_temp (DImode, GET_MODE_SIZE (DImode))));
   else
     {
       rtx dst = operands[0];
         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, SLOT_TEMP)));
+                 assign_stack_temp (DImode, GET_MODE_SIZE (DImode))));
     }
   else
     {