On Fri, 8 Nov 2024 at 19:20, Torbjörn SVENSSON
<[email protected]> 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 <[email protected]>
> ---
> 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
>