mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Revert "[IndVars] Canonicalize comparisons between non-negative values and indvars"
This patch seems to cause failures of test MathExtras.SaturatingMultiply on multiple buildbots. Reverting until the reason of that is clarified. Differential Revision: https://reviews.llvm.org/rL307126 llvm-svn: 307135
This commit is contained in:
parent
067ddbd8c9
commit
ce80090e48
@ -262,10 +262,6 @@ void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand) {
|
||||
ICmp->setPredicate(InvariantPredicate);
|
||||
ICmp->setOperand(0, NewLHS);
|
||||
ICmp->setOperand(1, NewRHS);
|
||||
} else if (ICmpInst::isSigned(Pred) &&
|
||||
SE->isKnownNonNegative(S) && SE->isKnownNonNegative(X)) {
|
||||
DEBUG(dbgs() << "INDVARS: Turn to unsigned comparison: " << *ICmp << '\n');
|
||||
ICmp->setPredicate(ICmpInst::getUnsignedPredicate(Pred));
|
||||
} else
|
||||
return;
|
||||
|
||||
|
@ -19,7 +19,7 @@ entry:
|
||||
loop:
|
||||
; CHECK: loop:
|
||||
; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 true) [ "deopt"() ]
|
||||
; CHECK: %iv.inc.cmp = icmp ult i32 %iv.inc, %len
|
||||
; CHECK: %iv.inc.cmp = icmp slt i32 %iv.inc, %len
|
||||
; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %iv.inc.cmp) [ "deopt"() ]
|
||||
; CHECK: leave:
|
||||
|
||||
@ -41,7 +41,7 @@ leave:
|
||||
|
||||
define void @test_2(i32 %n, i32* %len_buf) {
|
||||
; CHECK-LABEL: @test_2(
|
||||
; CHECK: [[LEN_ZEXT:%[^ ]+]] = zext i32 %len to i64
|
||||
; CHECK: [[LEN_SEXT:%[^ ]+]] = sext i32 %len to i64
|
||||
; CHECK: br label %loop
|
||||
|
||||
entry:
|
||||
@ -52,7 +52,7 @@ loop:
|
||||
; CHECK: loop:
|
||||
; CHECK: %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ 0, %entry ]
|
||||
; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
||||
; CHECK: %iv.inc.cmp = icmp ult i64 %indvars.iv.next, [[LEN_ZEXT]]
|
||||
; CHECK: %iv.inc.cmp = icmp slt i64 %indvars.iv.next, [[LEN_SEXT]]
|
||||
; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %iv.inc.cmp) [ "deopt"() ]
|
||||
; CHECK: leave:
|
||||
|
||||
|
@ -1,52 +0,0 @@
|
||||
; RUN: opt -S -indvars < %s | FileCheck %s
|
||||
|
||||
; Check that we replace signed comparisons between non-negative values with
|
||||
; unsigned comparisons if we can.
|
||||
|
||||
target datalayout = "n8:16:32:64"
|
||||
|
||||
define i32 @test_01(i32 %a, i32 %b, i32* %p) {
|
||||
|
||||
; CHECK-LABEL: @test_01(
|
||||
; CHECK-NOT: icmp slt
|
||||
; CHECK: %cmp1 = icmp ult i32 %iv, 100
|
||||
; CHECK: %cmp2 = icmp ult i32 %iv, 100
|
||||
; CHECK-NOT: %cmp3
|
||||
; CHECK: %exitcond = icmp ne i32 %iv.next, 1000
|
||||
|
||||
entry:
|
||||
br label %loop.entry
|
||||
|
||||
loop.entry:
|
||||
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.be ]
|
||||
%cmp1 = icmp slt i32 %iv, 100
|
||||
br i1 %cmp1, label %b1, label %b2
|
||||
|
||||
b1:
|
||||
store i32 %iv, i32* %p
|
||||
br label %merge
|
||||
|
||||
b2:
|
||||
store i32 %a, i32* %p
|
||||
br label %merge
|
||||
|
||||
merge:
|
||||
%cmp2 = icmp ult i32 %iv, 100
|
||||
br i1 %cmp2, label %b3, label %b4
|
||||
|
||||
b3:
|
||||
store i32 %iv, i32* %p
|
||||
br label %loop.be
|
||||
|
||||
b4:
|
||||
store i32 %b, i32* %p
|
||||
br label %loop.be
|
||||
|
||||
loop.be:
|
||||
%iv.next = add i32 %iv, 1
|
||||
%cmp3 = icmp slt i32 %iv.next, 1000
|
||||
br i1 %cmp3, label %loop.entry, label %exit
|
||||
|
||||
exit:
|
||||
ret i32 %iv
|
||||
}
|
@ -111,7 +111,7 @@ return:
|
||||
; Indvars should not turn the second loop into an infinite one.
|
||||
|
||||
; CHECK-LABEL: @func_11(
|
||||
; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10
|
||||
; CHECK: %tmp5 = icmp slt i32 %__key6.0, 10
|
||||
; CHECK-NOT: br i1 true, label %noassert68, label %unrolledend
|
||||
|
||||
define i32 @func_11() nounwind uwtable {
|
||||
@ -163,7 +163,7 @@ declare void @llvm.trap() noreturn nounwind
|
||||
|
||||
; In this case the second loop only has a single iteration, fold the header away
|
||||
; CHECK-LABEL: @func_12(
|
||||
; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10
|
||||
; CHECK: %tmp5 = icmp slt i32 %__key6.0, 10
|
||||
; CHECK: br i1 true, label %noassert68, label %unrolledend
|
||||
define i32 @func_12() nounwind uwtable {
|
||||
entry:
|
||||
|
@ -64,7 +64,7 @@ for.end:
|
||||
; CHECK-LABEL: @test2
|
||||
; CHECK: for.body4.us
|
||||
; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
||||
; CHECK: %cmp2.us = icmp ult i64
|
||||
; CHECK: %cmp2.us = icmp slt i64
|
||||
; CHECK-NOT: %2 = trunc i64 %indvars.iv.next to i32
|
||||
; CHECK-NOT: %cmp2.us = icmp slt i32
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user