Skip to content

Commit 6b1a01b

Browse files
author
git apple-llvm automerger
committed
Merge commit '34e60c20f6dc' from swift/release/5.3 into swift/master
2 parents 0325a2e + 34e60c2 commit 6b1a01b

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1758,7 +1758,7 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) {
17581758
Constant *C2;
17591759

17601760
// C-(C2-X) --> X+(C-C2)
1761-
if (match(Op1, m_Sub(m_Constant(C2), m_Value(X))))
1761+
if (match(Op1, m_Sub(m_Constant(C2), m_Value(X))) && !isa<ConstantExpr>(C2))
17621762
return BinaryOperator::CreateAdd(X, ConstantExpr::getSub(C, C2));
17631763

17641764
// C-(X+C2) --> (C-C2)-X

llvm/test/Transforms/InstCombine/abs-1.ll

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,3 +569,21 @@ define i1 @abs_must_be_positive(i32 %x) {
569569
ret i1 %c2
570570
}
571571

572+
@g = external global i64
573+
574+
; PR45539 - https://bugs.llvm.org/show_bug.cgi?id=45539
575+
576+
define i64 @infinite_loop_constant_expression_abs(i64 %arg) {
577+
; CHECK-LABEL: @infinite_loop_constant_expression_abs(
578+
; CHECK-NEXT: [[T:%.*]] = sub i64 ptrtoint (i64* @g to i64), [[ARG:%.*]]
579+
; CHECK-NEXT: [[T1:%.*]] = icmp slt i64 [[T]], 0
580+
; CHECK-NEXT: [[T2:%.*]] = sub nsw i64 0, [[T]]
581+
; CHECK-NEXT: [[T3:%.*]] = select i1 [[T1]], i64 [[T2]], i64 [[T]]
582+
; CHECK-NEXT: ret i64 [[T3]]
583+
;
584+
%t = sub i64 ptrtoint (i64* @g to i64), %arg
585+
%t1 = icmp slt i64 %t, 0
586+
%t2 = sub nsw i64 0, %t
587+
%t3 = select i1 %t1, i64 %t2, i64 %t
588+
ret i64 %t3
589+
}

0 commit comments

Comments
 (0)