Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2441,9 +2441,10 @@ Instruction *InstCombinerImpl::foldICmpShlConstant(ICmpInst &Cmp,
Type *TruncTy = ShType->getWithNewBitWidth(TypeBits - Amt);
Constant *NewC =
ConstantInt::get(TruncTy, RHSC.ashr(*ShiftAmt).trunc(TypeBits - Amt));
return new ICmpInst(
CmpPred, Builder.CreateTrunc(X, TruncTy, "", Shl->hasNoSignedWrap()),
NewC);
return new ICmpInst(CmpPred,
Builder.CreateTrunc(X, TruncTy, "", /*IsNUW=*/false,
Shl->hasNoSignedWrap()),
NewC);
}
}

Expand Down
10 changes: 10 additions & 0 deletions llvm/test/Transforms/InstCombine/icmp.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5295,3 +5295,13 @@ define i1 @test_icmp_shl_sgt(i64 %x) {
%cmp = icmp sgt i64 %shl, 8589934591
ret i1 %cmp
}

define i1 @pr94897(i32 range(i32 -2147483648, 0) %x) {
; CHECK-LABEL: @pr94897(
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -3
; CHECK-NEXT: ret i1 [[CMP]]
;
%shl = shl nsw i32 %x, 24
%cmp = icmp ugt i32 %shl, -50331648
ret i1 %cmp
}