indvars --disable-iv-rewrite: sever ties with IVUsers.

llvm-svn: 133988
This commit is contained in:
Andrew Trick 2011-06-28 03:01:46 +00:00
parent 3ff13579f9
commit 56b315a9cf
2 changed files with 6 additions and 21 deletions

View File

@ -21,7 +21,6 @@
#include "llvm/Analysis/Dominators.h" #include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/LoopPass.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Target/TargetData.h" #include "llvm/Target/TargetData.h"
#include "llvm/Assembly/Writer.h" #include "llvm/Assembly/Writer.h"
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
@ -39,15 +38,6 @@ INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
INITIALIZE_PASS_END(IVUsers, "iv-users", INITIALIZE_PASS_END(IVUsers, "iv-users",
"Induction Variable Users", false, true) "Induction Variable Users", false, true)
// IVUsers behavior currently depends on this temporary indvars mode. The
// option must be defined upstream from its uses.
namespace llvm {
bool DisableIVRewrite = false;
}
cl::opt<bool, true> DisableIVRewriteOpt(
"disable-iv-rewrite", cl::Hidden, cl::location(llvm::DisableIVRewrite),
cl::desc("Disable canonical induction variable rewriting"));
Pass *llvm::createIVUsersPass() { Pass *llvm::createIVUsersPass() {
return new IVUsers(); return new IVUsers();
} }
@ -100,11 +90,6 @@ bool IVUsers::AddUsersIfInteresting(Instruction *I) {
if (Width > 64 || (TD && !TD->isLegalInteger(Width))) if (Width > 64 || (TD && !TD->isLegalInteger(Width)))
return false; return false;
// We expect Sign/Zero extension to be eliminated from the IR before analyzing
// any downstream uses.
if (DisableIVRewrite && (isa<SExtInst>(I) || isa<ZExtInst>(I)))
return false;
if (!Processed.insert(I)) if (!Processed.insert(I))
return true; // Instruction already handled. return true; // Instruction already handled.

View File

@ -52,6 +52,7 @@
#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/LoopPass.h"
#include "llvm/Support/CFG.h" #include "llvm/Support/CFG.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h" #include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/Local.h" #include "llvm/Transforms/Utils/Local.h"
@ -72,11 +73,9 @@ STATISTIC(NumElimExt , "Number of IV sign/zero extends eliminated");
STATISTIC(NumElimRem , "Number of IV remainder operations eliminated"); STATISTIC(NumElimRem , "Number of IV remainder operations eliminated");
STATISTIC(NumElimCmp , "Number of IV comparisons eliminated"); STATISTIC(NumElimCmp , "Number of IV comparisons eliminated");
// DisableIVRewrite mode currently affects IVUsers, so is defined in libAnalysis static cl::opt<bool> DisableIVRewrite(
// and referenced here. "disable-iv-rewrite", cl::Hidden,
namespace llvm { cl::desc("Disable canonical induction variable rewriting"));
extern bool DisableIVRewrite;
}
namespace { namespace {
class IndVarSimplify : public LoopPass { class IndVarSimplify : public LoopPass {
@ -104,7 +103,8 @@ namespace {
AU.addRequired<ScalarEvolution>(); AU.addRequired<ScalarEvolution>();
AU.addRequiredID(LoopSimplifyID); AU.addRequiredID(LoopSimplifyID);
AU.addRequiredID(LCSSAID); AU.addRequiredID(LCSSAID);
AU.addRequired<IVUsers>(); if (!DisableIVRewrite)
AU.addRequired<IVUsers>();
AU.addPreserved<ScalarEvolution>(); AU.addPreserved<ScalarEvolution>();
AU.addPreservedID(LoopSimplifyID); AU.addPreservedID(LoopSimplifyID);
AU.addPreservedID(LCSSAID); AU.addPreservedID(LCSSAID);