#ifndef RISCV64_DIV_STRENGTH_REDUCTION_H
#define RISCV64_DIV_STRENGTH_REDUCTION_H

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

namespace sysy {

/**
 * @class DivStrengthReduction
 * @brief 除法强度削弱优化器
 * * 将除法运算转换为乘法运算，使用magic number算法
 * 适用于除数为常数的情况，可以显著提高性能
 */
class DivStrengthReduction : public Pass {
public:
    static char ID;
    
    DivStrengthReduction() : Pass("div-strength-reduction", 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_DIV_STRENGTH_REDUCTION_H