From 70ff4cf1baf8cce04b38752ea485425782fb07b8 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 16 Sep 2008 18:52:57 +0000 Subject: [PATCH] Finally re-apply r46959. This is made feasible by the combination of r56230, r56232, and r56246. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56247 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/ScalarEvolution.cpp | 4 ++-- test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll | 1 - test/Analysis/ScalarEvolution/avoid-smax-1.ll | 6 ++++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 4e85e90e9e0..51258044691 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -1981,8 +1981,8 @@ SCEVHandle ScalarEvolutionsImpl::ComputeIterationCount(const Loop *L) { // At this point, we would like to compute how many iterations of the // loop the predicate will return true for these inputs. - if (isa(LHS) && !isa(RHS)) { - // If there is a constant, force it into the RHS. + if (LHS->isLoopInvariant(L) && !RHS->isLoopInvariant(L)) { + // If there is a loop-invariant, force it into the RHS. std::swap(LHS, RHS); Cond = ICmpInst::getSwappedPredicate(Cond); } diff --git a/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll b/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll index 119e1659178..a01007d8c2a 100644 --- a/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll +++ b/test/Analysis/ScalarEvolution/2008-02-11-ReversedCondition.ll @@ -1,5 +1,4 @@ ; RUN: llvm-as < %s | opt -scalar-evolution -analyze | grep {Loop header: (0 smax %n) iterations!} -; XFAIL: * define void @foo(i32 %n) { entry: diff --git a/test/Analysis/ScalarEvolution/avoid-smax-1.ll b/test/Analysis/ScalarEvolution/avoid-smax-1.ll index 5fcbf62d3d5..b2d0ba03195 100644 --- a/test/Analysis/ScalarEvolution/avoid-smax-1.ll +++ b/test/Analysis/ScalarEvolution/avoid-smax-1.ll @@ -1,11 +1,13 @@ ; RUN: llvm-as < %s | opt -indvars | llvm-dis > %t -; RUN: not grep select %t +; RUN: grep select %t | count 2 ; RUN: grep {icmp ne i32.\* %w } %t ; Indvars should be able to insert a canonical induction variable ; for the bb6 loop without using a maximum calculation (icmp, select) ; because it should be able to prove that the comparison is guarded -; by an appropriate conditional branch. +; by an appropriate conditional branch. Unfortunately, indvars is +; not yet able to find the comparison for the other too loops in +; this testcase. target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" target triple = "i386-apple-darwin9" -- 2.11.0