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

Reply via email to