|
Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4 |
|
| #
38fffa63 |
| 06-Nov-2024 |
Paul Walker <paul.walker@arm.com> |
[LLVM][IR] Use splat syntax when printing Constant[Data]Vector. (#112548)
|
|
Revision tags: llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4 |
|
| #
a1058776 |
| 21-Aug-2024 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Remove some of the complexity-based canonicalization (#91185)
The idea behind this canonicalization is that it allows us to handle less
patterns, because we know that some will be can
[InstCombine] Remove some of the complexity-based canonicalization (#91185)
The idea behind this canonicalization is that it allows us to handle less
patterns, because we know that some will be canonicalized away. This is
indeed very useful to e.g. know that constants are always on the right.
However, this is only useful if the canonicalization is actually
reliable. This is the case for constants, but not for arguments: Moving
these to the right makes it look like the "more complex" expression is
guaranteed to be on the left, but this is not actually the case in
practice. It fails as soon as you replace the argument with another
instruction.
The end result is that it looks like things correctly work in tests,
while they actually don't. We use the "thwart complexity-based
canonicalization" trick to handle this in tests, but it's often a
challenge for new contributors to get this right, and based on the
regressions this PR originally exposed, we clearly don't get this right
in many cases.
For this reason, I think that it's better to remove this complexity
canonicalization. It will make it much easier to write tests for
commuted cases and make sure that they are handled.
show more ...
|
|
Revision tags: 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 |
|
| #
deab451e |
| 04-Jun-2024 |
Nikita Popov <npopov@redhat.com> |
[IR] Remove support for icmp and fcmp constant expressions (#93038)
Remove support for the icmp and fcmp constant expressions.
This is part of:
https://discourse.llvm.org/t/rfc-remove-most-const
[IR] Remove support for icmp and fcmp constant expressions (#93038)
Remove support for the icmp and fcmp constant expressions.
This is part of:
https://discourse.llvm.org/t/rfc-remove-most-constant-expressions/63179
As usual, many of the updated tests will no longer test what they were
originally intended to -- this is hard to preserve when constant
expressions get removed, and in many cases just impossible as the
existence of a specific kind of constant expression was the cause of the
issue in the first place.
show more ...
|
| #
63dc31b6 |
| 22-May-2024 |
Nikita Popov <npopov@redhat.com> |
Reapply [IR] Avoid creating icmp/fcmp constant expressions (#92885)
Reapply after https://github.com/llvm/llvm-project/pull/93548, which should address the lldb failure on macos.
-----
Do not crea
Reapply [IR] Avoid creating icmp/fcmp constant expressions (#92885)
Reapply after https://github.com/llvm/llvm-project/pull/93548, which should address the lldb failure on macos.
-----
Do not create icmp/fcmp constant expressions in IRBuilder etc anymore, i.e. treat them as "undesirable". This is in preparation for removing them entirely.
Part of: https://discourse.llvm.org/t/rfc-remove-most-constant-expressions/63179
show more ...
|
| #
8baf96f3 |
| 22-May-2024 |
Daniel Thornburgh <dthorn@google.com> |
Revert "[IR] Avoid creating icmp/fcmp constant expressions" (#93087)
Reverts llvm/llvm-project#92885 due to LLDB CI breakages.
|
| #
108575f0 |
| 22-May-2024 |
Nikita Popov <npopov@redhat.com> |
[IR] Avoid creating icmp/fcmp constant expressions (#92885)
Do not create icmp/fcmp constant expressions in IRBuilder etc anymore,
i.e. treat them as "undesirable". This is in preparation for remov
[IR] Avoid creating icmp/fcmp constant expressions (#92885)
Do not create icmp/fcmp constant expressions in IRBuilder etc anymore,
i.e. treat them as "undesirable". This is in preparation for removing
them entirely.
Part of:
https://discourse.llvm.org/t/rfc-remove-most-constant-expressions/63179
show more ...
|
|
Revision tags: 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 |
|
| #
2caaec65 |
| 06-Apr-2023 |
Nikita Popov <npopov@redhat.com> |
[InstCombine] Regenerate all test checks (NFC)
Due to an improvement to name preservation, a lot of InstCombine tests now show spurious diffs when regenerated.
Rather than regenerating individual f
[InstCombine] Regenerate all test checks (NFC)
Due to an improvement to name preservation, a lot of InstCombine tests now show spurious diffs when regenerated.
Rather than regenerating individual files when they get touched, mass-regenerate all UTC-based InstCombine tests. I have then reset a number of files showing suspicious diffs where the UTC output has clearly been manually adjusted. I apologize if I missed anything in the mass of changes.
show more ...
|
|
Revision tags: 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 |
|
| #
b24e2f6e |
| 02-Nov-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] use logical-and matcher to avoid crash
Follow-on to: ec0b406e16c44f1554
This should prevent crashing for example like issue #58552 by not matching a select-of-vectors-with-scalar-cond
[InstCombine] use logical-and matcher to avoid crash
Follow-on to: ec0b406e16c44f1554
This should prevent crashing for example like issue #58552 by not matching a select-of-vectors-with-scalar-condition.
The test that shows a regression seems unlikely to occur in real code.
This also picks up an optimization in the case where a real (bitwise) logic op is used. We could already convert some similar select ops to real logic via impliesPoison(), so we don't see more diffs on commuted tests. Using commutative matchers (when safe) might also handle one of the TODO tests.
show more ...
|
| #
6f77979a |
| 02-Nov-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for logical-and / logical-or folds; NFC
Similar to 29661fe94bf12ced1 - there are matching deficiencies and a potential crash lurking in these patterns.
|
|
Revision tags: llvmorg-15.0.4 |
|
| #
ec0b406e |
| 01-Nov-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] use logical-or matcher to avoid crash
This should prevent crashing for the example in issue #58552 by not matching a select-of-vectors-with-scalar-condition.
A similar change is likel
[InstCombine] use logical-or matcher to avoid crash
This should prevent crashing for the example in issue #58552 by not matching a select-of-vectors-with-scalar-condition.
A similar change is likely needed for the related fold to properly fix that kind of bug.
The test that shows a regression seems unlikely to occur in real code.
This also picks up an optimization in the case where a real (bitwise) logic op is used. We could already convert some similar select ops to real logic via impliesPoison(), so we don't see more diffs on commuted tests. Using commutative matchers (when safe) might also handle one of the TODO tests.
show more ...
|
| #
29661fe9 |
| 01-Nov-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for logical-and / logical-or folds; NFC
|
| #
5dcfc328 |
| 24-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] allow more commutative matches for logical-and to select fold
This is a sibling transform to the fold just above it. That was changed to allow the corresponding commuted patterns with:
[InstCombine] allow more commutative matches for logical-and to select fold
This is a sibling transform to the fold just above it. That was changed to allow the corresponding commuted patterns with: 307307456277 e1bd759ea567 8628e6df7000
show more ...
|
| #
8628e6df |
| 22-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] use freeze to enable poison-safe logic->select fold
Without a freeze, this transform can leak poison to the output: https://alive2.llvm.org/ce/z/GJuF9i
This makes the transform as uni
[InstCombine] use freeze to enable poison-safe logic->select fold
Without a freeze, this transform can leak poison to the output: https://alive2.llvm.org/ce/z/GJuF9i
This makes the transform as uniform as possible, and it can help reduce patterns like issue #58313 (although that particular example probably still needs another transform).
Differential Revision: https://reviews.llvm.org/D136527
show more ...
|
| #
db40f9b7 |
| 22-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add test for logical-ands to select; NFC
|
| #
e1bd759e |
| 22-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] allow more matches for logical-ands --> select
This allows patterns with real 'and' instructions because those are safe to transform: https://alive2.llvm.org/ce/z/7-U_Ak
|
| #
30730745 |
| 21-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] allow more commutative matches for logical-and to select fold
When the common value is part of either select condition, this is safe to reduce. Otherwise, it is not poison-safe (with t
[InstCombine] allow more commutative matches for logical-and to select fold
When the common value is part of either select condition, this is safe to reduce. Otherwise, it is not poison-safe (with the select form of the pattern): https://alive2.llvm.org/ce/z/FxQTzB
This is another patch motivated by issue #58313.
show more ...
|
| #
d7fecf26 |
| 21-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] allow some commutative matches for logical-and to select fold
This is obviously correct for real logic instructions, and it also works for the poison-safe variants that use selects: ht
[InstCombine] allow some commutative matches for logical-and to select fold
This is obviously correct for real logic instructions, and it also works for the poison-safe variants that use selects: https://alive2.llvm.org/ce/z/wyHiwX
This is motivated by the lack of 'xor' folding seen in issue #58313. This more general fold should help reduce some of those patterns, but I'm not sure if this specific case does anything for that particular example.
show more ...
|
| #
bf75e937 |
| 21-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] match logical and/or more generally in fold to select
This allows the regular bitwise logic opcodes in addition to the poison-safe select variants: https://alive2.llvm.org/ce/z/8xB9gy
[InstCombine] match logical and/or more generally in fold to select
This allows the regular bitwise logic opcodes in addition to the poison-safe select variants: https://alive2.llvm.org/ce/z/8xB9gy
Handling commuted variants safely is likely trickier, so that's left to another patch.
show more ...
|
| #
5a53fe84 |
| 20-Oct-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for logical selects; NFC
|
|
Revision tags: llvmorg-15.0.3, working, llvmorg-15.0.2 |
|
| #
4ab40eca |
| 03-Oct-2022 |
Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> |
[test][InstCombine] Update some test cases to use opaque pointers
These tests cases were converted using the script at https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34
Differential Re
[test][InstCombine] Update some test cases to use opaque pointers
These tests cases were converted using the script at https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34
Differential Revision: https://reviews.llvm.org/D135094
show more ...
|
|
Revision tags: 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, 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 |
|
| #
acdc419c |
| 04-Feb-2022 |
Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> |
[test] Use -passes=instcombine instead of -instcombine in lots of tests. NFC
Another step moving away from the deprecated syntax of specifying pass pipeline in opt.
Differential Revision: https://r
[test] Use -passes=instcombine instead of -instcombine in lots of tests. NFC
Another step moving away from the deprecated syntax of specifying pass pipeline in opt.
Differential Revision: https://reviews.llvm.org/D119081
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, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1 |
|
| #
8a156d1c |
| 02-May-2021 |
Juneyoung Lee <aqjune@gmail.com> |
[InstCombine] Fully disable select to and/or i1 folding
This is a patch that disables the poison-unsafe select -> and/or i1 folding.
It has been blocking D72396 and also has been the source of a fe
[InstCombine] Fully disable select to and/or i1 folding
This is a patch that disables the poison-unsafe select -> and/or i1 folding.
It has been blocking D72396 and also has been the source of a few miscompilations described in llvm.org/pr49688 . D99674 conditionally blocked this folding and successfully fixed the latter one. The former one was still blocked, and this patch addresses it.
Note that a few test functions that has `_logical` suffix are now deoptimized. These are created by @nikic to check the impact of disabling this optimization by copying existing original functions and replacing and/or with select.
I can see that most of these are poison-unsafe; they can be revived by introducing freeze instruction. I left comments at fcmp + select optimizations (or-fcmp.ll, and-fcmp.ll) because I think they are good targets for freeze fix.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D101191
show more ...
|
| #
1fef5c88 |
| 04-May-2021 |
Juneyoung Lee <aqjune@gmail.com> |
[InstCombine] Fold more select of selects using isImpliedCondition
This is a simple folding that does these:
``` select x_inv, true, (select y, x, false) => select x_inv, true, y ``` https://alive2
[InstCombine] Fold more select of selects using isImpliedCondition
This is a simple folding that does these:
``` select x_inv, true, (select y, x, false) => select x_inv, true, y ``` https://alive2.llvm.org/ce/z/-STJ2d
``` select (select y, x, false), true, x_inv => select y, true, x_inv ``` https://alive2.llvm.org/ce/z/6ruYt6
Reviewed By: spatel
Differential Revision: https://reviews.llvm.org/D101807
show more ...
|
| #
a71d666d |
| 04-May-2021 |
Juneyoung Lee <aqjune@gmail.com> |
[InstCombine] Precommit tests for D101807 (NFC)
|
| #
39eb2665 |
| 27-Apr-2021 |
Juneyoung Lee <aqjune@gmail.com> |
[InstCombine] Add a few more patterns for folding select of select
This is a patch that folds select of select to salvage some optimizations after select -> and/or folding is disabled.
``` select (
[InstCombine] Add a few more patterns for folding select of select
This is a patch that folds select of select to salvage some optimizations after select -> and/or folding is disabled.
``` select (select a, true, b), c, false -> select a, c, false select c, (select a, true, b), false -> select c, a, false if c implies that b is false (isImpliedCondition). ``` https://alive2.llvm.org/ce/z/ANatjt, https://alive2.llvm.org/ce/z/rv8zTB
``` sel (sel c, a, false), true, (sel !c, b, false) -> sel c, a, b sel (sel !c, a, false), true, (sel c, b, false) -> sel c, b, a ``` https://alive2.llvm.org/ce/z/U2kp-t, https://alive2.llvm.org/ce/z/bc88EE
See D101191
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D101375
show more ...
|