Skip to content

Commit a02eade

Browse files
committed
[ValueTracking] Handle trunc nuw in computeKnownBitsFromICmpCond
1 parent 4405af5 commit a02eade

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,10 @@ static void computeKnownBitsFromICmpCond(const Value *V, ICmpInst *Cmp,
776776
if (match(LHS, m_Trunc(m_Specific(V)))) {
777777
KnownBits DstKnown(LHS->getType()->getScalarSizeInBits());
778778
computeKnownBitsFromCmp(LHS, Pred, LHS, RHS, DstKnown, SQ);
779-
Known = Known.unionWith(DstKnown.anyext(Known.getBitWidth()));
779+
if (match(LHS, m_NUWTrunc(m_Value())))
780+
Known = Known.unionWith(DstKnown.zext(Known.getBitWidth()));
781+
else
782+
Known = Known.unionWith(DstKnown.anyext(Known.getBitWidth()));
780783
return;
781784
}
782785

llvm/test/Transforms/InstCombine/known-bits.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,7 @@ define i64 @test_icmp_trunc_nuw(i64 %a) {
487487
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CAST]], 0
488488
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
489489
; CHECK: if.then:
490-
; CHECK-NEXT: [[B:%.*]] = and i64 [[A]], 2147483647
491-
; CHECK-NEXT: ret i64 [[B]]
490+
; CHECK-NEXT: ret i64 [[A]]
492491
; CHECK: if.else:
493492
; CHECK-NEXT: ret i64 0
494493
;

0 commit comments

Comments
 (0)