[midend]优化中端框架,移除无用旧代码,ignore格式文件

This commit is contained in:
rain2133
2025-07-22 21:25:07 +08:00
parent a72fc541fb
commit f61b51b2fa
14 changed files with 208 additions and 1220 deletions

View File

@@ -111,6 +111,9 @@ private:
// AnalysisManager: 负责管理和提供分析结果
// ======================================================================
class AnalysisManager {
private:
std::map<std::pair<Function *, void *>, std::unique_ptr<AnalysisResultBase>> cachedResults;
// cachedResults 存储分析结果,键是 (Function*, AnalysisPass ID)
public:
AnalysisManager() = default;
~AnalysisManager() = default;
@@ -172,97 +175,38 @@ public:
cachedResults = std::move(newCachedResults);
}
}
private:
std::map<std::pair<Function *, void *>, std::unique_ptr<AnalysisResultBase>> cachedResults;
};
// ======================================================================
// PassManager遍管理器
// ======================================================================
class PassManager {
private:
std::vector<std::unique_ptr<Pass>> passes;
AnalysisManager analysisManager;
Module *pmodule;
AnalysisManager &AM; // 引用 AnalysisManager用于获取分析结果
public:
PassManager() = default;
~PassManager() = default;
// 添加遍:现在接受 Pass 的 ID而不是直接的 unique_ptr
void addPass(void *passID) {
PassRegistry &registry = PassRegistry::getPassRegistry();
std::unique_ptr<Pass> P = registry.createPass(passID);
if (!P) {
// Error: Pass not found or failed to create
return;
}
passes.push_back(std::move(P));
PassManager(Module *module) : pmodule(module) {
analysisManager = AnalysisManager(); // 初始化分析管理器
}
// 运行所有注册的遍
bool run(Module *M) {
bool changed = false;
for (const auto &p : passes) {
bool passChanged = false; // 记录当前遍是否修改了 IR
bool run();
// 运行优化管道主要负责注册和运行优化遍
// 这里可以根据 optLevel 和 DEBUG 控制不同的优化遍
void runOptimizationPipeline(Module* moduleIR, int optLevel);
// 处理优化遍的分析依赖和失效
if (p->getPassKind() == Pass::PassKind::Optimization) {
OptimizationPass *optPass = static_cast<OptimizationPass *>(p.get());
std::set<void *> analysisDependencies;
std::set<void *> analysisInvalidations;
optPass->getAnalysisUsage(analysisDependencies, analysisInvalidations);
// PassManager 不显式运行分析依赖。
// 而是优化遍在 runOnFunction 内部通过 AnalysisManager.getAnalysisResult 按需请求。
}
if (p->getGranularity() == Pass::Granularity::Module) {
passChanged = p->runOnModule(M, AM);
} else if (p->getGranularity() == Pass::Granularity::Function) {
for (auto &funcPair : M->getFunctions()) {
Function *F = funcPair.second.get();
passChanged = p->runOnFunction(F, AM) || passChanged;
if (passChanged && p->getPassKind() == Pass::PassKind::Optimization) {
OptimizationPass *optPass = static_cast<OptimizationPass *>(p.get());
std::set<void *> analysisDependencies;
std::set<void *> analysisInvalidations;
optPass->getAnalysisUsage(analysisDependencies, analysisInvalidations);
for (void *invalidationID : analysisInvalidations) {
analysisManager.invalidateAnalysis(invalidationID, F);
}
}
}
} else if (p->getGranularity() == Pass::Granularity::BasicBlock) {
for (auto &funcPair : M->getFunctions()) {
Function *F = funcPair.second.get();
for (auto &bbPtr : funcPair.second->getBasicBlocks()) {
passChanged = p->runOnBasicBlock(bbPtr.get(), AM) || passChanged;
if (passChanged && p->getPassKind() == Pass::PassKind::Optimization) {
OptimizationPass *optPass = static_cast<OptimizationPass *>(p.get());
std::set<void *> analysisDependencies;
std::set<void *> analysisInvalidations;
optPass->getAnalysisUsage(analysisDependencies, analysisInvalidations);
for (void *invalidationID : analysisInvalidations) {
analysisManager.invalidateAnalysis(invalidationID, F);
}
}
}
}
}
changed = changed || passChanged;
}
return changed;
}
// 添加遍:现在接受 Pass 的 ID而不是直接的 unique_ptr
void addPass(void *passID);
AnalysisManager &getAnalysisManager() { return analysisManager; }
private:
std::vector<std::unique_ptr<Pass>> passes;
AnalysisManager analysisManager;
};
// ======================================================================