123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- Parser.h - Parser for LLVM IR text assembly files -------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // These classes are implemented by the lib/AsmParser library.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_ASMPARSER_PARSER_H
- #define LLVM_ASMPARSER_PARSER_H
- #include "llvm/ADT/STLFunctionalExtras.h"
- #include "llvm/ADT/StringRef.h"
- #include <memory>
- #include <optional>
- namespace llvm {
- class Constant;
- class LLVMContext;
- class MemoryBufferRef;
- class Module;
- class ModuleSummaryIndex;
- struct SlotMapping;
- class SMDiagnostic;
- class Type;
- typedef llvm::function_ref<std::optional<std::string>(StringRef, StringRef)>
- DataLayoutCallbackTy;
- /// This function is a main interface to the LLVM Assembly Parser. It parses
- /// an ASCII file that (presumably) contains LLVM Assembly code. It returns a
- /// Module (intermediate representation) with the corresponding features. Note
- /// that this does not verify that the generated Module is valid, so you should
- /// run the verifier after parsing the file to check that it is okay.
- /// Parse LLVM Assembly from a file
- /// \param Filename The name of the file to parse
- /// \param Err Error result info.
- /// \param Context Context in which to allocate globals info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- std::unique_ptr<Module> parseAssemblyFile(StringRef Filename, SMDiagnostic &Err,
- LLVMContext &Context,
- SlotMapping *Slots = nullptr);
- /// The function is a secondary interface to the LLVM Assembly Parser. It parses
- /// an ASCII string that (presumably) contains LLVM Assembly code. It returns a
- /// Module (intermediate representation) with the corresponding features. Note
- /// that this does not verify that the generated Module is valid, so you should
- /// run the verifier after parsing the file to check that it is okay.
- /// Parse LLVM Assembly from a string
- /// \param AsmString The string containing assembly
- /// \param Err Error result info.
- /// \param Context Context in which to allocate globals info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- std::unique_ptr<Module> parseAssemblyString(StringRef AsmString,
- SMDiagnostic &Err,
- LLVMContext &Context,
- SlotMapping *Slots = nullptr);
- /// Holds the Module and ModuleSummaryIndex returned by the interfaces
- /// that parse both.
- struct ParsedModuleAndIndex {
- std::unique_ptr<Module> Mod;
- std::unique_ptr<ModuleSummaryIndex> Index;
- };
- /// This function is a main interface to the LLVM Assembly Parser. It parses
- /// an ASCII file that (presumably) contains LLVM Assembly code, including
- /// a module summary. It returns a Module (intermediate representation) and
- /// a ModuleSummaryIndex with the corresponding features. Note that this does
- /// not verify that the generated Module or Index are valid, so you should
- /// run the verifier after parsing the file to check that they are okay.
- /// Parse LLVM Assembly from a file
- /// \param Filename The name of the file to parse
- /// \param Err Error result info.
- /// \param Context Context in which to allocate globals info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- /// \param DataLayoutCallback Override datalayout in the llvm assembly.
- ParsedModuleAndIndex parseAssemblyFileWithIndex(
- StringRef Filename, SMDiagnostic &Err, LLVMContext &Context,
- SlotMapping *Slots = nullptr,
- DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) {
- return std::nullopt;
- });
- /// Only for use in llvm-as for testing; this does not produce a valid module.
- ParsedModuleAndIndex parseAssemblyFileWithIndexNoUpgradeDebugInfo(
- StringRef Filename, SMDiagnostic &Err, LLVMContext &Context,
- SlotMapping *Slots, DataLayoutCallbackTy DataLayoutCallback);
- /// This function is a main interface to the LLVM Assembly Parser. It parses
- /// an ASCII file that (presumably) contains LLVM Assembly code for a module
- /// summary. It returns a a ModuleSummaryIndex with the corresponding features.
- /// Note that this does not verify that the generated Index is valid, so you
- /// should run the verifier after parsing the file to check that it is okay.
- /// Parse LLVM Assembly Index from a file
- /// \param Filename The name of the file to parse
- /// \param Err Error result info.
- std::unique_ptr<ModuleSummaryIndex>
- parseSummaryIndexAssemblyFile(StringRef Filename, SMDiagnostic &Err);
- /// The function is a secondary interface to the LLVM Assembly Parser. It parses
- /// an ASCII string that (presumably) contains LLVM Assembly code for a module
- /// summary. It returns a a ModuleSummaryIndex with the corresponding features.
- /// Note that this does not verify that the generated Index is valid, so you
- /// should run the verifier after parsing the file to check that it is okay.
- /// Parse LLVM Assembly from a string
- /// \param AsmString The string containing assembly
- /// \param Err Error result info.
- std::unique_ptr<ModuleSummaryIndex>
- parseSummaryIndexAssemblyString(StringRef AsmString, SMDiagnostic &Err);
- /// parseAssemblyFile and parseAssemblyString are wrappers around this function.
- /// Parse LLVM Assembly from a MemoryBuffer.
- /// \param F The MemoryBuffer containing assembly
- /// \param Err Error result info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- /// \param DataLayoutCallback Override datalayout in the llvm assembly.
- std::unique_ptr<Module> parseAssembly(
- MemoryBufferRef F, SMDiagnostic &Err, LLVMContext &Context,
- SlotMapping *Slots = nullptr,
- DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) {
- return std::nullopt;
- });
- /// Parse LLVM Assembly including the summary index from a MemoryBuffer.
- ///
- /// \param F The MemoryBuffer containing assembly with summary
- /// \param Err Error result info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- ///
- /// parseAssemblyFileWithIndex is a wrapper around this function.
- ParsedModuleAndIndex parseAssemblyWithIndex(MemoryBufferRef F,
- SMDiagnostic &Err,
- LLVMContext &Context,
- SlotMapping *Slots = nullptr);
- /// Parse LLVM Assembly for summary index from a MemoryBuffer.
- ///
- /// \param F The MemoryBuffer containing assembly with summary
- /// \param Err Error result info.
- ///
- /// parseSummaryIndexAssemblyFile is a wrapper around this function.
- std::unique_ptr<ModuleSummaryIndex>
- parseSummaryIndexAssembly(MemoryBufferRef F, SMDiagnostic &Err);
- /// This function is the low-level interface to the LLVM Assembly Parser.
- /// This is kept as an independent function instead of being inlined into
- /// parseAssembly for the convenience of interactive users that want to add
- /// recently parsed bits to an existing module.
- ///
- /// \param F The MemoryBuffer containing assembly
- /// \param M The module to add data to.
- /// \param Index The index to add data to.
- /// \param Err Error result info.
- /// \param Slots The optional slot mapping that will be initialized during
- /// parsing.
- /// \return true on error.
- /// \param DataLayoutCallback Override datalayout in the llvm assembly.
- bool parseAssemblyInto(
- MemoryBufferRef F, Module *M, ModuleSummaryIndex *Index, SMDiagnostic &Err,
- SlotMapping *Slots = nullptr,
- DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) {
- return std::nullopt;
- });
- /// Parse a type and a constant value in the given string.
- ///
- /// The constant value can be any LLVM constant, including a constant
- /// expression.
- ///
- /// \param Slots The optional slot mapping that will restore the parsing state
- /// of the module.
- /// \return null on error.
- Constant *parseConstantValue(StringRef Asm, SMDiagnostic &Err, const Module &M,
- const SlotMapping *Slots = nullptr);
- /// Parse a type in the given string.
- ///
- /// \param Slots The optional slot mapping that will restore the parsing state
- /// of the module.
- /// \return null on error.
- Type *parseType(StringRef Asm, SMDiagnostic &Err, const Module &M,
- const SlotMapping *Slots = nullptr);
- /// Parse a string \p Asm that starts with a type.
- /// \p Read[out] gives the number of characters that have been read to parse
- /// the type in \p Asm.
- ///
- /// \param Slots The optional slot mapping that will restore the parsing state
- /// of the module.
- /// \return null on error.
- Type *parseTypeAtBeginning(StringRef Asm, unsigned &Read, SMDiagnostic &Err,
- const Module &M, const SlotMapping *Slots = nullptr);
- } // End llvm namespace
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|