]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
-mno-long-calls for arm/headmerge tests
authorAlexandre Oliva <oliva@adacore.com>
Fri, 1 Jan 2021 00:38:23 +0000 (21:38 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Fri, 1 Jan 2021 04:39:49 +0000 (01:39 -0300)
The headmerge tests pass a constant to conditional calls, so that the
same constant is always passed to a function, though it's a different
function depending on which path is taken.

The test checks that the constant appears only once in the assembly
output, as a means to verify that the insns setting up the argument
are unified: they appear as separate insns up to jump2, where
crossjump identifies a common prefix to all conditional paths and
unifies them.

Alas, with -mlong-calls, that we enable in our arm-vxworks
configurations, the argument register is loaded after loading the
callee address into another register.  Since each path calls a
different function, there's no common initial code sequence for
crossjump to unify, and the argument register set up remains separate,
so the test fails.

Though it would surely be desirable for the compiler to perform the
unification of the argument register setting up, this patch merely
avoids the effects of -mlong-calls, with an explicit -mno-long-calls.

for  gcc/testsuite/ChangeLog

* gcc.target/arm/headmerge-1.c: Add -mno-long-calls.
* gcc.target/arm/headmerge-2.c: Likewise.

gcc/testsuite/gcc.target/arm/headmerge-1.c
gcc/testsuite/gcc.target/arm/headmerge-2.c

index 218c6a21ebd27bc373a7908f0a5333c3cbc79291..319ccd254626de991d9a5cbc620432519971e970 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile }  */
-/* { dg-options "-O2" }  */
+/* { dg-options "-O2 -mno-long-calls" }  */
 /* { dg-final { scan-assembler-times "#120" 1 } } */
 
 extern void foo1 (int);
index 17d8e9365c52e1788874e4287ab20cb4bac8f350..a015eb0f5690592aef87af054044ed1a6dfb5f43 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile }  */
-/* { dg-options "-O2" }  */
+/* { dg-options "-O2 -mno-long-calls" }  */
 /* { dg-final { scan-assembler-times "120\n" 1 } } */
 
 extern void foo1 (int);