#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