#ifndef RISCV64_PEEPHOLE_H
#define RISCV64_PEEPHOLE_H

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

namespace sysy {

/**
 * @class PeepholeOptimizer
 * @brief 窥孔优化器
 * * 在已分配物理寄存器的指令流上，通过一个小的滑动窗口来查找
 * 并替换掉一些冗余或低效的指令模式。
 */
class PeepholeOptimizer : public Pass {
public:
    static char ID;
    
    PeepholeOptimizer() : Pass("peephole-optimizer", Granularity::Function, PassKind::Optimization) {}
    
    void *getPassID() const override { return &ID; }
    
    bool runOnFunction(Function *F, AnalysisManager& AM) override;
    
    void runOnMachineFunction(MachineFunction* mfunc);
};

} // namespace sysy

#endif // RISCV64_PEEPHOLE_H