History log of /llvm-project/llvm/test/Analysis/ValueTracking/known-non-zero.ll (Results 1 – 25 of 45)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
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 ...


12