#ifndef POST_RA_SCHEDULER_H
#define POST_RA_SCHEDULER_H

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

namespace sysy {

/**
 * @class PostRA_Scheduler
 * @brief 寄存器分配后的局部指令调度器
 * * 主要目标是优化寄存器分配器插入的spill/fill代码(lw/sw)，
 * 尝试将加载指令提前，以隐藏其访存延迟。
 */
class PostRA_Scheduler : public Pass {
public:
    static char ID;
    
    PostRA_Scheduler() : Pass("post-ra-scheduler", Granularity::Function, PassKind::Optimization) {}
    
    void *getPassID() const override { return &ID; }
    
    bool runOnFunction(Function *F, AnalysisManager& AM) override;
    
    void runOnMachineFunction(MachineFunction* mfunc);
};

} // namespace sysy

#endif // POST_RA_SCHEDULER_H