Skip to content

Commit dc3c046

Browse files
committed
[IndVarSimplify] Handle the case where both operands are the same when widening IV
1 parent 9207e62 commit dc3c046

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

llvm/lib/Transforms/Utils/SimplifyIndVar.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,6 +1743,9 @@ bool WidenIV::widenWithVariantUse(WidenIV::NarrowIVDefUse DU) {
17431743
// TODO: Support case for NarrowDef = NarrowUse->getOperand(1).
17441744
if (NarrowUse->getOperand(0) != NarrowDef)
17451745
return false;
1746+
// We cannot use a different extend kind for the same operand.
1747+
if (NarrowUse->getOperand(1) == NarrowDef)
1748+
return false;
17461749
if (!SE->isKnownNegative(RHS))
17471750
return false;
17481751
bool ProvedSubNUW = SE->isKnownPredicateAt(ICmpInst::ICMP_UGE, LHS,

llvm/test/Transforms/IndVarSimplify/pr135182.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ define i32 @pr135182() {
1010
; CHECK: [[FOR_BODY]]:
1111
; CHECK-NEXT: br i1 false, label %[[FOR_BODY]], label %[[FOR_END:.*]]
1212
; CHECK: [[FOR_END]]:
13-
; CHECK-NEXT: ret i32 131048
13+
; CHECK-NEXT: ret i32 65512
1414
;
1515
entry:
1616
br label %for.body

0 commit comments

Comments
 (0)