AddAffectedFromEq(A);
AddAffectedFromEq(B);
}
+
+ Value *X;
+ // Handle (A + C1) u< C2, which is the canonical form of A > C3 && A < C4,
+ // and recognized by LVI at least.
+ if (Pred == ICmpInst::ICMP_ULT &&
+ match(A, m_Add(m_Value(X), m_ConstantInt())) &&
+ match(B, m_ConstantInt()))
+ AddAffected(X);
}
}
; CHECK-NEXT: [[IDX_OFF1:%.*]] = add i64 [[IDX:%.*]], -5
; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i64 [[IDX_OFF1]], 3
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP1]])
-; CHECK-NEXT: [[IDX_OFF2:%.*]] = add i64 [[IDX]], -1
-; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i64 [[IDX_OFF2]], 10
-; CHECK-NEXT: ret i1 [[CMP2]]
+; CHECK-NEXT: [[IDX_OFF2:%.*]] = add nsw i64 [[IDX]], -1
+; CHECK-NEXT: ret i1 true
;
%idx.off1 = add i64 %idx, -5
%cmp1 = icmp ult i64 %idx.off1, 3