diff mbox series

[PR102501] Adjust jump threading testcases for ppc64* and others.

Message ID 20210928160903.952916-1-aldyh@redhat.com
State New
Headers show
Series [PR102501] Adjust jump threading testcases for ppc64* and others. | expand

Commit Message

Aldy Hernandez Sept. 28, 2021, 4:09 p.m. UTC
I really don't know what to do here.  This is a bit of whack-o-mole.
The IL is sufficiently different for various architectures that any
tweak can cause the number of jump threads to vary.

For the pr7745-2.c testcase, we have less threading candidates because 2
of them now cross loop boundaries.  Interestingly, this test matches
"Jumps threaded", not threads registered, so the block copier can
drop threads at copying time adding further confusion.

For example, we can register N threads, but the old copier can cancel
N-M threads while updating the CFG for a variety of different reasons
(removed edges, threading through loop exits, etc).  This makes the
"Registering jump threads" not to match the total number of threads this
test checks for with "Jumps threaded".

The pr66752-3.c test OTOH, is just a matter of thread4 eliminating the
"if".  I had erroneously thought it would always be eliminated by
thread3, but we really don't care where it gets cleaned up.  All we know
is that DCE can't depend on the early threaders doing this work, because
it may cross loop boundaries.  I've chosen thread4 arbitrarily, but we
could just as easily pick the ".optimized" dump.

Sorry, I'm really at my wits end here.  I don't see any clean path
forward, except rewrite these tests as gimple IL.  They're close to useless
as they sit.

OK?

gcc/testsuite/ChangeLog:

	PR testsuite/102501
	* gcc.dg/tree-ssa/pr66752-3.c: Adjust.
	* gcc.dg/tree-ssa/pr77445-2.c: Adjust.
---
 gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c | 4 ++--
 gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Jeff Law Sept. 28, 2021, 4:36 p.m. UTC | #1
On 9/28/2021 10:09 AM, Aldy Hernandez wrote:
> I really don't know what to do here.  This is a bit of whack-o-mole.
> The IL is sufficiently different for various architectures that any
> tweak can cause the number of jump threads to vary.
>
> For the pr7745-2.c testcase, we have less threading candidates because 2
> of them now cross loop boundaries.  Interestingly, this test matches
> "Jumps threaded", not threads registered, so the block copier can
> drop threads at copying time adding further confusion.
>
> For example, we can register N threads, but the old copier can cancel
> N-M threads while updating the CFG for a variety of different reasons
> (removed edges, threading through loop exits, etc).  This makes the
> "Registering jump threads" not to match the total number of threads this
> test checks for with "Jumps threaded".
>
> The pr66752-3.c test OTOH, is just a matter of thread4 eliminating the
> "if".  I had erroneously thought it would always be eliminated by
> thread3, but we really don't care where it gets cleaned up.  All we know
> is that DCE can't depend on the early threaders doing this work, because
> it may cross loop boundaries.  I've chosen thread4 arbitrarily, but we
> could just as easily pick the ".optimized" dump.
>
> Sorry, I'm really at my wits end here.  I don't see any clean path
> forward, except rewrite these tests as gimple IL.  They're close to useless
> as they sit.
>
> OK?
>
> gcc/testsuite/ChangeLog:
>
> 	PR testsuite/102501
> 	* gcc.dg/tree-ssa/pr66752-3.c: Adjust.
> 	* gcc.dg/tree-ssa/pr77445-2.c: Adjust.
Note these were two of the consistent failures on other targets as well.
Jeff
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c b/gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c
index 922a331b217..ba7025ae33b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr66752-3.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-thread1-details -fdump-tree-thread3" } */
+/* { dg-options "-O2 -fdump-tree-thread1-details -fdump-tree-thread4" } */
 
 extern int status, pt;
 extern int count;
@@ -43,4 +43,4 @@  foo (int N, int c, int b, int *a)
    run after loop optimizations , can successfully eliminate the
    references to FLAG.  Verify that ther are no references by the late
    threading passes.  */
-/* { dg-final { scan-tree-dump-not "if .flag" "thread3"} } */
+/* { dg-final { scan-tree-dump-not "if .flag" "thread4"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
index 01a0f1f197d..18f7aab2be7 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
@@ -123,7 +123,7 @@  enum STATES FMS( u8 **in , u32 *transitions) {
    aarch64 has the highest CASE_VALUES_THRESHOLD in GCC.  It's high enough
    to change decisions in switch expansion which in turn can expose new
    jump threading opportunities.  Skip the later tests on aarch64.  */
-/* { dg-final { scan-tree-dump "Jumps threaded: 9" "thread1" } } */
+/* { dg-final { scan-tree-dump "Jumps threaded: \[7-9\]" "thread1" } } */
 /* { dg-final { scan-tree-dump-times "Invalid sum" 1 "thread1" } } */
 /* { dg-final { scan-tree-dump-not "optimizing for size" "thread1" } } */
 /* { dg-final { scan-tree-dump-not "optimizing for size" "thread2" } } */