diff options
author | Chris Lattner <sabre@nondot.org> | 2011-01-08 07:21:31 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-01-08 07:21:31 +0000 |
commit | 6ccb3652933bcdede2b2a53cf76ddd56ce9592a2 (patch) | |
tree | fe552447f7ad385c78aa004447cba8d4f2a6310c /lib | |
parent | da7a32c07d6916c873d798ccae300036bc0129cb (diff) | |
download | external_llvm-6ccb3652933bcdede2b2a53cf76ddd56ce9592a2.zip external_llvm-6ccb3652933bcdede2b2a53cf76ddd56ce9592a2.tar.gz external_llvm-6ccb3652933bcdede2b2a53cf76ddd56ce9592a2.tar.bz2 |
two minor changes: switch to the standard ValueToValueMapTy
map from ValueMapper.h (giving us access to its utilities)
and add a fastpath in the loop rotation code, avoiding expensive
ssa updator manipulation for values with nothing to update.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123057 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/LoopRotation.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/LoopRotation.cpp b/lib/Transforms/Scalar/LoopRotation.cpp index 1e655fd..ba1a279 100644 --- a/lib/Transforms/Scalar/LoopRotation.cpp +++ b/lib/Transforms/Scalar/LoopRotation.cpp @@ -21,10 +21,10 @@ #include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/SSAUpdater.h" +#include "llvm/Transforms/Utils/ValueMapper.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" -#include "llvm/ADT/SmallVector.h" using namespace llvm; #define MAX_HEADER_SIZE 16 @@ -177,7 +177,7 @@ bool LoopRotate::rotateLoop(Loop *Lp, LPPassManager &LPM) { // Begin by walking OrigHeader and populating ValueMap with an entry for // each Instruction. BasicBlock::iterator I = OrigHeader->begin(), E = OrigHeader->end(); - DenseMap<const Value *, Value *> ValueMap; + ValueToValueMapTy ValueMap; // For PHI nodes, the value available in OldPreHeader is just the // incoming value from OldPreHeader. @@ -233,6 +233,11 @@ bool LoopRotate::rotateLoop(Loop *Lp, LPPassManager &LPM) { Value *OrigHeaderVal = I; Value *OrigPreHeaderVal = ValueMap[OrigHeaderVal]; + // If there are no uses of the value (e.g. because it returns void), there + // is nothing to rewrite. + if (OrigHeaderVal->use_empty() && OrigPreHeaderVal->use_empty()) + continue; + // The value now exits in two versions: the initial value in the preheader // and the loop "next" value in the original header. SSA.Initialize(OrigHeaderVal->getType(), OrigHeaderVal->getName()); |