From 590bfe8641631c136160fed7a9df9fe805938cbe Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sun, 14 Feb 2010 03:21:49 +0000 Subject: [PATCH] Actually, this code doesn't have to be quite so conservative in the no-TLI case. But it should still default to declining the transformation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96152 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopStrengthReduce.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 0c65e33c61d..b6ef718ce16 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -1503,11 +1503,7 @@ LSRInstance::OptimizeLoopTermCond() { // Conservatively avoid trying to use the post-inc value in non-latch // exits if there may be pre-inc users in intervening blocks. - if (LatchBlock != ExitingBlock) { - // Without target lowering, we won't be able to query about valid reuse. - if (!TLI) - continue; - + if (LatchBlock != ExitingBlock) for (IVUsers::const_iterator UI = IU.begin(), E = IU.end(); UI != E; ++UI) // Test if the use is reachable from the exiting block. This dominator // query is a conservative approximation of reachability. @@ -1535,6 +1531,10 @@ LSRInstance::OptimizeLoopTermCond() { if (D->getValue()->getValue().getMinSignedBits() >= 64 || D->getValue()->getValue().isMinSignedValue()) goto decline_post_inc; + // Without TLI, assume that any stride might be valid, and so any + // use might be shared. + if (!TLI) + goto decline_post_inc; // Check for possible scaled-address reuse. const Type *AccessTy = getAccessType(UI->getUser()); TargetLowering::AddrMode AM; @@ -1546,7 +1546,6 @@ LSRInstance::OptimizeLoopTermCond() { goto decline_post_inc; } } - } DEBUG(dbgs() << " Change loop exiting icmp to use postinc iv: " << *Cond << '\n');