|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6 |
|
| #
04b944e2 |
| 10-Jun-2022 |
Nikita Popov <[email protected]> |
[InstSimplify] Convert tests to opaque pointers (NFC)
The only interesting test change is in @PR31262, where the following fold is now performed, while it previously was not: https://alive2.llvm.org
[InstSimplify] Convert tests to opaque pointers (NFC)
The only interesting test change is in @PR31262, where the following fold is now performed, while it previously was not: https://alive2.llvm.org/ce/z/a5Qmr6
llvm/test/Transforms/InstSimplify/ConstProp/gep.ll has not been updated, because there is a tradeoff between folding and inrange preservation there that we may want to discuss.
Updates have been performed using: https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34
show more ...
|
|
Revision tags: llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1 |
|
| #
b280ee1d |
| 04-Feb-2022 |
Bjorn Pettersson <[email protected]> |
[test] Use -passes=instsimplify instead of -instsimplify in a number of tests. NFC
Another step moving away from the deprecated syntax of specifying pass pipeline in opt.
Differential Revision: htt
[test] Use -passes=instsimplify instead of -instsimplify in a number of tests. NFC
Another step moving away from the deprecated syntax of specifying pass pipeline in opt.
Differential Revision: https://reviews.llvm.org/D119080
show more ...
|
|
Revision tags: llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3 |
|
| #
5af8bacc |
| 21-Jun-2021 |
Juneyoung Lee <[email protected]> |
[InstSimplify] Add more poison folding optimizations
This adds more poison folding optimizations to InstSimplify.
Since all binary operators propagate poison, these are fine.
Also, the preconditio
[InstSimplify] Add more poison folding optimizations
This adds more poison folding optimizations to InstSimplify.
Since all binary operators propagate poison, these are fine.
Also, the precondition of `select cond, undef, x` -> `x` is relaxed to allow the case when `x` is undef.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D104661
show more ...
|
|
Revision tags: llvmorg-12.0.1-rc2 |
|
| #
ca7eaa0a |
| 25-May-2021 |
Sanjay Patel <[email protected]> |
[InstSimplify] allow undef element match in vector select condition value
The semantics of select with undefined/poison condition are not explicitly stated in the LangRef, but this matches comments
[InstSimplify] allow undef element match in vector select condition value
The semantics of select with undefined/poison condition are not explicitly stated in the LangRef, but this matches comments in the code and Alive2 appears to concur: https://alive2.llvm.org/ce/z/KXytmd
We can find this pattern after demanded elements transforms.
As noted in D101191, fuzzers are finding infinite loops because we may not account for this pattern in other passes.
show more ...
|
|
Revision tags: llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5 |
|
| #
e2a0f512 |
| 05-Apr-2021 |
Sanjay Patel <[email protected]> |
[InstSimplify] fix potential miscompile in select value equivalence
This is the sibling fix to c590a9880d7a - as there, we can't subsitute a vector value the equality compare replacement that we are
[InstSimplify] fix potential miscompile in select value equivalence
This is the sibling fix to c590a9880d7a - as there, we can't subsitute a vector value the equality compare replacement that we are trying requires that the comparison is true for the entire value. Vector select can be partly true/false.
show more ...
|
| #
78e5cf66 |
| 05-Apr-2021 |
Sanjay Patel <[email protected]> |
[InstSimplify] add test for vector select with operand replacement; NFC
We need a sibling fix to c590a9880d7a ( https://llvm.org/PR49832 ) to avoid miscompiling.
|
|
Revision tags: llvmorg-12.0.0-rc4 |
|
| #
4c38c35c |
| 23-Mar-2021 |
Craig Topper <[email protected]> |
[ValueTracking] Teach canCreateUndefOrPoison that ctpop does not create undef or poison.
This select of ctpop with 0 pattern can get left behind after loop idiom recognize converts a loop to ctpop.
[ValueTracking] Teach canCreateUndefOrPoison that ctpop does not create undef or poison.
This select of ctpop with 0 pattern can get left behind after loop idiom recognize converts a loop to ctpop. LLVM 10 was able to optimize this, but LLVM 11 and later is not. The difference seems to be that some select transforms are now limited based on canCreateUndefOrPoison.
Teaching canCreateUndefOrPoison about ctpop restores the LLVM 10 codegen.
Differential Revision: https://reviews.llvm.org/D99207
show more ...
|
| #
ece1403a |
| 21-Mar-2021 |
Nikita Popov <[email protected]> |
[InstSimplify] Add additional select operand replacement tests (NFC)
This tests for binops with identity elements.
|
|
Revision tags: llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2 |
|
| #
864dda5f |
| 01-Dec-2020 |
Juneyoung Lee <[email protected]> |
[InstSimplify] Add tests that fold instructions with poison operands (NFC)
|
|
Revision tags: llvmorg-11.0.1-rc1 |
|
| #
7b8d50b1 |
| 24-Nov-2020 |
Cullen Rhodes <[email protected]> |
[InstSimplify] Clarify use of FixedVectorType in SimplifySelectInst
Folding a select of vector constants that include undef elements only applies to fixed vectors, but there's no earlier check the t
[InstSimplify] Clarify use of FixedVectorType in SimplifySelectInst
Folding a select of vector constants that include undef elements only applies to fixed vectors, but there's no earlier check the type is not scalable so it crashes for scalable vectors. This adds a check so this optimization is only attempted for fixed vectors.
Reviewed By: sdesmalen
Differential Revision: https://reviews.llvm.org/D92046
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
| #
a5be86fd |
| 29-Aug-2020 |
Nikita Popov <[email protected]> |
[InstSimplify] Protect against more poison in SimplifyWithOpReplaced (PR47322)
Replace the check for poison-producing instructions in SimplifyWithOpReplaced() with the generic helper canCreatePoison
[InstSimplify] Protect against more poison in SimplifyWithOpReplaced (PR47322)
Replace the check for poison-producing instructions in SimplifyWithOpReplaced() with the generic helper canCreatePoison() that properly handles poisonous shifts and thus avoids the problem from PR47322.
This additionally fixes a bug in IIQ.UseInstrInfo=false mode, which previously could have caused this code to ignore poison flags. Setting UseInstrInfo=false should reduce the possible optimizations, not increase them.
This is not a full solution to the problem, as poison could be introduced more indirectly. This is just a minimal, easy to backport fix.
Differential Revision: https://reviews.llvm.org/D86834
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc2 |
|
| #
a7a06ded |
| 12-Aug-2020 |
Craig Topper <[email protected]> |
Recommit "[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms" and its follow up patches
This recommits the following patches now that D85684 has landed
1cf6f210a2e
Recommit "[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms" and its follow up patches
This recommits the following patches now that D85684 has landed
1cf6f210a2e [IR] Disable select ? C : undef -> C fold in ConstantFoldSelectInstruction unless we know C isn't poison. 469da663f2d [InstSimplify] Re-enable select ?, undef, X -> X transform when X is provably not poison 122b0640fc9 [InstSimplify] Don't fold vectors of partial undef in SimplifySelectInst if the non-undef element value might produce poison ac0af12ed2f [InstSimplify] Add test cases for opportunities to fold select ?, X, undef -> X when we can prove X isn't poison 9b1e95329af [InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms
show more ...
|
| #
566a6670 |
| 10-Aug-2020 |
Nikita Popov <[email protected]> |
[InstSimplify] Add test for expand binop undef issue (NFC)
Add test case from https://reviews.llvm.org/D83360#2146539.
|
|
Revision tags: llvmorg-11.0.0-rc1 |
|
| #
00f3579a |
| 16-Jul-2020 |
Craig Topper <[email protected]> |
Revert "[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms" and subsequent patches
This reverts most of the following patches due to reports of miscompiles. I've le
Revert "[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms" and subsequent patches
This reverts most of the following patches due to reports of miscompiles. I've left the added test cases with comments updated to be FIXMEs.
1cf6f210a2e [IR] Disable select ? C : undef -> C fold in ConstantFoldSelectInstruction unless we know C isn't poison. 469da663f2d [InstSimplify] Re-enable select ?, undef, X -> X transform when X is provably not poison 122b0640fc9 [InstSimplify] Don't fold vectors of partial undef in SimplifySelectInst if the non-undef element value might produce poison ac0af12ed2f [InstSimplify] Add test cases for opportunities to fold select ?, X, undef -> X when we can prove X isn't poison 9b1e95329af [InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms
show more ...
|
|
Revision tags: llvmorg-12-init |
|
| #
1cf6f210 |
| 10-Jul-2020 |
Craig Topper <[email protected]> |
[IR] Disable select ? C : undef -> C fold in ConstantFoldSelectInstruction unless we know C isn't poison.
This matches the recent change to InstSimplify from D83440.
Differential Revision: https://
[IR] Disable select ? C : undef -> C fold in ConstantFoldSelectInstruction unless we know C isn't poison.
This matches the recent change to InstSimplify from D83440.
Differential Revision: https://reviews.llvm.org/D83535
show more ...
|
| #
469da663 |
| 09-Jul-2020 |
Craig Topper <[email protected]> |
[InstSimplify] Re-enable select ?, undef, X -> X transform when X is provably not poison
Follow up from the transform being removed in D83360. If X is probably not poison, then the transform is safe
[InstSimplify] Re-enable select ?, undef, X -> X transform when X is provably not poison
Follow up from the transform being removed in D83360. If X is probably not poison, then the transform is safe.
Still plan to remove or adjust the code from ConstantFolding after this.
Differential Revision: https://reviews.llvm.org/D83440
show more ...
|
| #
122b0640 |
| 09-Jul-2020 |
Craig Topper <[email protected]> |
[InstSimplify] Don't fold vectors of partial undef in SimplifySelectInst if the non-undef element value might produce poison
We can't fold to the non-undef value unless we know it isn't poison. So c
[InstSimplify] Don't fold vectors of partial undef in SimplifySelectInst if the non-undef element value might produce poison
We can't fold to the non-undef value unless we know it isn't poison. So check each element with isGuaranteedNotToBeUndefOrPoison. This currently rules out all constant expressions.
Differential Revision: https://reviews.llvm.org/D83442
show more ...
|
| #
ac0af12e |
| 08-Jul-2020 |
Craig Topper <[email protected]> |
[InstSimplify] Add test cases for opportunities to fold select ?, X, undef -> X when we can prove X isn't poison
Part of addressing post-commit feedback from D83360
|
| #
9b1e9532 |
| 08-Jul-2020 |
Craig Topper <[email protected]> |
[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms
As noted here https://lists.llvm.org/pipermail/llvm-dev/2016-October/106182.html and by alive2, this transform is
[InstSimplify] Remove select ?, undef, X -> X and select ?, X, undef -> X transforms
As noted here https://lists.llvm.org/pipermail/llvm-dev/2016-October/106182.html and by alive2, this transform isn't valid. If X is poison this potentially propagates poison when it shouldn't.
This same transform still exists in DAGCombiner.
Differential Revision: https://reviews.llvm.org/D83360
show more ...
|
|
Revision tags: llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2, llvmorg-10.0.1-rc1 |
|
| #
c72f49cc |
| 13-Apr-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] add test for select that should not be simplified; NFC
See discussion in D77868
|
| #
73bebc94 |
| 10-Apr-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] add tests for folding bool select to logic; NFC
|
|
Revision tags: llvmorg-10.0.0, llvmorg-10.0.0-rc6, llvmorg-10.0.0-rc5, llvmorg-10.0.0-rc4, llvmorg-10.0.0-rc3, llvmorg-10.0.0-rc2, llvmorg-10.0.0-rc1 |
|
| #
da9c93f3 |
| 20-Jan-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] fold select of vector constants that include undef elements
As mentioned in D72643, we'd like to be able to assert that any select of equivalent constants has been removed before we'r
[InstSimplify] fold select of vector constants that include undef elements
As mentioned in D72643, we'd like to be able to assert that any select of equivalent constants has been removed before we're deep into InstCombine.
But there's a loophole in that assertion for vectors with undef elements that don't match exactly.
This patch should close that gap. If we have undefs, we can't safely propagate those unless both constants elements for that lane are undef.
Differential Revision: https://reviews.llvm.org/D72958
show more ...
|
| #
a8b9c936 |
| 17-Jan-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] add test for select of vector constants; NFC
|
| #
3ae38d95 |
| 17-Jan-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] add test for select of FP constants; NFC
|
|
Revision tags: llvmorg-11-init |
|
| #
cfe2fab7 |
| 14-Jan-2020 |
Sanjay Patel <[email protected]> |
[InstSimplify] add tests for vector select; NFC
|