<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:2.0cm 42.5pt 2.0cm 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="RU" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Hello,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Thanks for your help! I was still unable to reproduce the problem with saturated mul on my side, but apparently have found
 a bug in code and was able to construct a test where the problem shows up. The fixed version of the patch is on review as
<a href="https://reviews.llvm.org/D35107">https://reviews.llvm.org/D35107</a> . Could you please be so kind and check whether the problem is still there with this patch? I'd be very grateful for that!<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Have a nice day,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US">Max<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> NAKAMURA Takumi [mailto:geek4civic@gmail.com]
<br>
<b>Sent:</b> Thursday, July 6, 2017 7:27 PM<br>
<b>To:</b> Diana Picus <diana.picus@linaro.org>; Maxim Kazantsev <max.kazantsev@azul.com><br>
<b>Cc:</b> llvm-commits <llvm-commits@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm] r307249 - Revert "Revert "Revert "[IndVars] Canonicalize comparisons between non-negative values and indvars"""<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">FYI, I can reproduce it locally. <a href="http://bb.pgr.jp/builders/bootstrap-clang-libcxx-lld-i686-linux/builds/84">http://bb.pgr.jp/builders/bootstrap-clang-libcxx-lld-i686-linux/builds/84</a><o:p></o:p></p>
<div>
<p class="MsoNormal">(It's not i686 but x86-64, due to issues...)<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, Jul 6, 2017 at 8:55 PM Diana Picus via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">Hi Max,<br>
<br>
Thanks for reverting.<br>
<br>
As I told you before, the patch also broke some of the test-suite<br>
apps, not just the SaturatedMultiply test:<br>
See e.g. <a href="http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/6568" target="_blank">
http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/6568</a><br>
<br>
You should try to reproduce those failures and make sure they're fixed<br>
before trying to commit again. If you don't have access to any<br>
hardware on which these failures can be reproduced, you can send me<br>
the updated patch and I can run a pre-commit for you on ARM.<br>
<br>
Thanks,<br>
Diana<br>
<br>
On 6 July 2017 at 12:47, Max Kazantsev via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: mkazantsev<br>
> Date: Thu Jul  6 03:47:13 2017<br>
> New Revision: 307249<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=307249&view=rev" target="_blank">
http://llvm.org/viewvc/llvm-project?rev=307249&view=rev</a><br>
> Log:<br>
> Revert "Revert "Revert "[IndVars] Canonicalize comparisons between non-negative values and indvars"""<br>
><br>
> It appears that the problem is still there. Needs more analysis to understand why<br>
> SaturatedMultiply test fails.<br>
><br>
> Removed:<br>
>     llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll<br>
> Modified:<br>
>     llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp<br>
>     llvm/trunk/test/Analysis/ScalarEvolution/guards.ll<br>
>     llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll<br>
>     llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll<br>
><br>
> Modified: llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp?rev=307249&r1=307248&r2=307249&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp?rev=307249&r1=307248&r2=307249&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp (original)<br>
> +++ llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp Thu Jul  6 03:47:13 2017<br>
> @@ -264,10 +264,6 @@ void SimplifyIndvar::eliminateIVComparis<br>
>      ICmp->setPredicate(InvariantPredicate);<br>
>      ICmp->setOperand(0, NewLHS);<br>
>      ICmp->setOperand(1, NewRHS);<br>
> -  } else if (ICmpInst::isSigned(Pred) &&<br>
> -             SE->isKnownNonNegative(S) && SE->isKnownNonNegative(X)) {<br>
> -    DEBUG(dbgs() << "INDVARS: Turn to unsigned comparison: " << *ICmp << '\n');<br>
> -    ICmp->setPredicate(ICmpInst::getUnsignedPredicate(Pred));<br>
>    } else<br>
>      return;<br>
><br>
><br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/guards.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/guards.ll?rev=307249&r1=307248&r2=307249&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/guards.ll?rev=307249&r1=307248&r2=307249&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/guards.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/guards.ll Thu Jul  6 03:47:13 2017<br>
> @@ -19,7 +19,7 @@ entry:<br>
>  loop:<br>
>  ; CHECK: loop:<br>
>  ; CHECK:  call void (i1, ...) @llvm.experimental.guard(i1 true) [ "deopt"() ]<br>
> -; CHECK:  %iv.inc.cmp = icmp ult i32 %iv.inc, %len<br>
> +; CHECK:  %iv.inc.cmp = icmp slt i32 %iv.inc, %len<br>
>  ; CHECK:  call void (i1, ...) @llvm.experimental.guard(i1 %iv.inc.cmp) [ "deopt"() ]<br>
>  ; CHECK: leave:<br>
><br>
> @@ -41,7 +41,7 @@ leave:<br>
><br>
>  define void @test_2(i32 %n, i32* %len_buf) {<br>
>  ; CHECK-LABEL: @test_2(<br>
> -; CHECK:  [[LEN_ZEXT:%[^ ]+]] = zext i32 %len to i64<br>
> +; CHECK:  [[LEN_SEXT:%[^ ]+]] = sext i32 %len to i64<br>
>  ; CHECK:  br label %loop<br>
><br>
>  entry:<br>
> @@ -52,7 +52,7 @@ loop:<br>
>  ; CHECK: loop:<br>
>  ; CHECK:  %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ 0, %entry ]<br>
>  ; CHECK:  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1<br>
> -; CHECK:  %iv.inc.cmp = icmp ult i64 %indvars.iv.next, [[LEN_ZEXT]]<br>
> +; CHECK:  %iv.inc.cmp = icmp slt i64 %indvars.iv.next, [[LEN_SEXT]]<br>
>  ; CHECK:  call void (i1, ...) @llvm.experimental.guard(i1 %iv.inc.cmp) [ "deopt"() ]<br>
>  ; CHECK: leave:<br>
><br>
><br>
> Removed: llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll?rev=307248&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll?rev=307248&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll (original)<br>
> +++ llvm/trunk/test/Transforms/IndVarSimplify/canonicalize-cmp.ll (removed)<br>
> @@ -1,52 +0,0 @@<br>
> -; RUN: opt -S -indvars < %s | FileCheck %s<br>
> -<br>
> -; Check that we replace signed comparisons between non-negative values with<br>
> -; unsigned comparisons if we can.<br>
> -<br>
> -target datalayout = "n8:16:32:64"<br>
> -<br>
> -define i32 @test_01(i32 %a, i32 %b, i32* %p) {<br>
> -<br>
> -; CHECK-LABEL: @test_01(<br>
> -; CHECK-NOT:   icmp slt<br>
> -; CHECK:       %cmp1 = icmp ult i32 %iv, 100<br>
> -; CHECK:       %cmp2 = icmp ult i32 %iv, 100<br>
> -; CHECK-NOT:   %cmp3<br>
> -; CHECK:       %exitcond = icmp ne i32 %iv.next, 1000<br>
> -<br>
> -entry:<br>
> -  br label %loop.entry<br>
> -<br>
> -loop.entry:<br>
> -  %iv = phi i32 [ 0, %entry ], [ %iv.next, %<a href="http://loop.be" target="_blank">loop.be</a> ]<br>
> -  %cmp1 = icmp slt i32 %iv, 100<br>
> -  br i1 %cmp1, label %b1, label %b2<br>
> -<br>
> -b1:<br>
> -  store i32 %iv, i32* %p<br>
> -  br label %merge<br>
> -<br>
> -b2:<br>
> -  store i32 %a, i32* %p<br>
> -  br label %merge<br>
> -<br>
> -merge:<br>
> -  %cmp2 = icmp ult i32 %iv, 100<br>
> -  br i1 %cmp2, label %b3, label %b4<br>
> -<br>
> -b3:<br>
> -  store i32 %iv, i32* %p<br>
> -  br label %<a href="http://loop.be" target="_blank">loop.be</a><br>
> -<br>
> -b4:<br>
> -  store i32 %b, i32* %p<br>
> -  br label %<a href="http://loop.be" target="_blank">loop.be</a><br>
> -<br>
> -<a href="http://loop.be" target="_blank">loop.be</a>:<br>
> -  %iv.next = add i32 %iv, 1<br>
> -  %cmp3 = icmp slt i32 %iv.next, 1000<br>
> -  br i1 %cmp3, label %loop.entry, label %exit<br>
> -<br>
> -exit:<br>
> -  ret i32 %iv<br>
> -}<br>
><br>
> Modified: llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll?rev=307249&r1=307248&r2=307249&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll?rev=307249&r1=307248&r2=307249&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll (original)<br>
> +++ llvm/trunk/test/Transforms/IndVarSimplify/eliminate-comparison.ll Thu Jul  6 03:47:13 2017<br>
> @@ -111,7 +111,7 @@ return:<br>
>  ; Indvars should not turn the second loop into an infinite one.<br>
><br>
>  ; CHECK-LABEL: @func_11(<br>
> -; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10<br>
> +; CHECK: %tmp5 = icmp slt i32 %__key6.0, 10<br>
>  ; CHECK-NOT: br i1 true, label %noassert68, label %unrolledend<br>
><br>
>  define i32 @func_11() nounwind uwtable {<br>
> @@ -163,7 +163,7 @@ declare void @llvm.trap() noreturn nounw<br>
><br>
>  ; In this case the second loop only has a single iteration, fold the header away<br>
>  ; CHECK-LABEL: @func_12(<br>
> -; CHECK: %tmp5 = icmp ult i32 %__key6.0, 10<br>
> +; CHECK: %tmp5 = icmp slt i32 %__key6.0, 10<br>
>  ; CHECK: br i1 true, label %noassert68, label %unrolledend<br>
>  define i32 @func_12() nounwind uwtable {<br>
>  entry:<br>
><br>
> Modified: llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll?rev=307249&r1=307248&r2=307249&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll?rev=307249&r1=307248&r2=307249&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll (original)<br>
> +++ llvm/trunk/test/Transforms/IndVarSimplify/widen-loop-comp.ll Thu Jul  6 03:47:13 2017<br>
> @@ -64,7 +64,7 @@ for.end:<br>
>  ; CHECK-LABEL: @test2<br>
>  ; CHECK: <a href="http://for.body4.us" target="_blank">for.body4.us</a><br>
>  ; CHECK: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1<br>
> -; CHECK: %<a href="http://cmp2.us" target="_blank">cmp2.us</a> = icmp ult i64<br>
> +; CHECK: %<a href="http://cmp2.us" target="_blank">cmp2.us</a> = icmp slt i64<br>
>  ; CHECK-NOT: %2 = trunc i64 %indvars.iv.next to i32<br>
>  ; CHECK-NOT: %<a href="http://cmp2.us" target="_blank">cmp2.us</a> = icmp slt i32<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</body>
</html>