// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_MIR_LLVMCONSTANTSYNTAX_H #define RCC_MIR_LLVMCONSTANTSYNTAX_H #include "rcc/CodeGen/GenericConstant.h" #include "rcc/CodeGen/MachineIRTypes.h" #include "rcc/Support/Error.h" #include #include #include #include #include namespace rcc::mir { struct LLVMNamedTypeDefinition final { std::string_view Name; std::string_view Definition; bool NumericName = false; }; struct LLVMConstantSyntaxOptions final { std::string_view DataLayout; std::span NamedTypes; std::size_t MaximumDepth = 1024; std::size_t MaximumNodes = std::size_t{1} << 24U; std::size_t MaximumTokenLength = std::size_t{1} << 24U; }; [[nodiscard]] Expected parseLLVMConstant(std::string_view Text, LLVMConstantSyntaxOptions Options = {}); [[nodiscard]] Expected parseLLVMType(std::string_view Text, LLVMConstantSyntaxOptions Options = {}); [[nodiscard]] Expected printLLVMConstant(const GenericConstantData &Constant); [[nodiscard]] Expected llvmConstantStorageSize(const GenericConstantType &Type, LLVMConstantSyntaxOptions Options = {}); [[nodiscard]] Expected llvmConstantPreferredAlignment(const GenericConstantType &Type, LLVMConstantSyntaxOptions Options = {}); [[nodiscard]] Expected llvmPointerSizeInBits(std::uint32_t AddressSpace, LLVMConstantSyntaxOptions Options = {}); } // namespace rcc::mir #endif // RCC_MIR_LLVMCONSTANTSYNTAX_H