projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[X86][Haswell][SchedModel] Add architecture specific scheduling models.
[oota-llvm.git]
/
lib
/
Analysis
/
LoopPass.cpp
diff --git
a/lib/Analysis/LoopPass.cpp
b/lib/Analysis/LoopPass.cpp
index db69e1325a8c6df69666dd0221825fd0e5f36fad..7bd866e73e10f370100e06ce148f34876deb60b6 100644
(file)
--- a/
lib/Analysis/LoopPass.cpp
+++ b/
lib/Analysis/LoopPass.cpp
@@
-15,10
+15,13
@@
#include "llvm/Analysis/LoopPass.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/Analysis/LoopPass.h"
#include "llvm/IR/IRPrintingPasses.h"
+#include "llvm/IR/LLVMContext.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Timer.h"
using namespace llvm;
#include "llvm/Support/Debug.h"
#include "llvm/Support/Timer.h"
using namespace llvm;
+#define DEBUG_TYPE "loop-pass-manager"
+
namespace {
/// PrintLoopPass - Print a Function corresponding to a Loop.
namespace {
/// PrintLoopPass - Print a Function corresponding to a Loop.
@@
-33,16
+36,19
@@
public:
PrintLoopPass(const std::string &B, raw_ostream &o)
: LoopPass(ID), Banner(B), Out(o) {}
PrintLoopPass(const std::string &B, raw_ostream &o)
: LoopPass(ID), Banner(B), Out(o) {}
- v
irtual void getAnalysisUsage(AnalysisUsage &AU) const
{
+ v
oid getAnalysisUsage(AnalysisUsage &AU) const override
{
AU.setPreservesAll();
}
AU.setPreservesAll();
}
- bool runOnLoop(Loop *L, LPPassManager &) {
+ bool runOnLoop(Loop *L, LPPassManager &)
override
{
Out << Banner;
for (Loop::block_iterator b = L->block_begin(), be = L->block_end();
b != be;
++b) {
Out << Banner;
for (Loop::block_iterator b = L->block_begin(), be = L->block_end();
b != be;
++b) {
- (*b)->print(Out);
+ if (*b)
+ (*b)->print(Out);
+ else
+ Out << "Printing <null> block";
}
return false;
}
}
return false;
}
@@
-61,8
+67,8
@@
LPPassManager::LPPassManager()
: FunctionPass(ID), PMDataManager() {
skipThisLoop = false;
redoThisLoop = false;
: FunctionPass(ID), PMDataManager() {
skipThisLoop = false;
redoThisLoop = false;
- LI =
NULL
;
- CurrentLoop =
NULL
;
+ LI =
nullptr
;
+ CurrentLoop =
nullptr
;
}
/// Delete loop from the loop queue and loop hierarchy (LoopInfo).
}
/// Delete loop from the loop queue and loop hierarchy (LoopInfo).
@@
-251,6
+257,8
@@
bool LPPassManager::runOnFunction(Function &F) {
// Then call the regular verifyAnalysis functions.
verifyPreservedAnalysis(P);
// Then call the regular verifyAnalysis functions.
verifyPreservedAnalysis(P);
+
+ F.getContext().yield();
}
removeNotPreservedAnalysis(P);
}
removeNotPreservedAnalysis(P);
@@
-368,8
+376,8
@@
void LoopPass::assignPassManager(PMStack &PMS,
// Containing function has Attribute::OptimizeNone and transformation
// passes should skip it.
// Containing function has Attribute::OptimizeNone and transformation
// passes should skip it.
-bool LoopPass::skipOptnoneFunction(Loop *L) const {
- Function *F = L->getHeader()->getParent();
+bool LoopPass::skipOptnoneFunction(
const
Loop *L) const {
+
const
Function *F = L->getHeader()->getParent();
if (F && F->hasFnAttribute(Attribute::OptimizeNone)) {
// FIXME: Report this to dbgs() only once per function.
DEBUG(dbgs() << "Skipping pass '" << getPassName()
if (F && F->hasFnAttribute(Attribute::OptimizeNone)) {
// FIXME: Report this to dbgs() only once per function.
DEBUG(dbgs() << "Skipping pass '" << getPassName()