[all-commits] [llvm/llvm-project] 786ce4: [ValueTracking] Pull out logic for detecting if `(...
goldsteinn via All-commits
all-commits at lists.llvm.org
Sun Apr 30 08:07:15 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 786ce4c4c534f234334b14c25fbcdb31566e79d4
https://github.com/llvm/llvm-project/commit/786ce4c4c534f234334b14c25fbcdb31566e79d4
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
Log Message:
-----------
[ValueTracking] Pull out logic for detecting if `(sub X, Y)` is non-zero; NFC
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149406
Commit: a10515454bfd5013cd4feae8081c4cdae6355e62
https://github.com/llvm/llvm-project/commit/a10515454bfd5013cd4feae8081c4cdae6355e62
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
Log Message:
-----------
[ValueTracking] Pull out logic for detecting if `(add X, Y)` is non-zero; NFC
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149407
Commit: f7bf984ed3ac57e57f12d010b086f1e1bd5627b9
https://github.com/llvm/llvm-project/commit/f7bf984ed3ac57e57f12d010b086f1e1bd5627b9
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[ValueTracking] Add more tests for `isKnownNonZero` cases; NFC
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149408
Commit: c7f7f601f2c86203f8659e0a765549853f3c2a85
https://github.com/llvm/llvm-project/commit/c7f7f601f2c86203f8659e0a765549853f3c2a85
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[ValueTracking] Handle bitcasts between vec-int-ptr in `isKnownNonZero`
We where missing these cases so something like:
`(bitcast to i32 (or v216 x, <2, 1>))`
would not be found to be non-zero.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149409
Commit: ea5a0d4b909fb71376686a3c34bbaf05ed47fb3f
https://github.com/llvm/llvm-project/commit/ea5a0d4b909fb71376686a3c34bbaf05ed47fb3f
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[ValueTracking] Add logic for `isKnownNonZero(ctlz/cttz X)`
for `cttz` if `X[0]` is non-zero, then the expression is non-zero.
for `ctlz` if `X[SignBit]` is non-zero, then the expression in
non-zero.
Alive2 Links:
cttz (false): https://alive2.llvm.org/ce/z/ySQzbg
cttz (true): https://alive2.llvm.org/ce/z/auiTCJ
ctlz (false): https://alive2.llvm.org/ce/z/yk3sTJ
ctlz (true): https://alive2.llvm.org/ce/z/-JuDty
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149410
Commit: f1dfa4938a2f608b6288cf55da905a440b2763d6
https://github.com/llvm/llvm-project/commit/f1dfa4938a2f608b6288cf55da905a440b2763d6
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[ValueTracking] Add logic for `isKnownNonZero(sshl.sat/ushl.sat X, Y)`
`(sshl/ushl X, Y) != 0` -> `X != 0`
Alive2 Links
https://alive2.llvm.org/ce/z/4WLM2p
https://alive2.llvm.org/ce/z/BHFng4
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149411
Commit: 461ded4631074c7636edd5985ce15b3748f6a9e2
https://github.com/llvm/llvm-project/commit/461ded4631074c7636edd5985ce15b3748f6a9e2
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[ValueTracking] Add logic for `isKnownNonZero(ssub.sat X, Y)`
The logic here is the same for normal `(sub X, Y)`, so just reused
`isNonZeroSub`.
Alive2 Link:
https://alive2.llvm.org/ce/z/9kSkMv
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149412
Commit: 167ecdaa2cc34e942b99c567c0b076923ea220c3
https://github.com/llvm/llvm-project/commit/167ecdaa2cc34e942b99c567c0b076923ea220c3
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[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
Commit: 883daa7ac411930164b4784609b08518ac05f89e
https://github.com/llvm/llvm-project/commit/883daa7ac411930164b4784609b08518ac05f89e
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
M llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll
Log Message:
-----------
[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
Commit: e78c30a10fe73c03843604a9d06ac55b87fda735
https://github.com/llvm/llvm-project/commit/e78c30a10fe73c03843604a9d06ac55b87fda735
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[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
Commit: d840391401735a2cd5be54c11e1806ef47df622d
https://github.com/llvm/llvm-project/commit/d840391401735a2cd5be54c11e1806ef47df622d
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
M llvm/test/Transforms/LoopVectorize/X86/float-induction-x86.ll
M llvm/test/Transforms/LoopVectorize/induction.ll
M llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll
M llvm/test/Transforms/LoopVectorize/loop-scalars.ll
Log Message:
-----------
[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
Commit: 5eedfff695868087452b3272a42fa1a22b5d610e
https://github.com/llvm/llvm-project/commit/5eedfff695868087452b3272a42fa1a22b5d610e
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
M llvm/test/Analysis/ValueTracking/known-non-zero.ll
Log Message:
-----------
[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
Commit: 424b10d6cc0509054708d928cc3711b781610440
https://github.com/llvm/llvm-project/commit/424b10d6cc0509054708d928cc3711b781610440
Author: Noah Goldstein <goldstein.w.n at gmail.com>
Date: 2023-04-30 (Sun, 30 Apr 2023)
Changed paths:
M llvm/lib/Analysis/ValueTracking.cpp
Log Message:
-----------
[ValueTracking] Slight refactor to avoid unnecessary work; NFC
Two changes:
1) Make some cases that conditionally returned unconditional.
2) In cases of `Op0 != 0 || Op1 != 0` its better check `Op1` first
as its more likely to be a constant due to canonicalization (so
faster to get knownbits of).
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D149419
Compare: https://github.com/llvm/llvm-project/compare/c1994e54ffdb...424b10d6cc05
More information about the All-commits
mailing list