Skip to content

Commit 59efb40

Browse files
committed
[ValueTracking] Handle assume( trunc x to i1) in ComputeKnownBits
1 parent eb6d5e4 commit 59efb40

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -873,10 +873,9 @@ void llvm::computeKnownBitsFromContext(const Value *V, KnownBits &Known,
873873

874874
Value *Arg = I->getArgOperand(0);
875875

876-
if (Arg == V && isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
877-
assert(BitWidth == 1 && "assume operand is not i1?");
878-
(void)BitWidth;
879-
Known.setAllOnes();
876+
if (match(Arg, m_TruncOrSelf(m_Specific(V))) &&
877+
isValidAssumeForContext(I, Q.CxtI, Q.DT)) {
878+
Known.One.setBit(0);
880879
return;
881880
}
882881
if (match(Arg, m_Not(m_Specific(V))) &&

llvm/test/Transforms/InstSimplify/shr-nop.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,7 @@ define i8 @exact_lshr_lowbit_set_assume_trunc(i8 %x) {
385385
; CHECK-LABEL: @exact_lshr_lowbit_set_assume_trunc(
386386
; CHECK-NEXT: [[COND:%.*]] = trunc i8 [[X:%.*]] to i1
387387
; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
388-
; CHECK-NEXT: [[SHR:%.*]] = lshr exact i8 [[X]], 1
389-
; CHECK-NEXT: ret i8 [[SHR]]
388+
; CHECK-NEXT: ret i8 [[X]]
390389
;
391390
%cond = trunc i8 %x to i1
392391
call void @llvm.assume(i1 %cond)

0 commit comments

Comments
 (0)