[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