@@ -4903,7 +4903,7 @@ riscv_first_stack_step (struct riscv_frame_info *frame)
return frame_total_constant_size;
HOST_WIDE_INT min_first_step =
- RISCV_STACK_ALIGN ((frame->total_size - frame->fp_sp_offset).to_constant());
+ RISCV_STACK_ALIGN ((frame->total_size - frame->frame_pointer_offset).to_constant());
HOST_WIDE_INT max_first_step = IMM_REACH / 2 - PREFERRED_STACK_BOUNDARY / 8;
HOST_WIDE_INT min_second_step = frame_total_constant_size - max_first_step;
gcc_assert (min_first_step <= max_first_step);
@@ -16,4 +16,4 @@ foo (void)
regradless of the REG_ALLOC_ORDER.
In theory, t2 should not used in such small program if regrename
not executed incorrectly, because t0-a2 should be enough. */
-/* { dg-final { scan-assembler-not "t2" } } */
+/* { dg-final { scan-assembler-not {\t[a-zA-Z0-9]+\t.*t2} } } */
@@ -21,9 +21,8 @@ void fn3 (char*);
** slli\tt1,t0,1
** add\tsp,sp,t1
** li\tt0,8192
-** addi\tt0,t0,-208
+** addi\tt0,t0,-192
** add\tsp,sp,t0
-** addi\tsp,sp,16
** tail\t__riscv_restore_2
*/
int stack_save_restore_2 (float a1, float a2, float a3, float a4,
new file mode 100644
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32imafc -mabi=ilp32f" } */
+char my_getchar();
+float getf();
+
+float foo()
+{
+ char volatile array[3120];
+ float volatile farray[3120];
+ float sum = 0;
+ float f1 = getf();
+ float f2 = getf();
+ float f3 = getf();
+ float f4 = getf();
+
+ for (int i = 0; i < 3120; i++)
+ {
+ array[i] = my_getchar();
+ farray[i] = my_getchar() * 1.2;
+ sum += array[i] + farray[i] + f1 + f2 + f3 + f4;
+ }
+
+ return sum;
+}
+
+/* { dg-final { scan-assembler-not {,-[0-9]+\(sp\)} } } */