[all-commits] [llvm/llvm-project] b52029: [NFC][SimplifyCFG] fold-branch-to-common-dest: add...
Roman Lebedev via All-commits
all-commits at lists.llvm.org
Tue Dec 1 04:15:51 PST 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: b52029224c183d33c5a3bd9b14f3375e25f15fa5
https://github.com/llvm/llvm-project/commit/b52029224c183d33c5a3bd9b14f3375e25f15fa5
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll
Log Message:
-----------
[NFC][SimplifyCFG] fold-branch-to-common-dest: add tests with cond of br not being the last op
Commit: 15f8060f6f2388d503fcd400e1226c69554c1924
https://github.com/llvm/llvm-project/commit/15f8060f6f2388d503fcd400e1226c69554c1924
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/lib/Transforms/Utils/SimplifyCFG.cpp
M llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll
Log Message:
-----------
[SimplifyCFG] FoldBranchToCommonDest: don't require that cmp of br is last instruction
There is no correctness need for that, and since we allow live-out
uses, this could theoretically happen, because currently nothing
will move the cond to right before the branch in those tests.
But regardless, lifting that restriction even makes the transform
easier to understand.
This makes the transform happen in 81 more cases (+0.55%)
)
Commit: 0e11f3ade5eaa5ef7fe87014edd3abc708807aba
https://github.com/llvm/llvm-project/commit/0e11f3ade5eaa5ef7fe87014edd3abc708807aba
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/test/Transforms/InstCombine/sext.ll
Log Message:
-----------
[NFC][InstCombine] Autogenerate sext.ll test checklines
Commit: 799626b1117c4cecba7c2c67c1ed7c5f1856fb24
https://github.com/llvm/llvm-project/commit/799626b1117c4cecba7c2c67c1ed7c5f1856fb24
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/test/Transforms/InstCombine/sext.ll
Log Message:
-----------
[NFC][InstCombine] Add PR48343 miscompiled testcase
Commit: 8e29e20e0d84719e1ad24f28be458db1d9c858db
https://github.com/llvm/llvm-project/commit/8e29e20e0d84719e1ad24f28be458db1d9c858db
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
M llvm/test/Transforms/InstCombine/sext.ll
Log Message:
-----------
[InstCombine] Evaluate new shift amount for sext(ashr(shl(trunc()))) fold in wide type (PR48343)
It is not correct to compute that new shift amount in it's narrow type
and only then extend it into the wide type:
----------------------------------------
Optimization: PR48343 good
Precondition: (width(%X) == width(%r))
%o0 = trunc %X
%o1 = shl %o0, %Y
%o2 = ashr %o1, %Y
%r = sext %o2
=>
%n0 = sext %Y
%n1 = sub width(%o0), %n0
%n2 = sub width(%X), %n1
%n3 = shl %X, %n2
%r = ashr %n3, %n2
Done: 2016
Optimization is correct!
----------------------------------------
Optimization: PR48343 bad
Precondition: (width(%X) == width(%r))
%o0 = trunc %X
%o1 = shl %o0, %Y
%o2 = ashr %o1, %Y
%r = sext %o2
=>
%n0 = sub width(%o0), %Y
%n1 = sub width(%X), %n0
%n2 = sext %n1
%n3 = shl %X, %n2
%r = ashr %n3, %n2
Done: 1
ERROR: Domain of definedness of Target is smaller than Source's for i9 %r
Example:
%X i9 = 0x000 (0)
%Y i4 = 0x3 (3)
%o0 i4 = 0x0 (0)
%o1 i4 = 0x0 (0)
%o2 i4 = 0x0 (0)
%n0 i4 = 0x1 (1)
%n1 i4 = 0x8 (8, -8)
%n2 i9 = 0x1F8 (504, -8)
%n3 i9 = 0x000 (0)
Source value: 0x000 (0)
Target value: undef
I.e. we should be computing it in the wide type from the beginning.
Fixes https://bugs.llvm.org/show_bug.cgi?id=48343
Commit: 075faa8d40b113d19c3643b3bf2cc74f146612b0
https://github.com/llvm/llvm-project/commit/075faa8d40b113d19c3643b3bf2cc74f146612b0
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/test/Transforms/InstCombine/sext.ll
Log Message:
-----------
[NFC][InstCombine] Improve vector undef test coverage for sext(ashr(shl(trunc()))) fold
Commit: aa1aa135097ecfab6d9917a435142030eff0a226
https://github.com/llvm/llvm-project/commit/aa1aa135097ecfab6d9917a435142030eff0a226
Author: Roman Lebedev <lebedev.ri at gmail.com>
Date: 2020-12-01 (Tue, 01 Dec 2020)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
M llvm/test/Transforms/InstCombine/sext.ll
Log Message:
-----------
[InstCombine] Improve vector undef handling for sext(ashr(shl(trunc()))) fold
If the shift amount was undef for some lane, the shift amount in opposite
shift is irrelevant for that lane, and the new shift amount for that lane
can be undef.
Compare: https://github.com/llvm/llvm-project/compare/6dbd0d36a172...aa1aa135097e
More information about the All-commits
mailing list