#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(val); return gval != nullptr; } // 判断是否是数组 static bool isArr(Value *val) { auto aval = dynamic_cast(val); return aval != nullptr && aval->getNumDims() != 0; } }; }// namespace sysy