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 |
|
#
72ff0499 |
| 16-Jul-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Consistently propagate `DemandedElts` is `isKnownNonZero`
|
#
1dfbd072 |
| 17-Jul-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for `llvm.vector.reverse` with `DemandedElts`; NFC
|
#
769952d7 |
| 16-Jul-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Implement Known{Bits,NonZero,FPClass} for `llvm.vector.reverse`
`llvm.vector.reverse` preserves each of the elements and thus elements common to them.
Alive2 doesn't support the int
[ValueTracking] Implement Known{Bits,NonZero,FPClass} for `llvm.vector.reverse`
`llvm.vector.reverse` preserves each of the elements and thus elements common to them.
Alive2 doesn't support the intrin yet, but the logic seems pretty self-evident.
Closes #99013
show more ...
|
#
41b876db |
| 16-Jul-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for Known{Bits,NonZero,FPClass} for `llvm.vector.reverse`; NFC
|
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5 |
|
#
b933c844 |
| 22-Apr-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add support for `trunc nuw/nsw` in isKnowNonZero
With `nsw`/`nuw`, the `trunc` is non-zero if its operand is non-zero.
Proofs: https://alive2.llvm.org/ce/z/iujmk6
Closes #89643
|
#
b3ca9c30 |
| 22-Apr-2024 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for isKnowNonZero of `trunc nuw/nsw`; NFC
|
Revision tags: llvmorg-18.1.4, llvmorg-18.1.3 |
|
#
e66cfebb |
| 20-Mar-2024 |
Andreas Jonson <andjo403@hotmail.com> |
[ValueTracking] Handle range attributes (#85143)
Handle the range attribute in ValueTracking.
|
Revision tags: llvmorg-18.1.2 |
|
#
6872a646 |
| 19-Mar-2024 |
Nikita Popov <npopov@redhat.com> |
[ValueTracking] Handle vector range metadata in isKnownNonZero()
Nowadays !range can be placed on instructions with vector of int return value. Support this case in isKnownNonZero().
|
#
0e768186 |
| 19-Mar-2024 |
Nikita Popov <npopov@redhat.com> |
[ValueTracking] Test isKnownNonZero() range metadata with vector (NFC)
|
Revision tags: llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2 |
|
#
d8e1b451 |
| 30-Jan-2024 |
Craig Topper <craig.topper@sifive.com> |
[ValueTracking] Add experimental_get_vector_length to isKnownNonZero. (#79950)
If the input is non-zero, this intrinsic should also return a non-zero
value.
|
Revision tags: llvmorg-18.1.0-rc1, llvmorg-19-init |
|
#
64987c64 |
| 20-Dec-2023 |
bipmis <102525366+bipmis@users.noreply.github.com> |
[ValueTracking] isNonZero sub of ptr2int's with recursive GEP (#68680)
When the sub arguments are ptr2int it is not possible to determine
computeKnownBits() of its arguments.
For scalar case gener
[ValueTracking] isNonZero sub of ptr2int's with recursive GEP (#68680)
When the sub arguments are ptr2int it is not possible to determine
computeKnownBits() of its arguments.
For scalar case generally sub of 2 ptr2int are converted to sub of
indexes.
However a loop with recursive GEP/PHI where the arguments to sub is of
type ptr2int, if it is possible to determine that a sub of this GEP and
another pointer with the same base is KnownNonZero we can return this.
This helps subsequent passes to optimize the loop further.
show more ...
|
#
33750468 |
| 18-Dec-2023 |
Nikita Popov <npopov@redhat.com> |
[ValueTracking] Use isKnownNonEqual() in isNonZeroSub()
(x - y) != 0 is true iff x != y, so use the isKnownNonEqual() helper, which knows some additional tricks.
|
#
7c1d8c74 |
| 18-Dec-2023 |
Nikita Popov <npopov@redhat.com> |
[ValueTracking] Add test for non-zero sub via known non equal (NFC)
|
Revision tags: llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3 |
|
#
dfda65c8 |
| 06-Oct-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add support for non-splat vecs in cmpExcludesZero Just a small QOL change.
|
#
9427fce6 |
| 05-Oct-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for `cmpExcludesZero` for non-splat vecs; NFC
|
Revision tags: llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4 |
|
#
846ff921 |
| 24-Aug-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Compute `sdiv` as non-zero if `abs(num) u>= abs(denum)`
Just covering an additional case.
Proof: https://alive2.llvm.org/ce/z/MJz9fT
Reviewed By: nikic
Differential Revision: http
[ValueTracking] Compute `sdiv` as non-zero if `abs(num) u>= abs(denum)`
Just covering an additional case.
Proof: https://alive2.llvm.org/ce/z/MJz9fT
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D157302
show more ...
|
Revision tags: llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2 |
|
#
d0b4ed9a |
| 07-Aug-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for knowing `sdiv` is non-zero; NFC
Differential Revision: https://reviews.llvm.org/D157301
|
Revision tags: llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4 |
|
#
774ecc20 |
| 16-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] deduce `X * Y != 0` if `LowestKnownBit(X) * LowestKnownBit(Y) != 0`
For `X * Y`, if there exists a subset of `X` and subset of `Y` s.t `sX * sY != 0`, then `X * Y != 0`. - See fi
[ValueTracking] deduce `X * Y != 0` if `LowestKnownBit(X) * LowestKnownBit(Y) != 0`
For `X * Y`, if there exists a subset of `X` and subset of `Y` s.t `sX * sY != 0`, then `X * Y != 0`. - See first proof: https://alive2.llvm.org/ce/z/28C9CG - NB: This is why the previous Odd case works.
In knownbits we could exhaustively hunt for such a subset, but `LSB(X)` and `LSB(Y)` actually works. If `LSB(X) * LSB(Y) != 0`, then `X * Y != 0` - See proof: https://alive2.llvm.org/ce/z/p5wWid
In `isKnownNonZero` we can use this as if the `LowestKnownOne(X) * LowestKnownOne(Y) != 0`, then `X * Y != 0`, and we don't need to try and other subsets.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D150425
show more ...
|
#
7f82f108 |
| 12-May-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add tests for deducing `X * Y != 0` if `LSB(X) * LSB(Y) != 0`; NFC
Differential Revision: https://reviews.llvm.org/D150424
|
Revision tags: llvmorg-16.0.3 |
|
#
5eedfff6 |
| 30-Apr-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add additional cases for `isKnownNonZero(mul X, Y)`
If either `X` or `Y` is odd and the other is non-zero, the result is non-zero.
Alive2 Link: https://alive2.llvm.org/ce/z/9V7-
[ValueTracking] Add additional cases for `isKnownNonZero(mul X, Y)`
If either `X` or `Y` is odd and the other is non-zero, the result is non-zero.
Alive2 Link: https://alive2.llvm.org/ce/z/9V7-es
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149418
show more ...
|
#
d8403914 |
| 30-Apr-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add logic for `isKnownNonZero(smin/smax X, Y)`
For `smin` if either `X` or `Y` is negative, the result is non-zero. For `smax` if either `X` or `Y` is strictly positive, the result i
[ValueTracking] Add logic for `isKnownNonZero(smin/smax X, Y)`
For `smin` if either `X` or `Y` is negative, the result is non-zero. For `smax` if either `X` or `Y` is strictly positive, the result is non-zero.
For both if `X != 0` and `Y != 0` the result is non-zero.
Alive2 Link: https://alive2.llvm.org/ce/z/7yvbgN https://alive2.llvm.org/ce/z/zizbvq
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149417
show more ...
|
#
e78c30a1 |
| 30-Apr-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add logic for `isKnownNonZero(umin X, Y)`
`(umin X, Y) != 0` -> `X != 0 && Y != 0`
Alive2 Link: https://alive2.llvm.org/ce/z/AQh67i
Reviewed By: nikic
Differential Revision: h
[ValueTracking] Add logic for `isKnownNonZero(umin X, Y)`
`(umin X, Y) != 0` -> `X != 0 && Y != 0`
Alive2 Link: https://alive2.llvm.org/ce/z/AQh67i
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149416
show more ...
|
#
883daa7a |
| 30-Apr-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add logic for `isKnownNonZero(umax X, Y)`
`(umax X, Y) != 0` -> `X != 0 || Y != 0`
Alive2 Link: https://alive2.llvm.org/ce/z/_Z9AUT
Reviewed By: nikic
Differential Revision: h
[ValueTracking] Add logic for `isKnownNonZero(umax X, Y)`
`(umax X, Y) != 0` -> `X != 0 || Y != 0`
Alive2 Link: https://alive2.llvm.org/ce/z/_Z9AUT
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149415
show more ...
|
#
167ecdaa |
| 30-Apr-2023 |
Noah Goldstein <goldstein.w.n@gmail.com> |
[ValueTracking] Add logic for `isKnownNonZero(sadd.sat X, Y)`
The logic here is the same for `add` so reuse the existing helper `isNonZeroAdd`
Alive2 Link: https://alive2.llvm.org/ce/z/mhKvC5
[ValueTracking] Add logic for `isKnownNonZero(sadd.sat X, Y)`
The logic here is the same for `add` so reuse the existing helper `isNonZeroAdd`
Alive2 Link: https://alive2.llvm.org/ce/z/mhKvC5
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149414
show more ...
|