注册遍模板函数重构(针对遍的不同构造方法), 修复phi指令更新引起的旧代码错误, 将CFG优化适配到现有终端框架中, 独立CFG优化方法使得其他优化遍能独立调用, usedelete方法回调取消删除功能。 IRGenerator代码风格修改。
33 lines
782 B
C++
33 lines
782 B
C++
#pragma once
|
||
|
||
#include "IR.h"
|
||
|
||
namespace sysy {
|
||
|
||
// 优化工具类,包含一些通用的优化方法
|
||
// 这些方法可以在不同的优化 pass 中复用
|
||
// 例如:删除use关系,判断是否是全局变量等
|
||
class SysYIROptUtils{
|
||
|
||
public:
|
||
// 仅仅删除use关系
|
||
static void usedelete(Instruction *instr) {
|
||
for (auto &use : instr->getOperands()) {
|
||
Value* val = use->getValue();
|
||
val->removeUse(use);
|
||
}
|
||
}
|
||
|
||
// 判断是否是全局变量
|
||
static bool isGlobal(Value *val) {
|
||
auto gval = dynamic_cast<GlobalValue *>(val);
|
||
return gval != nullptr;
|
||
}
|
||
// 判断是否是数组
|
||
static bool isArr(Value *val) {
|
||
auto aval = dynamic_cast<AllocaInst *>(val);
|
||
return aval != nullptr && aval->getNumDims() != 0;
|
||
}
|
||
};
|
||
|
||
}// namespace sysy
|