[llvm] r249431 - This patch builds on top of D13378 to handle constant condition.

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 7 07:56:35 PDT 2015


> On Oct 7, 2015, at 2:06 AM, James Molloy <james at jamesmolloy.co.uk> wrote:
> 
> Hi Mehdi,
> 
> I've reverted this in r249528 as it was causing failures in all our internal builders and here too: http://lab.llvm.org:8011/builders/clang-native-arm-lnt/builds/14453 <http://lab.llvm.org:8011/builders/clang-native-arm-lnt/builds/14453>
> 
> Apologies,

No need to apologize, thanks for reverting, I’ll try to repro and figure out what went wrong.

— 
Mehdi



> 
> James
> 
> On Tue, 6 Oct 2015 at 18:21 Mehdi Amini via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> Author: mehdi_amini
> Date: Tue Oct  6 12:19:20 2015
> New Revision: 249431
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=249431&view=rev <http://llvm.org/viewvc/llvm-project?rev=249431&view=rev>
> Log:
> This patch builds on top of D13378 to handle constant condition.
> 
> With this patch, clang -O3 optimizes correctly providing > 1000x speedup on this artificial benchmark):
> 
> for (a=0; a<n; a++)
>     for (b=0; b<n; b++)
>         for (c=0; c<n; c++)
>             for (d=0; d<n; d++)
>                 for (e=0; e<n; e++)
>                     for (f=0; f<n; f++)
>                         x++;
> From test-suite/SingleSource/Benchmarks/Shootout/nestedloop.c
> 
> Reviewers: sanjoyd
> 
> Differential Revision: http://reviews.llvm.org/D13390 <http://reviews.llvm.org/D13390>
> 
> From: Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>>
> 
> Added:
>     llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll
> Modified:
>     llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> 
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=249431&r1=249430&r2=249431&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=249431&r1=249430&r2=249431&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Tue Oct  6 12:19:20 2015
> @@ -3904,6 +3904,11 @@ const SCEV *ScalarEvolution::createNodeF
>                                                        Value *Cond,
>                                                        Value *TrueVal,
>                                                        Value *FalseVal) {
> +  // Handle "constant" branch or select. This can occur for instance when a
> +  // loop pass transforms an inner loop and moves on to process the outer loop.
> +  if (auto *CI = dyn_cast<ConstantInt>(Cond))
> +    return getSCEV(CI->isOne() ? TrueVal : FalseVal);
> +
>    // Try to match some simple smax or umax patterns.
>    auto *ICI = dyn_cast<ICmpInst>(Cond);
>    if (!ICI)
> 
> Added: llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll?rev=249431&view=auto <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll?rev=249431&view=auto>
> ==============================================================================
> --- llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll (added)
> +++ llvm/trunk/test/Analysis/ScalarEvolution/constant_condition.ll Tue Oct  6 12:19:20 2015
> @@ -0,0 +1,51 @@
> +; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s
> +
> +define i32 @branch_true(i32 %x, i32 %y) {
> +; CHECK-LABEL: Classifying expressions for: @branch_true
> + entry:
> +  br i1 true, label %add, label %merge
> +
> + add:
> +  %sum = add i32 %x, %y
> +  br label %merge
> +
> + merge:
> +  %v = phi i32 [ %sum, %add ], [ %x, %entry ]
> +; CHECK:  %v = phi i32 [ %sum, %add ], [ %x, %entry ]
> +; CHECK-NEXT:  -->  (%x + %y) U: full-set S: full-set
> +  ret i32 %v
> +}
> +
> +define i32 @branch_false(i32 %x, i32 %y) {
> +; CHECK-LABEL: Classifying expressions for: @branch_false
> + entry:
> +  br i1 false, label %add, label %merge
> +
> + add:
> +  %sum = add i32 %x, %y
> +  br label %merge
> +
> + merge:
> +  %v = phi i32 [ %sum, %add ], [ %x, %entry ]
> +; CHECK:  %v = phi i32 [ %sum, %add ], [ %x, %entry ]
> +; CHECK-NEXT:  -->  %x U: full-set S: full-set
> +  ret i32 %v
> +}
> +
> +define i32 @select_true(i32 %x, i32 %y) {
> +; CHECK-LABEL: Classifying expressions for: @select_true
> + entry:
> + %v = select i1 true, i32 %x, i32 %y
> +; CHECK:  %v = select i1 true, i32 %x, i32 %y
> +; CHECK-NEXT:  -->  %x U: full-set S: full-set
> +  ret i32 %v
> +}
> +
> +define i32 @select_false(i32 %x, i32 %y) {
> +; CHECK-LABEL: Classifying expressions for: @select_false
> + entry:
> + %v = select i1 false, i32 %x, i32 %y
> +; CHECK:  %v = select i1 false, i32 %x, i32 %y
> +; CHECK-NEXT:  -->  %y U: full-set S: full-set
> +  ret i32 %v
> +}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151007/c4ae11f2/attachment.html>


More information about the llvm-commits mailing list