pre-RA mischeduler enabled + tests updates
Details
Diff Detail
Event Timeline
Hmm. Some of those changes look like regressions, we should try to at least understand why this happens. Maybe there's a simple way to fix those again.
test/CodeGen/SystemZ/alloca-01.ll | ||
---|---|---|
37 | This causes an extra copy later, right? We need to get the value into %r3 since it's used as function argument. Can we find out why this extra copy happens and possibly avoid it? | |
test/CodeGen/SystemZ/backchain.ll | ||
115 | I don't think we need to check all this detail. I looks like if you just change the original test to use CHECK-DAG instead of CHECK, in particular in those four lines: ; CHECK: lgr [[SAVESP:%r[0-9]+]], %r15 ; CHECK: lg [[BC:%r[0-9]+]], 0(%r15) ; CHECK: lgr [[NEWSP:%r[0-9]+]], %r15 ; CHECK: lgr %r15, [[NEWSP]] everything should pass as-is. | |
test/CodeGen/SystemZ/call-03.ll | ||
72 | Another extra copy here ... can we avoid this? | |
test/CodeGen/SystemZ/fp-cmp-04.ll | ||
213 | Is there a reason why this cannot be CHECK-NEXT any more? | |
309 | Another extra copy. | |
333 | And again. | |
test/CodeGen/SystemZ/fp-conv-02.ll | ||
74 | Can we find out why this no longer happens? | |
test/CodeGen/SystemZ/fp-copysign-02.ll | ||
39–41 | Using a second variable is fine, of course, but hard-coding it to %v0 doesn't seem to make much sense. Why don't you just use [[REG2:%v[0-9]+]] ? | |
57 | Likewise. | |
test/CodeGen/SystemZ/int-cmp-44.ll | ||
736–740 | Again, it would be good to understand why this isn't matched any more. |
Tests further updated per review
test/CodeGen/SystemZ/alloca-01.ll | ||
---|---|---|
37 | Seems to relate mostly to the sourc-order isel sched handling the call PSEUDOs. | |
test/CodeGen/SystemZ/backchain.ll | ||
115 | I actually had to do CHECK-DAG all the way down to the last STG... | |
test/CodeGen/SystemZ/call-03.ll | ||
72 | regalloc fails to see that %r1 is actually a better choice - perhaps %r1 could be hinted. | |
test/CodeGen/SystemZ/fp-cmp-04.ll | ||
213 | Those instructions swapped places, but it should be CHECK-DAG. | |
309 | SystemZElimCompare does no longer catch this. | |
333 | same as for f15 | |
test/CodeGen/SystemZ/fp-conv-02.ll | ||
74 | This relates to spill weight and foldable operands. I have a patch IP on this. | |
test/CodeGen/SystemZ/fp-copysign-02.ll | ||
39–41 | Sure (I guess I was happy just capturing the fact that the three instructions used the same reg) | |
test/CodeGen/SystemZ/int-cmp-44.ll | ||
736–740 | SystemZElimCompare can no longer transform, since the COPY is put after the compare with the mischeduler enabled. |
The test in fp-conv-02.ll that checked for LDEB has been rewritten to a .mir test with fp-conv-17.mir.
The following test changes have been reverted since they are no longer failing due to the improved handling in optimizeCompareZer() as of r313877:
fp-cmp-04.ll (f11 slightly updated still with -DAG estensions)
int-cmp-44.ll
Comments have been added to alloca-01.ll and call-03.ll making note of the extra copys.
Have you looked into what's going on with the vec-cmp-cmp-logic-select.ll and vec-cmpsel.ll test cases? I see several of the tests now adding spill/reload code when they didn't before -- ideally this shouldn't happen if the misched does proper register pressure analysis ...
(As a general note, I'm not sure these fully auto-generated tests are very useful -- the changes from regenerating them are not very readable. In the future, it may be preferable to write explicit tests using -DAG and regular expressions to make the test survive scheduling / register allocation changes without rewriting it all the time.)
vec-cmpsel.ll and vec-cmp-cmp-logic-select.ll reworked.
"CHECK" in comment in alloca-01.ll removed.
Commited as trunk@315063
At final rebase, the following trivial test updates were also made:
diff --git a/test/CodeGen/SystemZ/cmpxchg-01.ll b/test/CodeGen/SystemZ/cmpxchg-01.ll index 9fa082c..b3084ad 100644 --- a/test/CodeGen/SystemZ/cmpxchg-01.ll +++ b/test/CodeGen/SystemZ/cmpxchg-01.ll @@ -60,8 +60,8 @@ define i8 @f2(i8 *%src) { define i32 @f3(i8 %dummy, i8 *%src, i8 %cmp, i8 %swap) { ; CHECK-MAIN-LABEL: f3: ; CHECK-MAIN: risbg [[RISBG:%r[1-9]+]], %r3, 0, 189, 0{{$}} -; CHECK-MAIN: sll %r3, 3 -; CHECK-MAIN: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-MAIN-DAG: sll %r3, 3 +; CHECK-MAIN-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll [[TMP:%r[0-9]+]], [[OLD]], 8(%r3) ; CHECK-MAIN: risbg %r4, [[TMP]], 32, 55, 0 diff --git a/test/CodeGen/SystemZ/cmpxchg-02.ll b/test/CodeGen/SystemZ/cmpxchg-02.ll index 8330d09..e2ca7f4 100644 --- a/test/CodeGen/SystemZ/cmpxchg-02.ll +++ b/test/CodeGen/SystemZ/cmpxchg-02.ll @@ -60,8 +60,8 @@ define i16 @f2(i16 *%src) { define i32 @f3(i16 %dummy, i16 *%src, i16 %cmp, i16 %swap) { ; CHECK-MAIN-LABEL: f3: ; CHECK-MAIN: risbg [[RISBG:%r[1-9]+]], %r3, 0, 189, 0{{$}} -; CHECK-MAIN: sll %r3, 3 -; CHECK-MAIN: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-MAIN-DAG: sll %r3, 3 +; CHECK-MAIN-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll [[TMP:%r[0-9]+]], [[OLD]], 16(%r3) ; CHECK-MAIN: risbg %r4, [[TMP]], 32, 47, 0
This causes an extra copy later, right? We need to get the value into %r3 since it's used as function argument.
Can we find out why this extra copy happens and possibly avoid it?