mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 05:32:25 +00:00
Fix problem with inserting FunctionPasses that depend on ImmutablePasses
(e.g., LICM) into FunctionPassManagers. The problem is that we were using a C-style cast to cast required analysis passes to PassClass*, but if it's a FunctionPassManager, and the required analysis pass is an ImmutablePass, the types aren't really compatible, so the C-style cast causes a crash. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15140 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aa14147cd6
commit
7ff4006f82
@ -454,8 +454,12 @@ public:
|
||||
// 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)
|
||||
add((PassClass*)(*I)->createPass());
|
||||
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
|
||||
@ -477,8 +481,12 @@ public:
|
||||
// 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)
|
||||
add((PassClass*)(*I)->createPass());
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user