[midend-BuildCFG]修复逻辑

This commit is contained in:
rain2133
2025-08-03 16:14:31 +08:00
parent a1cf60c420
commit 22cf18a1d6
4 changed files with 71 additions and 124 deletions

View File

@@ -1,33 +1,20 @@
#pragma once
#include "Pass.h"
#include "IR.h"
#include "Instruction.h"
#include "Pass.h"
#include <queue>
#include <set>
namespace sysy {
class DominatorTreeAnalysisPass;
class LivenessAnalysisPass;
class BuildCFG : public OptimizationPass {
public:
// Pass的唯一ID用于PassRegistry
static char ID;
static void *ID;
BuildCFG() : OptimizationPass("BuildCFG", Granularity::Function) {}
bool runOnFunction(Function *F, AnalysisManager &AM) override;
void getAnalysisUsage(std::set<void *> &analysisDependencies, std::set<void *> &analysisInvalidations) const override;
void *getPassID() const override { return &ID; }
BuildCFG() : OptimizationPass("BuildCFG", Pass::Granularity::Function, Pass::PassKind::Optimization) {}
// 重载 runOnFunction 方法,实现具体的优化逻辑
bool runOnFunction(Function *F, AnalysisManager& AM) override;
// 提供PassID
void *getPassID() const override { return &ID; }
// 声明Pass的分析使用
// BuildCFG不依赖任何分析但会使其他依赖CFG的分析失效
void getAnalysisUsage(std::set<void *> &analysisDependencies,
std::set<void *> &analysisInvalidations) override;
};
} // namespace sysy