[llvm] r307249 - Revert "Revert "Revert "[IndVars] Canonicalize comparisons between non-negative values and indvars"""

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 6 03:47:13 PDT 2017


Author: mkazantsev
Date: Thu Jul  6 03:47:13 2017
New Revision: 307249

URL: http://llvm.org/viewvc/llvm-project?rev=307249&view=rev
Log:
Revert "Revert "Revert "[IndVars] Canonicalize comparisons between non-negative values and indvars"""

It appears that the problem is still there. Needs more analysis to understand why
SaturatedMultiply test fails.

Removed:
    llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll
Modified:
    llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp
    llvm/trunk/test/Analysis/ScalarEvolution/guards.ll
    llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll
    llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll

Modified: llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp?rev=307249&r1=307248&r2=307249&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp Thu Jul  6 03:47:13 2017
@@ -264,10 +264,6 @@ void SimplifyIndvar::eliminateIVComparis
     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;
 

Modified: llvm/trunk/test/Analysis/ScalarEvolution/guards.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/guards.ll?rev=307249&r1=307248&r2=307249&view=diff
==============================================================================
--- llvm/trunk/test/Analysis/ScalarEvolution/guards.ll (original)
+++ llvm/trunk/test/Analysis/ScalarEvolution/guards.ll Thu Jul  6 03:47:13 2017
@@ -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:
 

Removed: llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll?rev=307248&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll (original)
+++ llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll (removed)
@@ -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
-}

Modified: llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll?rev=307249&r1=307248&r2=307249&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll (original)
+++ llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll Thu Jul  6 03:47:13 2017
@@ -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 nounw
 
 ; 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:

Modified: llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll?rev=307249&r1=307248&r2=307249&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll (original)
+++ llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll Thu Jul  6 03:47:13 2017
@@ -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
 




More information about the llvm-commits mailing list