On 8/25/23 15:36, Jeff Law wrote:
Spurred by Jivan's patch and a desire for cleaner testresults, I went
ahead and make the stack_save_restore tests independent of the precise
stack size by using a regexp.
Pushed to the trunk.
Jeff
Hi Jeff, A recent change that I'm still bisecting [1] caused
stack_save_restore_2.c to start failing.
Debug log:
Executing on host:
/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/build/build-gcc-linux-stage2/gcc/xgcc
-B/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/build/build-gcc-linux-stage2/gcc/
/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/gcc/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
-march=rv32gcv -mabi=ilp32d -mcmodel=medlow -fdiagnostics-plain-output
-O0 -march=rv32imafc -mabi=ilp32f -msave-restore -O2 -fno-schedule-insns
-fno-schedule-insns2 -fno-unroll-loops -fno-peel-loops -fno-lto -S -o
stack_save_restore_2.s (timeout = 600)
spawn -ignore SIGHUP
/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/build/build-gcc-linux-stage2/gcc/xgcc
-B/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/build/build-gcc-linux-stage2/gcc/
/github/patrick-postcommit-runner-1/_work/gcc-postcommit-ci/gcc-postcommit-ci/riscv-gnu-toolchain/gcc/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
-march=rv32gcv -mabi=ilp32d -mcmodel=medlow -fdiagnostics-plain-output -O0
-march=rv32imafc -mabi=ilp32f -msave-restore -O2 -fno-schedule-insns
-fno-schedule-insns2 -fno-unroll-loops -fno-peel-loops -fno-lto -S -o
stack_save_restore_2.s
PASS: gcc.target/riscv/stack_save_restore_2.c -O0 (test for excess errors)
body: \tcall t0,__riscv_save_(3|4)
\taddi sp,sp,-[0-9]+
.*\tli t0,-[0-9]+
\tadd sp,sp,t0
.*\tli t0,[0-9]+
\tadd sp,sp,t0
.*\taddi sp,sp,[0-9]+
\ttail __riscv_restore_(3|4)
against: call t0,__riscv_save_5
addi sp,sp,-2016
fsw fs0,2012(sp)
fsw fs1,2008(sp)
fsw fs2,2004(sp)
fsw fs3,2000(sp)
fsw fs4,1996(sp)
li t0,-12288
add sp,sp,t0
call getf
fmv.s fs1,fa0
call getf
fmv.s fs4,fa0
call getf
fmv.s fs3,fa0
call getf
fmv.s fs2,fa0
li s0,0
fmv.s.x fs0,zero
lui a5,%hi(.LC0)
lw s2,%lo(.LC0)(a5)
lw s3,%lo(.LC0+4)(a5)
addi s4,sp,1984
li s1,4096
addi s1,s1,-528
call my_getchar
call __floatsidf
mv a2,s2
mv a3,s3
call __muldf3
call __truncdfsf2
slli a5,s0,2
add a5,s4,a5
fsw fa0,-1984(a5)
flw fa5,-1984(a5)
fadd.s fs0,fs0,fa5
addi s0,s0,1
bne s0,s1,.L2
fadd.s fa5,fs1,fs0
fadd.s fa5,fa5,fs4
fadd.s fa5,fa5,fs3
fadd.s fa5,fa5,fs2
fcvt.w.s a0,fa5,rtz
li t0,12288
add sp,sp,t0
flw fs0,2012(sp)
flw fs1,2008(sp)
flw fs2,2004(sp)
flw fs3,2000(sp)
flw fs4,1996(sp)
addi sp,sp,2016
tail __riscv_restore_5
FAIL: gcc.target/riscv/stack_save_restore_2.c -O0 check-function-bodies bar
It looks like the issue is that your regex matches
__riscv_save_(3|4) where now gcc emits __riscv_restore_5.
Would it be OK to update the regex to also accept 5 (& are we going to
bump into this again)?
diff --git a/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
b/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
index 4c549cb11ae..bc95736cf8e 100644
--- a/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
+++ b/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
@@ -7,7 +7,7 @@ float getf();
/*
** bar:
-** call t0,__riscv_save_(3|4)
+** call t0,__riscv_save_(3|4|5)
** addi sp,sp,-[0-9]+
** ...
** li t0,-[0-9]+
@@ -17,7 +17,7 @@ float getf();
** add sp,sp,t0
** ...
** addi sp,sp,[0-9]+
-** tail __riscv_restore_(3|4)
+** tail __riscv_restore_(3|4|5)
*/
int bar()
{
If we're going to run into this again, it might make sense to allow a
wider range of numbers (up to 9):
diff --git a/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
b/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
index 4c549cb11ae..1d5b950130e 100644
--- a/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
+++ b/gcc/testsuite/gcc.target/riscv/stack_save_restore_2.c
@@ -7,7 +7,7 @@ float getf();
/*
** bar:
-** call t0,__riscv_save_(3|4)
+** call t0,__riscv_save_([3-9])
** addi sp,sp,-[0-9]+
** ...
** li t0,-[0-9]+
@@ -17,7 +17,7 @@ float getf();
** add sp,sp,t0
** ...
** addi sp,sp,[0-9]+
-** tail __riscv_restore_(3|4)
+** tail __riscv_restore_([3-9])
*/
int bar()
{
Patrick
[1] The commit is in this range:
https://github.com/gcc-mirror/gcc/compare/a4ca8691333344cecc595d1af8b21e51f588e2f2...4d49685d671e4e604b2b873ada65aaac89348794