// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_CODEGEN_MACHINEFUNCTIONCLONER_H #define RCC_CODEGEN_MACHINEFUNCTIONCLONER_H #include "rcc/CodeGen/MachineIRTypes.h" #include "rcc/CodeGen/Register.h" #include "rcc/CodeGen/StableID.h" #include "rcc/Support/Error.h" #include #include #include #include namespace rcc { class InstructionSet; class MachineFunction; struct MachineFunctionCloneOptions final { MachineFunctionStableID NewStableID; std::optional NewName; }; struct MachineFunctionCloneResult final { MachineFunctionCloneResult(); MachineFunctionCloneResult(const MachineFunctionCloneResult &) = delete; MachineFunctionCloneResult &operator=(const MachineFunctionCloneResult &) = delete; MachineFunctionCloneResult(MachineFunctionCloneResult &&) noexcept; MachineFunctionCloneResult &operator=(MachineFunctionCloneResult &&) noexcept; ~MachineFunctionCloneResult(); std::unique_ptr ClonedFunction; std::unordered_map BlockStableIDs; std::unordered_map InstructionStableIDs; std::unordered_map VirtualRegisters; std::unordered_map FrameIndices; std::unordered_map ConstantPoolIndices; std::unordered_map JumpTableIndices; }; [[nodiscard]] Expected cloneMachineFunction(const MachineFunction &Source, const InstructionSet &Instructions, MachineFunctionCloneOptions Options); } // namespace rcc #endif // RCC_CODEGEN_MACHINEFUNCTIONCLONER_H