// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_CODEGEN_GLOBALISEL_LEGALIZER_H #define RCC_CODEGEN_GLOBALISEL_LEGALIZER_H #include "rcc/CodeGen/CommandFlags.h" #include "rcc/CodeGen/GlobalISel/LegalizerInfo.h" #include "rcc/CodeGen/MachinePassManager.h" #include "rcc/CodeGen/TargetCallLowering.h" #include namespace rcc { class Legalizer final : public MachineFunctionPass { public: Legalizer(const LegalizerInfo *Info, OptimizationLevel Optimization, LibcallLoweringInfo Libcalls = {}) : Info(Info), Optimization(Optimization), Libcalls(Libcalls) {} Legalizer(const LegalizerInfo &Info, OptimizationLevel Optimization, LibcallLoweringInfo Libcalls = {}) : Info(&Info), Optimization(Optimization), Libcalls(Libcalls) {} Legalizer(std::unique_ptr Info, OptimizationLevel Optimization, LibcallLoweringInfo Libcalls = {}) : OwnedInfo(std::move(Info)), Info(OwnedInfo.get()), Optimization(Optimization), Libcalls(Libcalls) {} [[nodiscard]] const MachinePassContract &contract() const noexcept override; [[nodiscard]] Expected run(MachineFunction &Function, const TargetDescription &Target, MachineFunctionAnalysisManager &Analyses) override; private: [[nodiscard]] Expected runImplementation(MachineFunction &Function, const TargetDescription &Target, MachineActionReplay &Actions); std::unique_ptr OwnedInfo; const LegalizerInfo *Info = nullptr; OptimizationLevel Optimization; LibcallLoweringInfo Libcalls; }; } // namespace rcc #endif // RCC_CODEGEN_GLOBALISEL_LEGALIZER_H