mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-18 12:29:21 +00:00
Patch #7 from Saem:
"added the asserts and casts, fixed the comments and started the break down of the larger methods. A few more patches and the breakdown should be complete." git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25142 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5fe0e28650
commit
d659360e58
@ -123,8 +123,6 @@ public:
|
|||||||
|
|
||||||
static TimingInfo *TheTimeInfo;
|
static TimingInfo *TheTimeInfo;
|
||||||
|
|
||||||
// FIXME:I'm not sure if this is the best way, but this was the only way I
|
|
||||||
// could get around the recursive template issues. -- Saem
|
|
||||||
struct BBTraits {
|
struct BBTraits {
|
||||||
typedef BasicBlock UnitType;
|
typedef BasicBlock UnitType;
|
||||||
|
|
||||||
@ -138,7 +136,7 @@ struct BBTraits {
|
|||||||
typedef BasicBlockPassManager SubPassClass;
|
typedef BasicBlockPassManager SubPassClass;
|
||||||
|
|
||||||
// BatcherClass - The type to use for collation of subtypes... This class is
|
// BatcherClass - The type to use for collation of subtypes... This class is
|
||||||
// never instantiated for the PassManager<BasicBlock>, but it must be an
|
// never instantiated for the BasicBlockPassManager, but it must be an
|
||||||
// instance of PassClass to typecheck.
|
// instance of PassClass to typecheck.
|
||||||
//
|
//
|
||||||
typedef PassClass BatcherClass;
|
typedef PassClass BatcherClass;
|
||||||
@ -287,7 +285,10 @@ public:
|
|||||||
LastUserOf[I->second].push_back(I->first);
|
LastUserOf[I->second].push_back(I->first);
|
||||||
|
|
||||||
// Output debug information...
|
// Output debug information...
|
||||||
if (Parent == 0) PMDebug::PerformPassStartupStuff((dynamic_cast<PassClass*>(this)));
|
assert(dynamic_cast<PassClass*>(this) &&
|
||||||
|
"It wasn't the PassClass I thought it was");
|
||||||
|
if (Parent == 0)
|
||||||
|
PMDebug::PerformPassStartupStuff((dynamic_cast<PassClass*>(this)));
|
||||||
|
|
||||||
// Run all of the passes
|
// Run all of the passes
|
||||||
for (unsigned i = 0, e = Passes.size(); i < e; ++i) {
|
for (unsigned i = 0, e = Passes.size(); i < e; ++i) {
|
||||||
@ -491,6 +492,8 @@ public:
|
|||||||
// frees the analysis AFTER this pass manager runs.
|
// frees the analysis AFTER this pass manager runs.
|
||||||
//
|
//
|
||||||
if (Parent) {
|
if (Parent) {
|
||||||
|
assert(dynamic_cast<Pass*>(this) &&
|
||||||
|
"It wasn't the Pass type I thought it was.");
|
||||||
Parent->markPassUsed(P, dynamic_cast<Pass*>(this));
|
Parent->markPassUsed(P, dynamic_cast<Pass*>(this));
|
||||||
} else {
|
} else {
|
||||||
assert(getAnalysisOrNullUp(P) &&
|
assert(getAnalysisOrNullUp(P) &&
|
||||||
@ -508,6 +511,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual unsigned getNumContainedPasses() const { return Passes.size(); }
|
virtual unsigned getNumContainedPasses() const { return Passes.size(); }
|
||||||
|
|
||||||
virtual const Pass *getContainedPass(unsigned N) const {
|
virtual const Pass *getContainedPass(unsigned N) const {
|
||||||
assert(N < Passes.size() && "Pass number out of range!");
|
assert(N < Passes.size() && "Pass number out of range!");
|
||||||
return Passes[N];
|
return Passes[N];
|
||||||
@ -522,24 +526,16 @@ public:
|
|||||||
// Get information about what analyses the pass uses...
|
// Get information about what analyses the pass uses...
|
||||||
AnalysisUsage AnUsage;
|
AnalysisUsage AnUsage;
|
||||||
P->getAnalysisUsage(AnUsage);
|
P->getAnalysisUsage(AnUsage);
|
||||||
const std::vector<AnalysisID> &Required = AnUsage.getRequiredSet();
|
|
||||||
|
addRequiredPasses(AnUsage.getRequiredSet());
|
||||||
// Loop over all of the analyses used by this pass,
|
|
||||||
for (std::vector<AnalysisID>::const_iterator I = Required.begin(),
|
|
||||||
E = Required.end(); I != E; ++I) {
|
|
||||||
if (getAnalysisOrNullDown(*I) == 0) {
|
|
||||||
Pass *AP = (*I)->createPass();
|
|
||||||
if (ImmutablePass *IP = dynamic_cast<ImmutablePass *> (AP)) { add(IP); }
|
|
||||||
else if (PassClass *RP = dynamic_cast<PassClass *> (AP)) { add(RP); }
|
|
||||||
else { assert (0 && "Wrong kind of pass for this PassManager"); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tell the pass to add itself to this PassManager... the way it does so
|
// Tell the pass to add itself to this PassManager... the way it does so
|
||||||
// depends on the class of the pass, and is critical to laying out passes in
|
// depends on the class of the pass, and is critical to laying out passes in
|
||||||
// an optimal order..
|
// an optimal order..
|
||||||
//
|
//
|
||||||
P->addToPassManager(dynamic_cast<PMType*>(this), AnUsage);
|
assert(dynamic_cast<PMType*>(this) &&
|
||||||
|
"It wasn't the right passmanager type.");
|
||||||
|
P->addToPassManager(static_cast<PMType*>(this), AnUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add - H4x0r an ImmutablePass into a PassManager that might not be
|
// add - H4x0r an ImmutablePass into a PassManager that might not be
|
||||||
@ -549,19 +545,9 @@ public:
|
|||||||
// Get information about what analyses the pass uses...
|
// Get information about what analyses the pass uses...
|
||||||
AnalysisUsage AnUsage;
|
AnalysisUsage AnUsage;
|
||||||
P->getAnalysisUsage(AnUsage);
|
P->getAnalysisUsage(AnUsage);
|
||||||
const std::vector<AnalysisID> &Required = AnUsage.getRequiredSet();
|
|
||||||
|
addRequiredPasses(AnUsage.getRequiredSet());
|
||||||
// Loop over all of the analyses used by this pass,
|
|
||||||
for (std::vector<AnalysisID>::const_iterator I = Required.begin(),
|
|
||||||
E = Required.end(); I != E; ++I) {
|
|
||||||
if (getAnalysisOrNullDown(*I) == 0) {
|
|
||||||
Pass *AP = (*I)->createPass();
|
|
||||||
if (ImmutablePass *IP = dynamic_cast<ImmutablePass *> (AP)) add(IP);
|
|
||||||
else if (PassClass *RP = dynamic_cast<PassClass *> (AP)) add(RP);
|
|
||||||
else assert (0 && "Wrong kind of pass for this PassManager");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the ImmutablePass to this PassManager.
|
// Add the ImmutablePass to this PassManager.
|
||||||
addPass(P, AnUsage);
|
addPass(P, AnUsage);
|
||||||
}
|
}
|
||||||
@ -581,11 +567,10 @@ private:
|
|||||||
const std::vector<AnalysisID> &RequiredSet = AnUsage.getRequiredSet();
|
const std::vector<AnalysisID> &RequiredSet = AnUsage.getRequiredSet();
|
||||||
|
|
||||||
// FIXME: If this pass being added isn't killed by any of the passes in the
|
// FIXME: If this pass being added isn't killed by any of the passes in the
|
||||||
// batcher class then we can reorder to pass to execute before the batcher
|
// batcher class then we can reorder the pass to execute before the batcher
|
||||||
// does, which will potentially allow us to batch more passes!
|
// does, which will potentially allow us to batch more passes!
|
||||||
//
|
//
|
||||||
// const std::vector<AnalysisID> &ProvidedSet = AnUsage.getProvidedSet();
|
if (Batcher)
|
||||||
if (Batcher /*&& ProvidedSet.empty()*/)
|
|
||||||
closeBatcher(); // This pass cannot be batched!
|
closeBatcher(); // This pass cannot be batched!
|
||||||
|
|
||||||
// Set the Resolver instance variable in the Pass so that it knows where to
|
// Set the Resolver instance variable in the Pass so that it knows where to
|
||||||
@ -638,8 +623,13 @@ private:
|
|||||||
// together a function at a time.
|
// together a function at a time.
|
||||||
//
|
//
|
||||||
void addPass(SubPassClass *MP, AnalysisUsage &AnUsage) {
|
void addPass(SubPassClass *MP, AnalysisUsage &AnUsage) {
|
||||||
if (Batcher == 0) // If we don't have a batcher yet, make one now.
|
|
||||||
Batcher = new BatcherClass((dynamic_cast<PMType*>(this)));
|
if (Batcher == 0) { // If we don't have a batcher yet, make one now.
|
||||||
|
assert(dynamic_cast<PMType*>(this) &&
|
||||||
|
"It wasn't the PassManager type I thought it was");
|
||||||
|
Batcher = new BatcherClass((static_cast<PMType*>(this)));
|
||||||
|
}
|
||||||
|
|
||||||
// The Batcher will queue the passes up
|
// The Batcher will queue the passes up
|
||||||
MP->addToPassManager(Batcher, AnUsage);
|
MP->addToPassManager(Batcher, AnUsage);
|
||||||
}
|
}
|
||||||
@ -652,6 +642,17 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addRequiredPasses(const std::vector<AnalysisID> &Required) {
|
||||||
|
for (std::vector<AnalysisID>::const_iterator I = Required.begin(),
|
||||||
|
E = Required.end(); I != E; ++I) {
|
||||||
|
if (getAnalysisOrNullDown(*I) == 0) {
|
||||||
|
Pass *AP = (*I)->createPass();
|
||||||
|
if (ImmutablePass *IP = dynamic_cast<ImmutablePass *> (AP)) add(IP);
|
||||||
|
else if (PassClass *RP = dynamic_cast<PassClass *> (AP)) add(RP);
|
||||||
|
else assert (0 && "Wrong kind of pass for this PassManager");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
// When an ImmutablePass is added, it gets added to the top level pass
|
// When an ImmutablePass is added, it gets added to the top level pass
|
||||||
// manager.
|
// manager.
|
||||||
|
Loading…
Reference in New Issue
Block a user