[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 11:04:34 PDT 2015


Indeed it fixes it. Thanks!

— 
Mehdi

> On Oct 7, 2015, at 10:42 AM, Sanjoy Das <sanjoy at playingwithpointers.com> wrote:
> 
> I just checked in D13461 -- can you try un-reverting this change now and see if still crashes?
> 
> I really should have checked in D13461 early yesterday, sorry!
> 
> -- Sanjoy
> 
> Sanjoy Das wrote:
>> I'm pretty sure that the crash is fixed by this: http://reviews.llvm.org/D13461 -- indvars RAUW'ed a LCSSA phi with a
>> use outside the loop.
>> 
>> Mehdi Amini via llvm-commits wrote:
>>> 
>>>> On Oct 7, 2015, at 2:06 AM, James Molloy <james at jamesmolloy.co.uk <mailto: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
>>>> 
>>>> 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
>>>> 
>>>> 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
>>>> 
>>> 
>>> _______________________________________________
>>> 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