Message ID | 20241108181753.2662923-1-torbjorn.svensson@foss.st.com |
---|---|
State | New |
Headers | show |
Series | testsuite: arm: Check that a far jump is used in thumb1-far-jump-2.c | expand |
On Fri, 8 Nov 2024 at 19:20, Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> wrote: > > Ok for trunk? > > -- > > With the changes in r15-1579-g792f97b44ff, the code used as "padding" in > the test case is optimized way. Prevent this optimization by forcing a > read of the volatile memory. > Also, validate that there is a far jump in the generated assembler. > > Without this patch, the generated assembler is reduced to: > f3: > cmp r0, #0 > beq .L1 > ldr r4, .L6 > .L1: > bx lr > .L7: > .align 2 > .L6: > .word g_0_1 > > With the patch, the generated assembler is: > f3: > push {lr} > cmp r0, #0 > bne .LCB7 > bl .L1 @far jump > .LCB7: > ldr r3, .L6 > ldr r3, [r3] > ... > ldr r3, .L9+976 > ldr r4, [r3] > b .L10 > .L11: > .align 2 > .L9: > .word g_0_3_7_5 > ... > .word g_0_1 > .L10: > .L1: > pop {pc} > > gcc/testsuite/ChangeLog: > > * gcc.target/arm/thumb1-far-jump-2.c: Force a read of volatile > memory in macro to avoid optimization. > > Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> > --- > gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c b/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c > index 78fcafaaf7d..1cf7a0a86e8 100644 > --- a/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c > +++ b/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c > @@ -10,7 +10,7 @@ void f3(int i) > { > #define GO(n) \ > extern volatile int g_##n; \ > - r4=(int)&g_##n; > + r4=(int)g_##n; > It really seems to me that this was a typo in the original submission: this volatile was probably here to prevent optimization and make sure we have a large function. But taking the address of a volatile variable does not have the intended effect, you need to actually access the variable. LGTM, but wait for Richard's approval. Thanks, Christophe > #define GO8(n) \ > GO(n##_0) \ > @@ -54,4 +54,5 @@ void f3(int i) > } > } > > -/* { dg-final { scan-assembler "push.*lr" } } */ > +/* { dg-final { scan-assembler "\tpush.*lr" } } */ > +/* { dg-final { scan-assembler "\tbl\t\\.L\[0-9\]+\t@far jump" } } */ > -- > 2.25.1 >
diff --git a/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c b/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c index 78fcafaaf7d..1cf7a0a86e8 100644 --- a/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c +++ b/gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c @@ -10,7 +10,7 @@ void f3(int i) { #define GO(n) \ extern volatile int g_##n; \ - r4=(int)&g_##n; + r4=(int)g_##n; #define GO8(n) \ GO(n##_0) \ @@ -54,4 +54,5 @@ void f3(int i) } } -/* { dg-final { scan-assembler "push.*lr" } } */ +/* { dg-final { scan-assembler "\tpush.*lr" } } */ +/* { dg-final { scan-assembler "\tbl\t\\.L\[0-9\]+\t@far jump" } } */
Ok for trunk? -- With the changes in r15-1579-g792f97b44ff, the code used as "padding" in the test case is optimized way. Prevent this optimization by forcing a read of the volatile memory. Also, validate that there is a far jump in the generated assembler. Without this patch, the generated assembler is reduced to: f3: cmp r0, #0 beq .L1 ldr r4, .L6 .L1: bx lr .L7: .align 2 .L6: .word g_0_1 With the patch, the generated assembler is: f3: push {lr} cmp r0, #0 bne .LCB7 bl .L1 @far jump .LCB7: ldr r3, .L6 ldr r3, [r3] ... ldr r3, .L9+976 ldr r4, [r3] b .L10 .L11: .align 2 .L9: .word g_0_3_7_5 ... .word g_0_1 .L10: .L1: pop {pc} gcc/testsuite/ChangeLog: * gcc.target/arm/thumb1-far-jump-2.c: Force a read of volatile memory in macro to avoid optimization. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> --- gcc/testsuite/gcc.target/arm/thumb1-far-jump-2.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)