#pragma once #include "IR.h" namespace sysy { // 优化工具类,包含一些通用的优化方法 // 这些方法可以在不同的优化 pass 中复用 // 例如:删除use关系,判断是否是全局变量等 class SysYIROptUtils{ public: // 删除use关系 // 根据指令的使用情况删除其所有的use关系 // 找到指令的所有使用者,并从它们的使用列表中删除该指令 static void usedelete(Instruction *instr) { for (auto &use : instr->getOperands()) { Value* val = use->getValue(); val->removeUse(use); } instr->getParent()->removeInst(instr); // 从基本块中删除指令 } // 判断是否是全局变量 static bool isGlobal(Value *val) { auto gval = dynamic_cast(val); return gval != nullptr; } // 判断是否是数组 static bool isArr(Value *val) { auto aval = dynamic_cast(val); return aval != nullptr && aval->getNumDims() != 0; } }; }// namespace sysy