Skip to content

Commit d5cd785

Browse files
committed
[SCCP] Add support for trunc nuw range.
1 parent b8a512b commit d5cd785

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

llvm/lib/Transforms/Utils/SCCPSolver.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,8 +1442,12 @@ void SCCPInstVisitor::visitCastInst(CastInst &I) {
14421442
OpSt.asConstantRange(I.getSrcTy(), /*UndefAllowed=*/false);
14431443

14441444
Type *DestTy = I.getDestTy();
1445-
ConstantRange Res =
1446-
OpRange.castOp(I.getOpcode(), DestTy->getScalarSizeInBits());
1445+
ConstantRange Res = ConstantRange::getEmpty(DestTy->getScalarSizeInBits());
1446+
if (auto *Trunc = dyn_cast<TruncInst>(&I))
1447+
Res = OpRange.truncate(DestTy->getScalarSizeInBits(),
1448+
Trunc->getNoWrapKind());
1449+
else
1450+
Res = OpRange.castOp(I.getOpcode(), DestTy->getScalarSizeInBits());
14471451
mergeInValue(LV, &I, ValueLatticeElement::getRange(Res));
14481452
} else
14491453
markOverdefined(&I);

llvm/test/Transforms/SCCP/conditions-ranges.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,8 +1441,7 @@ define void @trunc_nuw_i1_dominating_icmp_ne_0(i8 %x) {
14411441
; CHECK-NEXT: [[ICMP:%.*]] = icmp ne i8 [[X:%.*]], 0
14421442
; CHECK-NEXT: br i1 [[ICMP]], label [[BB1:%.*]], label [[BB2:%.*]]
14431443
; CHECK: bb1:
1444-
; CHECK-NEXT: [[C1:%.*]] = trunc nuw i8 [[X]] to i1
1445-
; CHECK-NEXT: call void @use(i1 [[C1]])
1444+
; CHECK-NEXT: call void @use(i1 true)
14461445
; CHECK-NEXT: ret void
14471446
; CHECK: bb2:
14481447
; CHECK-NEXT: ret void

0 commit comments

Comments
 (0)