33 lines
896 B
C++
33 lines
896 B
C++
#pragma once
|
||
|
||
#include "Pass.h"
|
||
#include "IR.h"
|
||
#include "Instruction.h"
|
||
#include <queue>
|
||
#include <set>
|
||
|
||
namespace sysy {
|
||
|
||
class DominatorTreeAnalysisPass;
|
||
class LivenessAnalysisPass;
|
||
|
||
class BuildCFG : public OptimizationPass {
|
||
public:
|
||
// Pass的唯一ID,用于PassRegistry
|
||
static char 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
|