diff options
| author | Mehdi Amini <mehdi.amini@apple.com> | 2015-10-06 17:19:20 +0000 |
|---|---|---|
| committer | Mehdi Amini <mehdi.amini@apple.com> | 2015-10-06 17:19:20 +0000 |
| commit | cf2513b352f846589051f01d1825df4e13cb529e (patch) | |
| tree | 83890c5e48ccfa570e9d12c9a9d14aa67a185a0b /llvm/lib | |
| parent | b92b47c6fffa36a87e8d1b99b2c8afb6e54fdf4b (diff) | |
| download | bcm5719-llvm-cf2513b352f846589051f01d1825df4e13cb529e.tar.gz bcm5719-llvm-cf2513b352f846589051f01d1825df4e13cb529e.zip | |
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@apple.com>
llvm-svn: 249431
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 9715d83fd10..caa0899f6a9 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -3904,6 +3904,11 @@ const SCEV *ScalarEvolution::createNodeForSelectOrPHI(Instruction *I, 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) |

