aarch64: Fix aapcs64 testsuite failures
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 24 Nov 2020 15:01:45 +0000 (15:01 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Tue, 24 Nov 2020 15:01:45 +0000 (15:01 +0000)
commit489be3119e6cd092bf7f30880a5d641f0bf0672f
treee6450b53240437f1997d2e4bb9f406c0406ac9ac
parent7e0078f8643f9204777152ed0f915b52072a05c8
aarch64: Fix aapcs64 testsuite failures

Various aapcs64 tests were failing at -O1 and above because
the assignments to testfunc_ptr were being deleted as dead.
That in turn happened because FUNC_VAL_CHECK hid the tail call
to myfunc using an LR asm trick:

    asm volatile ("mov %0, x30" : "=r" (saved_return_address));
    asm volatile ("mov x30, %0" : : "r" ((unsigned long long) myfunc));

and so the compiler couldn't see any calls that might read
testfunc_ptr.

That in itself could be fixed by adding a memory clobber to the
second asm above, forcing the compiler to keep both the testfunc_ptr
and the saved_return_address assignments.  But since this is an ABI
test, it seems better to make sure that we don't do any IPA at all.
The fact that doing IPA caused a problem was kind-of helpful and
so it might be better to avoid making the test “work” in the
presence of IPA.

The patch therefore just replaced “noinline” with “noipa”.

gcc/testsuite/
* gcc.target/aarch64/aapcs64/abitest.h (FUNC_VAL_CHECK): Use
noipa rather than noinline.
* gcc.target/aarch64/aapcs64/abitest-2.h (FUNC_VAL_CHECK): Likewise.
gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-2.h
gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.h