// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_TOOLING_BACKENDDRIVER_H #define RCC_TOOLING_BACKENDDRIVER_H #include "rcc/CodeGen/MachinePass.h" #include "rcc/Support/Error.h" #include "rcc/Tooling/ArtifactStore.h" #include "rcc/Tooling/PipelineDriver.h" #include #include #include #include namespace rcc { class TargetDescription; namespace tooling { enum class BackendOutputKind : std::uint8_t { PreLegalizerMIR, LegalizedMIR, RegisterBankMIR, SelectedMIR, PostSSAMIR, PostRegisterAllocationMIR, FinalMIR, Assembly, RelocatableObject, }; struct BackendRunResult final { BackendOutputKind Kind = BackendOutputKind::FinalMIR; std::vector Output; PipelineRunResult Pipeline; std::vector Actions; [[nodiscard]] std::string_view text() const noexcept; }; [[nodiscard]] Expected runBackend(CanonicalMIR Input, const TargetDescription &Target, const BackendInvocation &Invocation, BackendOutputKind Output, PipelineControls Controls = {}, MachinePassInstrumentation *Instrumentation = nullptr); [[nodiscard]] std::string_view spelling(BackendOutputKind Output) noexcept; [[nodiscard]] Expected parseBackendOutputKind(std::string_view Value); [[nodiscard]] ArtifactKind manifestArtifactKind(BackendOutputKind Output) noexcept; [[nodiscard]] Expected cacheArtifactKind(BackendOutputKind Output); } // namespace tooling } // namespace rcc #endif // RCC_TOOLING_BACKENDDRIVER_H