#ifndef SYSY_LEGALIZE_IMMEDIATES_H
#define SYSY_LEGALIZE_IMMEDIATES_H

#include "RISCv64LLIR.h"
#include "Pass.h"

namespace sysy {

// MachineFunction 的前向声明在这里是可选的，因为 RISCv64LLIR.h 已经定义了它
// class MachineFunction;

/**
 * @class LegalizeImmediatesPass
 * @brief 一个用于“合法化”机器指令的Pass。
 *
 * 这个Pass的主要职责是遍历所有机器指令，查找那些包含了超出
 * 目标架构（RISC-V）编码范围的大立即数（immediate）的指令，
 * 并将它们展开成一个等价的、只包含合法立即数的指令序列。
 *
 * 它在指令选择之后、寄存器分配之前运行，确保进入后续阶段的
 * 所有指令都符合硬件约束。
 */
class LegalizeImmediatesPass : public Pass {
public:
    static char ID;
    
    LegalizeImmediatesPass() : Pass("legalize-immediates", Granularity::Function, PassKind::Optimization) {}
    
    void *getPassID() const override { return &ID; }
    
    void runOnMachineFunction(MachineFunction* mfunc);
};

} // namespace sysy

#endif // SYSY_LEGALIZE_IMMEDIATES_H