|
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, 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 |
|
| #
23f1047d |
| 07-Apr-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[InstCombine] Fold `(icmp pred (trunc nuw/nsw X), C)` -> `(icmp pred X, (zext/sext C))`
This is valid as long as the sign of the wrap flag doesn't differ from the sign of the `pred`.
Proofs: https:
[InstCombine] Fold `(icmp pred (trunc nuw/nsw X), C)` -> `(icmp pred X, (zext/sext C))`
This is valid as long as the sign of the wrap flag doesn't differ from the sign of the `pred`.
Proofs: https://alive2.llvm.org/ce/z/35NsrR
NB: The online Alive2 hasn't been updated with `trunc nuw/nsw` support, so the proofs must be reproduced locally.
Closes #87935
show more ...
|
| #
ebbf484e |
| 07-Apr-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[InstCombine] Add tests for folding `(icmp pred (trunc nuw/nsw X), C)`; NFC
|
|
Revision tags: 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 |
|
| #
d4493dd1 |
| 15-Dec-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add nuw to any (1<<x)
https://alive2.llvm.org/ce/z/9EjDKE
This was mentioned as a missing fold in D139598.
It can unlock follow-on folds in some cases. This verifies one of the chang
[InstCombine] add nuw to any (1<<x)
https://alive2.llvm.org/ce/z/9EjDKE
This was mentioned as a missing fold in D139598.
It can unlock follow-on folds in some cases. This verifies one of the changed tests: https://alive2.llvm.org/ce/z/B_btDM
show more ...
|
|
Revision tags: llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, 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 ...
|
| #
8346f7e8 |
| 28-Sep-2022 |
Chenbing Zheng <Chenbing.Zheng@streamcomputing.com> |
[InstCombine] Add one more test for shl_trunc_icmp. nfc
|
| #
e500f8f8 |
| 22-Sep-2022 |
Chenbing Zheng <Chenbing.Zheng@streamcomputing.com> |
[InstCombine] Precommit tests for shl_trunc_icmp. nfc
|
|
Revision tags: llvmorg-15.0.1 |
|
| #
444f08c8 |
| 08-Sep-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] fold icmp of truncated left shift, part 2
(trunc (1 << Y) to iN) == 2**C --> Y == C (trunc (1 << Y) to iN) != 2**C --> Y != C https://alive2.llvm.org/ce/z/xnFPo5
Follow-up to d9e1f9d7
[InstCombine] fold icmp of truncated left shift, part 2
(trunc (1 << Y) to iN) == 2**C --> Y == C (trunc (1 << Y) to iN) != 2**C --> Y != C https://alive2.llvm.org/ce/z/xnFPo5
Follow-up to d9e1f9d7591b0d3e4d. This was a suggested enhancement mentioned in issue #51889.
show more ...
|
| #
d9e1f9d7 |
| 08-Sep-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] Fold icmp of truncated left shift
(trunc (1 << Y) to iN) == 0 --> Y u>= N (trunc (1 << Y) to iN) != 0 --> Y u< N
These can be generalized in several ways as noted by the TODO items,
[InstCombine] Fold icmp of truncated left shift
(trunc (1 << Y) to iN) == 0 --> Y u>= N (trunc (1 << Y) to iN) != 0 --> Y u< N
These can be generalized in several ways as noted by the TODO items, but this handles the pattern in the motivating bug report.
Fixes #51889
Differential Revision: https://reviews.llvm.org/D115480
show more ...
|
| #
1184f8cc |
| 05-Sep-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for icmp-of-trunc; NFC
|
|
Revision tags: llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
cc88445a |
| 30-Jun-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] canonicalize 'icmp (trunc X), C' to 'icmp (X & Mask), C'
I looked at canonicalizing in the other direction, but that causes many potential regressions and infinite loops because we alr
[InstCombine] canonicalize 'icmp (trunc X), C' to 'icmp (X & Mask), C'
I looked at canonicalizing in the other direction, but that causes many potential regressions and infinite loops because we already (possibly wrongly) canonicalize "trunc X to i1" into an and+icmp.
This has a data layout restriction to avoid creating illegal mask instructions, but we could remove that if we can show that the backend can undo this when needed.
The motivating example from issue #56119 is modeled by the PhaseOrdering test.
show more ...
|
| #
d48a3b86 |
| 30-Jun-2022 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for icmp (trunc X), C; NFC
|
|
Revision tags: 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 |
|
| #
f55d1eb3 |
| 28-Nov-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] use decomposeBitTestICmp to make icmp (trunc X), C more consistent
This is a follow-on suggested in D112634. Two folds that were added with that patch are subsumed in the call to decom
[InstCombine] use decomposeBitTestICmp to make icmp (trunc X), C more consistent
This is a follow-on suggested in D112634. Two folds that were added with that patch are subsumed in the call to decomposeBitTestICmp, and two other folds are potentially inverted.
The deleted folds were very specialized by instcombine standards because they were restricted to legal integer types based on the data layout. This generalizes the canonical form independent of target/types.
This change has a reasonable chance of exposing regressions either in IR or codegen, but I don't have any evidence for either of those yet. A spot check of asm across several in-tree targets shows variations that I expect are mostly neutral.
We have one improvement in an existing IR test that I noted with a comment. Using mask ops might also make more code match with D114272.
Differential Revision: https://reviews.llvm.org/D114386
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
8fce94f9 |
| 16-Nov-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] canonicalize icmp with trunc op into mask and cmp, part 2
If C is a high-bit mask: (trunc X) u< C --> (X & C) != C (are any masked-high-bits clear?)
If C is low-bit mask: (trunc X) u>
[InstCombine] canonicalize icmp with trunc op into mask and cmp, part 2
If C is a high-bit mask: (trunc X) u< C --> (X & C) != C (are any masked-high-bits clear?)
If C is low-bit mask: (trunc X) u> C --> (X & ~C) != 0 (are any masked-high-bits set?)
If C is not-of-power-of-2 (one clear bit): (trunc X) u> C --> (X & (C+1)) == C+1 (are all masked-high-bits set?)
This extends the fold added with: acabad9ff6bf (https://alive2.llvm.org/ce/z/aFr7qV)
Using decomposeBitTestICmp() to generalize this is a planned follow-up, but that requires removing an inverse fold.
Here are Alive2 generalizations for these folds: https://alive2.llvm.org/ce/z/u-ZpC_ (ult, the previous patch) https://alive2.llvm.org/ce/z/YsuAu2 (ult, this patch) https://alive2.llvm.org/ce/z/ekktQP (ugt, low bitmask) https://alive2.llvm.org/ce/z/pJY9wR (ugt, one clear bit)
Differential Revision: https://reviews.llvm.org/D112634
show more ...
|
| #
05f64b5a |
| 03-Nov-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add signbit tests for icmp with trunc; NFC
|
| #
7277d2e1 |
| 03-Nov-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] adjust test for icmp fold; NFC
I missed that the bitwidth changed from the previous test in the sequence.
|
| #
d18b7ea6 |
| 03-Nov-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for icmp with trunc op; NFC
|
| #
371f7774 |
| 27-Oct-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for icmp with trunc operand; NFC
|
| #
acabad9f |
| 26-Oct-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] try to canonicalize icmp with trunc op into mask and cmp
The motivating test is based on: https://llvm.org/PR52260
We have better analysis for X == 0, so try harder to form that.
|
| #
e8fdd030 |
| 26-Oct-2021 |
Sanjay Patel <spatel@rotateright.com> |
[InstCombine] add tests for icmp with trunc op; NFC
|