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 |