aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorNoah Goldstein <goldstein.w.n@gmail.com>2024-04-09 11:58:38 -0500
committerNoah Goldstein <goldstein.w.n@gmail.com>2024-04-10 10:40:48 -0500
commit77d668451ad2e6370eb595c171779429e9becdf2 (patch)
tree16ceaca5a898b00c32bf7e9f6d411a82fcabcbdc /llvm/lib/Analysis/ValueTracking.cpp
parentf9f4aba547f50e6dcb2d9345b51fe4883bb64d8d (diff)
downloadllvm-77d668451ad2e6370eb595c171779429e9becdf2.zip
llvm-77d668451ad2e6370eb595c171779429e9becdf2.tar.gz
llvm-77d668451ad2e6370eb595c171779429e9becdf2.tar.bz2
[ValueTracking] Add support for `vector_reduce_{s,u}{min,max}` in `isKnownNonZero`
Previously missing, proofs for all implementations: https://alive2.llvm.org/ce/z/G8wpmG
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index ca48cfe..869a94d 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2824,6 +2824,12 @@ static bool isKnownNonZeroFromOperator(const Operator *I,
return isNonZeroAdd(DemandedElts, Depth, Q, BitWidth,
II->getArgOperand(0), II->getArgOperand(1),
/*NSW=*/true, /* NUW=*/false);
+ // umin/smin/smax/smin of all non-zero elements is always non-zero.
+ case Intrinsic::vector_reduce_umax:
+ case Intrinsic::vector_reduce_umin:
+ case Intrinsic::vector_reduce_smax:
+ case Intrinsic::vector_reduce_smin:
+ return isKnownNonZero(II->getArgOperand(0), Depth, Q);
case Intrinsic::umax:
case Intrinsic::uadd_sat:
return isKnownNonZero(II->getArgOperand(1), DemandedElts, Depth, Q) ||