Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 14 | pmbaty | 1 | //===-- Parser.h - Parser for LLVM IR text assembly files -------*- C++ -*-===// |
| 2 | // |
||
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
||
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
||
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
||
| 6 | // |
||
| 7 | //===----------------------------------------------------------------------===// |
||
| 8 | // |
||
| 9 | // These classes are implemented by the lib/AsmParser library. |
||
| 10 | // |
||
| 11 | //===----------------------------------------------------------------------===// |
||
| 12 | |||
| 13 | #ifndef LLVM_ASMPARSER_PARSER_H |
||
| 14 | #define LLVM_ASMPARSER_PARSER_H |
||
| 15 | |||
| 16 | #include "llvm/ADT/STLFunctionalExtras.h" |
||
| 17 | #include "llvm/ADT/StringRef.h" |
||
| 18 | #include <memory> |
||
| 19 | #include <optional> |
||
| 20 | |||
| 21 | namespace llvm { |
||
| 22 | |||
| 23 | class Constant; |
||
| 24 | class LLVMContext; |
||
| 25 | class MemoryBufferRef; |
||
| 26 | class Module; |
||
| 27 | class ModuleSummaryIndex; |
||
| 28 | struct SlotMapping; |
||
| 29 | class SMDiagnostic; |
||
| 30 | class Type; |
||
| 31 | |||
| 32 | typedef llvm::function_ref<std::optional<std::string>(StringRef, StringRef)> |
||
| 33 | DataLayoutCallbackTy; |
||
| 34 | |||
| 35 | /// This function is a main interface to the LLVM Assembly Parser. It parses |
||
| 36 | /// an ASCII file that (presumably) contains LLVM Assembly code. It returns a |
||
| 37 | /// Module (intermediate representation) with the corresponding features. Note |
||
| 38 | /// that this does not verify that the generated Module is valid, so you should |
||
| 39 | /// run the verifier after parsing the file to check that it is okay. |
||
| 40 | /// Parse LLVM Assembly from a file |
||
| 41 | /// \param Filename The name of the file to parse |
||
| 42 | /// \param Err Error result info. |
||
| 43 | /// \param Context Context in which to allocate globals info. |
||
| 44 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 45 | /// parsing. |
||
| 46 | std::unique_ptr<Module> parseAssemblyFile(StringRef Filename, SMDiagnostic &Err, |
||
| 47 | LLVMContext &Context, |
||
| 48 | SlotMapping *Slots = nullptr); |
||
| 49 | |||
| 50 | /// The function is a secondary interface to the LLVM Assembly Parser. It parses |
||
| 51 | /// an ASCII string that (presumably) contains LLVM Assembly code. It returns a |
||
| 52 | /// Module (intermediate representation) with the corresponding features. Note |
||
| 53 | /// that this does not verify that the generated Module is valid, so you should |
||
| 54 | /// run the verifier after parsing the file to check that it is okay. |
||
| 55 | /// Parse LLVM Assembly from a string |
||
| 56 | /// \param AsmString The string containing assembly |
||
| 57 | /// \param Err Error result info. |
||
| 58 | /// \param Context Context in which to allocate globals info. |
||
| 59 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 60 | /// parsing. |
||
| 61 | std::unique_ptr<Module> parseAssemblyString(StringRef AsmString, |
||
| 62 | SMDiagnostic &Err, |
||
| 63 | LLVMContext &Context, |
||
| 64 | SlotMapping *Slots = nullptr); |
||
| 65 | |||
| 66 | /// Holds the Module and ModuleSummaryIndex returned by the interfaces |
||
| 67 | /// that parse both. |
||
| 68 | struct ParsedModuleAndIndex { |
||
| 69 | std::unique_ptr<Module> Mod; |
||
| 70 | std::unique_ptr<ModuleSummaryIndex> Index; |
||
| 71 | }; |
||
| 72 | |||
| 73 | /// This function is a main interface to the LLVM Assembly Parser. It parses |
||
| 74 | /// an ASCII file that (presumably) contains LLVM Assembly code, including |
||
| 75 | /// a module summary. It returns a Module (intermediate representation) and |
||
| 76 | /// a ModuleSummaryIndex with the corresponding features. Note that this does |
||
| 77 | /// not verify that the generated Module or Index are valid, so you should |
||
| 78 | /// run the verifier after parsing the file to check that they are okay. |
||
| 79 | /// Parse LLVM Assembly from a file |
||
| 80 | /// \param Filename The name of the file to parse |
||
| 81 | /// \param Err Error result info. |
||
| 82 | /// \param Context Context in which to allocate globals info. |
||
| 83 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 84 | /// parsing. |
||
| 85 | /// \param DataLayoutCallback Override datalayout in the llvm assembly. |
||
| 86 | ParsedModuleAndIndex parseAssemblyFileWithIndex( |
||
| 87 | StringRef Filename, SMDiagnostic &Err, LLVMContext &Context, |
||
| 88 | SlotMapping *Slots = nullptr, |
||
| 89 | DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) { |
||
| 90 | return std::nullopt; |
||
| 91 | }); |
||
| 92 | |||
| 93 | /// Only for use in llvm-as for testing; this does not produce a valid module. |
||
| 94 | ParsedModuleAndIndex parseAssemblyFileWithIndexNoUpgradeDebugInfo( |
||
| 95 | StringRef Filename, SMDiagnostic &Err, LLVMContext &Context, |
||
| 96 | SlotMapping *Slots, DataLayoutCallbackTy DataLayoutCallback); |
||
| 97 | |||
| 98 | /// This function is a main interface to the LLVM Assembly Parser. It parses |
||
| 99 | /// an ASCII file that (presumably) contains LLVM Assembly code for a module |
||
| 100 | /// summary. It returns a a ModuleSummaryIndex with the corresponding features. |
||
| 101 | /// Note that this does not verify that the generated Index is valid, so you |
||
| 102 | /// should run the verifier after parsing the file to check that it is okay. |
||
| 103 | /// Parse LLVM Assembly Index from a file |
||
| 104 | /// \param Filename The name of the file to parse |
||
| 105 | /// \param Err Error result info. |
||
| 106 | std::unique_ptr<ModuleSummaryIndex> |
||
| 107 | parseSummaryIndexAssemblyFile(StringRef Filename, SMDiagnostic &Err); |
||
| 108 | |||
| 109 | /// The function is a secondary interface to the LLVM Assembly Parser. It parses |
||
| 110 | /// an ASCII string that (presumably) contains LLVM Assembly code for a module |
||
| 111 | /// summary. It returns a a ModuleSummaryIndex with the corresponding features. |
||
| 112 | /// Note that this does not verify that the generated Index is valid, so you |
||
| 113 | /// should run the verifier after parsing the file to check that it is okay. |
||
| 114 | /// Parse LLVM Assembly from a string |
||
| 115 | /// \param AsmString The string containing assembly |
||
| 116 | /// \param Err Error result info. |
||
| 117 | std::unique_ptr<ModuleSummaryIndex> |
||
| 118 | parseSummaryIndexAssemblyString(StringRef AsmString, SMDiagnostic &Err); |
||
| 119 | |||
| 120 | /// parseAssemblyFile and parseAssemblyString are wrappers around this function. |
||
| 121 | /// Parse LLVM Assembly from a MemoryBuffer. |
||
| 122 | /// \param F The MemoryBuffer containing assembly |
||
| 123 | /// \param Err Error result info. |
||
| 124 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 125 | /// parsing. |
||
| 126 | /// \param DataLayoutCallback Override datalayout in the llvm assembly. |
||
| 127 | std::unique_ptr<Module> parseAssembly( |
||
| 128 | MemoryBufferRef F, SMDiagnostic &Err, LLVMContext &Context, |
||
| 129 | SlotMapping *Slots = nullptr, |
||
| 130 | DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) { |
||
| 131 | return std::nullopt; |
||
| 132 | }); |
||
| 133 | |||
| 134 | /// Parse LLVM Assembly including the summary index from a MemoryBuffer. |
||
| 135 | /// |
||
| 136 | /// \param F The MemoryBuffer containing assembly with summary |
||
| 137 | /// \param Err Error result info. |
||
| 138 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 139 | /// parsing. |
||
| 140 | /// |
||
| 141 | /// parseAssemblyFileWithIndex is a wrapper around this function. |
||
| 142 | ParsedModuleAndIndex parseAssemblyWithIndex(MemoryBufferRef F, |
||
| 143 | SMDiagnostic &Err, |
||
| 144 | LLVMContext &Context, |
||
| 145 | SlotMapping *Slots = nullptr); |
||
| 146 | |||
| 147 | /// Parse LLVM Assembly for summary index from a MemoryBuffer. |
||
| 148 | /// |
||
| 149 | /// \param F The MemoryBuffer containing assembly with summary |
||
| 150 | /// \param Err Error result info. |
||
| 151 | /// |
||
| 152 | /// parseSummaryIndexAssemblyFile is a wrapper around this function. |
||
| 153 | std::unique_ptr<ModuleSummaryIndex> |
||
| 154 | parseSummaryIndexAssembly(MemoryBufferRef F, SMDiagnostic &Err); |
||
| 155 | |||
| 156 | /// This function is the low-level interface to the LLVM Assembly Parser. |
||
| 157 | /// This is kept as an independent function instead of being inlined into |
||
| 158 | /// parseAssembly for the convenience of interactive users that want to add |
||
| 159 | /// recently parsed bits to an existing module. |
||
| 160 | /// |
||
| 161 | /// \param F The MemoryBuffer containing assembly |
||
| 162 | /// \param M The module to add data to. |
||
| 163 | /// \param Index The index to add data to. |
||
| 164 | /// \param Err Error result info. |
||
| 165 | /// \param Slots The optional slot mapping that will be initialized during |
||
| 166 | /// parsing. |
||
| 167 | /// \return true on error. |
||
| 168 | /// \param DataLayoutCallback Override datalayout in the llvm assembly. |
||
| 169 | bool parseAssemblyInto( |
||
| 170 | MemoryBufferRef F, Module *M, ModuleSummaryIndex *Index, SMDiagnostic &Err, |
||
| 171 | SlotMapping *Slots = nullptr, |
||
| 172 | DataLayoutCallbackTy DataLayoutCallback = [](StringRef, StringRef) { |
||
| 173 | return std::nullopt; |
||
| 174 | }); |
||
| 175 | |||
| 176 | /// Parse a type and a constant value in the given string. |
||
| 177 | /// |
||
| 178 | /// The constant value can be any LLVM constant, including a constant |
||
| 179 | /// expression. |
||
| 180 | /// |
||
| 181 | /// \param Slots The optional slot mapping that will restore the parsing state |
||
| 182 | /// of the module. |
||
| 183 | /// \return null on error. |
||
| 184 | Constant *parseConstantValue(StringRef Asm, SMDiagnostic &Err, const Module &M, |
||
| 185 | const SlotMapping *Slots = nullptr); |
||
| 186 | |||
| 187 | /// Parse a type in the given string. |
||
| 188 | /// |
||
| 189 | /// \param Slots The optional slot mapping that will restore the parsing state |
||
| 190 | /// of the module. |
||
| 191 | /// \return null on error. |
||
| 192 | Type *parseType(StringRef Asm, SMDiagnostic &Err, const Module &M, |
||
| 193 | const SlotMapping *Slots = nullptr); |
||
| 194 | |||
| 195 | /// Parse a string \p Asm that starts with a type. |
||
| 196 | /// \p Read[out] gives the number of characters that have been read to parse |
||
| 197 | /// the type in \p Asm. |
||
| 198 | /// |
||
| 199 | /// \param Slots The optional slot mapping that will restore the parsing state |
||
| 200 | /// of the module. |
||
| 201 | /// \return null on error. |
||
| 202 | Type *parseTypeAtBeginning(StringRef Asm, unsigned &Read, SMDiagnostic &Err, |
||
| 203 | const Module &M, const SlotMapping *Slots = nullptr); |
||
| 204 | |||
| 205 | } // End llvm namespace |
||
| 206 | |||
| 207 | #endif |