Skip to content

Commit 167ecda

Browse files
committed
[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
1 parent 461ded4 commit 167ecda

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2932,6 +2932,10 @@ bool isKnownNonZero(const Value *V, const APInt &DemandedElts, unsigned Depth,
29322932
case Intrinsic::ssub_sat:
29332933
return isNonZeroSub(DemandedElts, Depth, Q, BitWidth,
29342934
II->getArgOperand(0), II->getArgOperand(1));
2935+
case Intrinsic::sadd_sat:
2936+
return isNonZeroAdd(DemandedElts, Depth, Q, BitWidth,
2937+
II->getArgOperand(0), II->getArgOperand(1),
2938+
/*NSW*/ true);
29352939
case Intrinsic::uadd_sat:
29362940
if (isKnownNonZero(II->getArgOperand(0), DemandedElts, Depth, Q) ||
29372941
isKnownNonZero(II->getArgOperand(1), DemandedElts, Depth, Q))

llvm/test/Analysis/ValueTracking/known-non-zero.ll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -924,10 +924,7 @@ define i1 @sadd_sat_nonzero(i8 %xx, i8 %yy, i8 %ind) {
924924
; CHECK-NEXT: [[Y_POS:%.*]] = icmp sge i8 [[YY:%.*]], 0
925925
; CHECK-NEXT: call void @llvm.assume(i1 [[X_STRICT_POS]])
926926
; CHECK-NEXT: call void @llvm.assume(i1 [[Y_POS]])
927-
; CHECK-NEXT: [[X:%.*]] = call i8 @llvm.sadd.sat.i8(i8 [[XX]], i8 [[YY]])
928-
; CHECK-NEXT: [[Z:%.*]] = or i8 [[X]], [[IND:%.*]]
929-
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[Z]], 0
930-
; CHECK-NEXT: ret i1 [[R]]
927+
; CHECK-NEXT: ret i1 false
931928
;
932929
%x_strict_pos = icmp sgt i8 %xx, 0
933930
%y_pos = icmp sge i8 %yy, 0

0 commit comments

Comments
 (0)