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.
Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
Uros.
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
index 36011cc6b35..0de0e842731 100644
--- a/gcc/config/i386/i386-expand.cc
+++ b/gcc/config/i386/i386-expand.cc
@@ -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,
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 2dcd8803a08..51934400951 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -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,
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index e4d1c56ea54..fb6aaa81505 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -6282,7 +6282,7 @@ (define_expand "floatunssi<mode>2"
{
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)
diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md
index f2b3ba0aa7a..f03d418c369 100644
--- a/gcc/config/i386/sync.md
+++ b/gcc/config/i386/sync.md
@@ -170,7 +170,7 @@ (define_expand "atomic_load<mode>"
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];
@@ -251,7 +251,7 @@ (define_expand "atomic_store<mode>"
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
{