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

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 6 04:54:45 PDT 2017


Hi Max,

Thanks for reverting.

As I told you before, the patch also broke some of the test-suite
apps, not just the SaturatedMultiply test:
See e.g. http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/6568

You should try to reproduce those failures and make sure they're fixed
before trying to commit again. If you don't have access to any
hardware on which these failures can be reproduced, you can send me
the updated patch and I can run a pre-commit for you on ARM.

Thanks,
Diana

On 6 July 2017 at 12:47, Max Kazantsev via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> 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
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list