Message ID | 20210928160903.952916-1-aldyh@redhat.com |
---|---|
State | New |
Headers | show |
Series | [PR102501] Adjust jump threading testcases for ppc64* and others. | expand |
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 --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" } } */