gcc.dg/torture/pr112305.c contains an inner loop that executes
0x8000_0014 times and an outer loop that executes 5 times, giving about
10 billion total executions of the inner loop body. At -O2 and above we
are able to remove the inner loop, but at -O1 we keep a no-op loop:
dls lr, r3
.L3:
subs r3, r3, #1
le lr, .L3
and at -O0 we of course don't optimise.
This can lead to long execution times on simulators, possibly
triggering a timeout.
---
Tested on arm-eabi, where the problem was originally seen, and where we
now skip as expected. Also tested on native aarch64-linux-gnu, where we
continue to execute all variations. OK for trunk and backports (so far
to GCC 14)?
Richard
gcc/testsuite
* gcc.dg/torture/pr112305.c: Skip at -O0 and -O1 for simulators.
---
gcc/testsuite/gcc.dg/torture/pr112305.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/gcc/testsuite/gcc.dg/torture/pr112305.c
b/gcc/testsuite/gcc.dg/torture/pr112305.c
index 9d363aaac9d..ea6e044529d 100644
--- a/gcc/testsuite/gcc.dg/torture/pr112305.c
+++ b/gcc/testsuite/gcc.dg/torture/pr112305.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target int32plus } */
+/* { dg-skip-if "long-running loop" { simulator } { "-O0" "-O1" } } */
int a;
void b()
--
2.25.1