LLVM 17.0.0git
WebAssemblyMCTargetDesc.h
Go to the documentation of this file.
1//==- WebAssemblyMCTargetDesc.h - WebAssembly Target Descriptions -*- 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/// \file
10/// This file provides WebAssembly-specific target descriptions.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
15#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
16
17#include "../WebAssemblySubtarget.h"
19#include "llvm/MC/MCInstrDesc.h"
21#include <memory>
22
23namespace llvm {
24
25class MCAsmBackend;
26class MCCodeEmitter;
27class MCInstrInfo;
28class MCObjectTargetWriter;
29class Triple;
30
31MCCodeEmitter *createWebAssemblyMCCodeEmitter(const MCInstrInfo &MCII);
32
33MCAsmBackend *createWebAssemblyAsmBackend(const Triple &TT);
34
35std::unique_ptr<MCObjectTargetWriter>
36createWebAssemblyWasmObjectWriter(bool Is64Bit, bool IsEmscripten);
37
38namespace WebAssembly {
39
40// Exception handling / setjmp-longjmp handling command-line options
41extern cl::opt<bool> WasmEnableEmEH; // asm.js-style EH
42extern cl::opt<bool> WasmEnableEmSjLj; // asm.js-style SjLJ
43extern cl::opt<bool> WasmEnableEH; // EH using Wasm EH instructions
44extern cl::opt<bool> WasmEnableSjLj; // SjLj using Wasm EH instructions
45
47 /// Basic block label in a branch construct.
49 /// Local index.
51 /// Global index.
53 /// 32-bit integer immediates.
55 /// 64-bit integer immediates.
57 /// 32-bit floating-point immediates.
59 /// 64-bit floating-point immediates.
61 /// 8-bit vector lane immediate
63 /// 16-bit vector lane immediate
65 /// 32-bit vector lane immediate
67 /// 64-bit vector lane immediate
69 /// 32-bit unsigned function indices.
71 /// 32-bit unsigned memory offsets.
73 /// 64-bit unsigned memory offsets.
75 /// p2align immediate for load and store address alignment.
77 /// signature immediate for block/loop.
79 /// type signature immediate for call_indirect.
81 /// Tag index.
83 /// A list of branch targets for br_list.
85 /// 32-bit unsigned table number.
87};
88} // end namespace WebAssembly
89
90namespace WebAssemblyII {
91
92/// Target Operand Flag enum.
93enum TOF {
95
96 // On a symbol operand this indicates that the immediate is a wasm global
97 // index. The value of the wasm global will be set to the symbol address at
98 // runtime. This adds a level of indirection similar to the GOT on native
99 // platforms.
101
102 // Same as MO_GOT but the address stored in the global is a TLS address.
104
105 // On a symbol operand this indicates that the immediate is the symbol
106 // address relative the __memory_base wasm global.
107 // Only applicable to data symbols.
109
110 // On a symbol operand this indicates that the immediate is the symbol
111 // address relative the __tls_base wasm global.
112 // Only applicable to data symbols.
114
115 // On a symbol operand this indicates that the immediate is the symbol
116 // address relative the __table_base wasm global.
117 // Only applicable to function symbols.
119};
120
121} // end namespace WebAssemblyII
122
123} // end namespace llvm
124
125// Defines symbolic names for WebAssembly registers. This defines a mapping from
126// register name to register number.
127//
128#define GET_REGINFO_ENUM
129#include "WebAssemblyGenRegisterInfo.inc"
130
131// Defines symbolic names for the WebAssembly instructions.
132//
133#define GET_INSTRINFO_ENUM
134#define GET_INSTRINFO_MC_HELPER_DECLS
135#include "WebAssemblyGenInstrInfo.inc"
136
137namespace llvm {
138namespace WebAssembly {
139
140/// Instruction opcodes emitted via means other than CodeGen.
141static const unsigned Nop = 0x01;
142static const unsigned End = 0x0b;
143
144/// Return the default p2align value for a load or store with the given opcode.
145inline unsigned GetDefaultP2AlignAny(unsigned Opc) {
146 switch (Opc) {
147#define WASM_LOAD_STORE(NAME) \
148 case WebAssembly::NAME##_A32: \
149 case WebAssembly::NAME##_A64: \
150 case WebAssembly::NAME##_A32_S: \
151 case WebAssembly::NAME##_A64_S:
152 WASM_LOAD_STORE(LOAD8_S_I32)
153 WASM_LOAD_STORE(LOAD8_U_I32)
154 WASM_LOAD_STORE(LOAD8_S_I64)
155 WASM_LOAD_STORE(LOAD8_U_I64)
156 WASM_LOAD_STORE(ATOMIC_LOAD8_U_I32)
157 WASM_LOAD_STORE(ATOMIC_LOAD8_U_I64)
158 WASM_LOAD_STORE(STORE8_I32)
159 WASM_LOAD_STORE(STORE8_I64)
160 WASM_LOAD_STORE(ATOMIC_STORE8_I32)
161 WASM_LOAD_STORE(ATOMIC_STORE8_I64)
162 WASM_LOAD_STORE(ATOMIC_RMW8_U_ADD_I32)
163 WASM_LOAD_STORE(ATOMIC_RMW8_U_ADD_I64)
164 WASM_LOAD_STORE(ATOMIC_RMW8_U_SUB_I32)
165 WASM_LOAD_STORE(ATOMIC_RMW8_U_SUB_I64)
166 WASM_LOAD_STORE(ATOMIC_RMW8_U_AND_I32)
167 WASM_LOAD_STORE(ATOMIC_RMW8_U_AND_I64)
168 WASM_LOAD_STORE(ATOMIC_RMW8_U_OR_I32)
169 WASM_LOAD_STORE(ATOMIC_RMW8_U_OR_I64)
170 WASM_LOAD_STORE(ATOMIC_RMW8_U_XOR_I32)
171 WASM_LOAD_STORE(ATOMIC_RMW8_U_XOR_I64)
172 WASM_LOAD_STORE(ATOMIC_RMW8_U_XCHG_I32)
173 WASM_LOAD_STORE(ATOMIC_RMW8_U_XCHG_I64)
174 WASM_LOAD_STORE(ATOMIC_RMW8_U_CMPXCHG_I32)
175 WASM_LOAD_STORE(ATOMIC_RMW8_U_CMPXCHG_I64)
176 WASM_LOAD_STORE(LOAD8_SPLAT)
177 WASM_LOAD_STORE(LOAD_LANE_I8x16)
178 WASM_LOAD_STORE(STORE_LANE_I8x16)
179 return 0;
180 WASM_LOAD_STORE(LOAD16_S_I32)
181 WASM_LOAD_STORE(LOAD16_U_I32)
182 WASM_LOAD_STORE(LOAD16_S_I64)
183 WASM_LOAD_STORE(LOAD16_U_I64)
184 WASM_LOAD_STORE(ATOMIC_LOAD16_U_I32)
185 WASM_LOAD_STORE(ATOMIC_LOAD16_U_I64)
186 WASM_LOAD_STORE(STORE16_I32)
187 WASM_LOAD_STORE(STORE16_I64)
188 WASM_LOAD_STORE(ATOMIC_STORE16_I32)
189 WASM_LOAD_STORE(ATOMIC_STORE16_I64)
190 WASM_LOAD_STORE(ATOMIC_RMW16_U_ADD_I32)
191 WASM_LOAD_STORE(ATOMIC_RMW16_U_ADD_I64)
192 WASM_LOAD_STORE(ATOMIC_RMW16_U_SUB_I32)
193 WASM_LOAD_STORE(ATOMIC_RMW16_U_SUB_I64)
194 WASM_LOAD_STORE(ATOMIC_RMW16_U_AND_I32)
195 WASM_LOAD_STORE(ATOMIC_RMW16_U_AND_I64)
196 WASM_LOAD_STORE(ATOMIC_RMW16_U_OR_I32)
197 WASM_LOAD_STORE(ATOMIC_RMW16_U_OR_I64)
198 WASM_LOAD_STORE(ATOMIC_RMW16_U_XOR_I32)
199 WASM_LOAD_STORE(ATOMIC_RMW16_U_XOR_I64)
200 WASM_LOAD_STORE(ATOMIC_RMW16_U_XCHG_I32)
201 WASM_LOAD_STORE(ATOMIC_RMW16_U_XCHG_I64)
202 WASM_LOAD_STORE(ATOMIC_RMW16_U_CMPXCHG_I32)
203 WASM_LOAD_STORE(ATOMIC_RMW16_U_CMPXCHG_I64)
204 WASM_LOAD_STORE(LOAD16_SPLAT)
205 WASM_LOAD_STORE(LOAD_LANE_I16x8)
206 WASM_LOAD_STORE(STORE_LANE_I16x8)
207 return 1;
208 WASM_LOAD_STORE(LOAD_I32)
209 WASM_LOAD_STORE(LOAD_F32)
210 WASM_LOAD_STORE(STORE_I32)
211 WASM_LOAD_STORE(STORE_F32)
212 WASM_LOAD_STORE(LOAD32_S_I64)
213 WASM_LOAD_STORE(LOAD32_U_I64)
214 WASM_LOAD_STORE(STORE32_I64)
215 WASM_LOAD_STORE(ATOMIC_LOAD_I32)
216 WASM_LOAD_STORE(ATOMIC_LOAD32_U_I64)
217 WASM_LOAD_STORE(ATOMIC_STORE_I32)
218 WASM_LOAD_STORE(ATOMIC_STORE32_I64)
219 WASM_LOAD_STORE(ATOMIC_RMW_ADD_I32)
220 WASM_LOAD_STORE(ATOMIC_RMW32_U_ADD_I64)
221 WASM_LOAD_STORE(ATOMIC_RMW_SUB_I32)
222 WASM_LOAD_STORE(ATOMIC_RMW32_U_SUB_I64)
223 WASM_LOAD_STORE(ATOMIC_RMW_AND_I32)
224 WASM_LOAD_STORE(ATOMIC_RMW32_U_AND_I64)
225 WASM_LOAD_STORE(ATOMIC_RMW_OR_I32)
226 WASM_LOAD_STORE(ATOMIC_RMW32_U_OR_I64)
227 WASM_LOAD_STORE(ATOMIC_RMW_XOR_I32)
228 WASM_LOAD_STORE(ATOMIC_RMW32_U_XOR_I64)
229 WASM_LOAD_STORE(ATOMIC_RMW_XCHG_I32)
230 WASM_LOAD_STORE(ATOMIC_RMW32_U_XCHG_I64)
231 WASM_LOAD_STORE(ATOMIC_RMW_CMPXCHG_I32)
232 WASM_LOAD_STORE(ATOMIC_RMW32_U_CMPXCHG_I64)
233 WASM_LOAD_STORE(MEMORY_ATOMIC_NOTIFY)
234 WASM_LOAD_STORE(MEMORY_ATOMIC_WAIT32)
235 WASM_LOAD_STORE(LOAD32_SPLAT)
236 WASM_LOAD_STORE(LOAD_ZERO_I32x4)
237 WASM_LOAD_STORE(LOAD_LANE_I32x4)
238 WASM_LOAD_STORE(STORE_LANE_I32x4)
239 return 2;
240 WASM_LOAD_STORE(LOAD_I64)
241 WASM_LOAD_STORE(LOAD_F64)
242 WASM_LOAD_STORE(STORE_I64)
243 WASM_LOAD_STORE(STORE_F64)
244 WASM_LOAD_STORE(ATOMIC_LOAD_I64)
245 WASM_LOAD_STORE(ATOMIC_STORE_I64)
246 WASM_LOAD_STORE(ATOMIC_RMW_ADD_I64)
247 WASM_LOAD_STORE(ATOMIC_RMW_SUB_I64)
248 WASM_LOAD_STORE(ATOMIC_RMW_AND_I64)
249 WASM_LOAD_STORE(ATOMIC_RMW_OR_I64)
250 WASM_LOAD_STORE(ATOMIC_RMW_XOR_I64)
251 WASM_LOAD_STORE(ATOMIC_RMW_XCHG_I64)
252 WASM_LOAD_STORE(ATOMIC_RMW_CMPXCHG_I64)
253 WASM_LOAD_STORE(MEMORY_ATOMIC_WAIT64)
254 WASM_LOAD_STORE(LOAD64_SPLAT)
255 WASM_LOAD_STORE(LOAD_EXTEND_S_I16x8)
256 WASM_LOAD_STORE(LOAD_EXTEND_U_I16x8)
257 WASM_LOAD_STORE(LOAD_EXTEND_S_I32x4)
258 WASM_LOAD_STORE(LOAD_EXTEND_U_I32x4)
259 WASM_LOAD_STORE(LOAD_EXTEND_S_I64x2)
260 WASM_LOAD_STORE(LOAD_EXTEND_U_I64x2)
261 WASM_LOAD_STORE(LOAD_ZERO_I64x2)
262 WASM_LOAD_STORE(LOAD_LANE_I64x2)
263 WASM_LOAD_STORE(STORE_LANE_I64x2)
264 return 3;
265 WASM_LOAD_STORE(LOAD_V128)
266 WASM_LOAD_STORE(STORE_V128)
267 return 4;
268 default:
269 return -1;
270 }
271#undef WASM_LOAD_STORE
272}
273
274inline unsigned GetDefaultP2Align(unsigned Opc) {
275 auto Align = GetDefaultP2AlignAny(Opc);
276 if (Align == -1U) {
277 llvm_unreachable("Only loads and stores have p2align values");
278 }
279 return Align;
280}
281
282inline bool isArgument(unsigned Opc) {
283 switch (Opc) {
284 case WebAssembly::ARGUMENT_i32:
285 case WebAssembly::ARGUMENT_i32_S:
286 case WebAssembly::ARGUMENT_i64:
287 case WebAssembly::ARGUMENT_i64_S:
288 case WebAssembly::ARGUMENT_f32:
289 case WebAssembly::ARGUMENT_f32_S:
290 case WebAssembly::ARGUMENT_f64:
291 case WebAssembly::ARGUMENT_f64_S:
292 case WebAssembly::ARGUMENT_v16i8:
293 case WebAssembly::ARGUMENT_v16i8_S:
294 case WebAssembly::ARGUMENT_v8i16:
295 case WebAssembly::ARGUMENT_v8i16_S:
296 case WebAssembly::ARGUMENT_v4i32:
297 case WebAssembly::ARGUMENT_v4i32_S:
298 case WebAssembly::ARGUMENT_v2i64:
299 case WebAssembly::ARGUMENT_v2i64_S:
300 case WebAssembly::ARGUMENT_v4f32:
301 case WebAssembly::ARGUMENT_v4f32_S:
302 case WebAssembly::ARGUMENT_v2f64:
303 case WebAssembly::ARGUMENT_v2f64_S:
304 case WebAssembly::ARGUMENT_funcref:
305 case WebAssembly::ARGUMENT_funcref_S:
306 case WebAssembly::ARGUMENT_externref:
307 case WebAssembly::ARGUMENT_externref_S:
308 return true;
309 default:
310 return false;
311 }
312}
313
314inline bool isCopy(unsigned Opc) {
315 switch (Opc) {
316 case WebAssembly::COPY_I32:
317 case WebAssembly::COPY_I32_S:
318 case WebAssembly::COPY_I64:
319 case WebAssembly::COPY_I64_S:
320 case WebAssembly::COPY_F32:
321 case WebAssembly::COPY_F32_S:
322 case WebAssembly::COPY_F64:
323 case WebAssembly::COPY_F64_S:
324 case WebAssembly::COPY_V128:
325 case WebAssembly::COPY_V128_S:
326 case WebAssembly::COPY_FUNCREF:
327 case WebAssembly::COPY_FUNCREF_S:
328 case WebAssembly::COPY_EXTERNREF:
329 case WebAssembly::COPY_EXTERNREF_S:
330 return true;
331 default:
332 return false;
333 }
334}
335
336inline bool isTee(unsigned Opc) {
337 switch (Opc) {
338 case WebAssembly::TEE_I32:
339 case WebAssembly::TEE_I32_S:
340 case WebAssembly::TEE_I64:
341 case WebAssembly::TEE_I64_S:
342 case WebAssembly::TEE_F32:
343 case WebAssembly::TEE_F32_S:
344 case WebAssembly::TEE_F64:
345 case WebAssembly::TEE_F64_S:
346 case WebAssembly::TEE_V128:
347 case WebAssembly::TEE_V128_S:
348 case WebAssembly::TEE_FUNCREF:
349 case WebAssembly::TEE_FUNCREF_S:
350 case WebAssembly::TEE_EXTERNREF:
351 case WebAssembly::TEE_EXTERNREF_S:
352 return true;
353 default:
354 return false;
355 }
356}
357
358inline bool isCallDirect(unsigned Opc) {
359 switch (Opc) {
360 case WebAssembly::CALL:
361 case WebAssembly::CALL_S:
362 case WebAssembly::RET_CALL:
363 case WebAssembly::RET_CALL_S:
364 return true;
365 default:
366 return false;
367 }
368}
369
370inline bool isCallIndirect(unsigned Opc) {
371 switch (Opc) {
372 case WebAssembly::CALL_INDIRECT:
373 case WebAssembly::CALL_INDIRECT_S:
374 case WebAssembly::RET_CALL_INDIRECT:
375 case WebAssembly::RET_CALL_INDIRECT_S:
376 return true;
377 default:
378 return false;
379 }
380}
381
382inline bool isBrTable(const MachineInstr &MI) {
383 switch (MI.getOpcode()) {
384 case WebAssembly::BR_TABLE_I32:
385 case WebAssembly::BR_TABLE_I32_S:
386 case WebAssembly::BR_TABLE_I64:
387 case WebAssembly::BR_TABLE_I64_S:
388 return true;
389 default:
390 return false;
391 }
392}
393
394inline bool isMarker(unsigned Opc) {
395 switch (Opc) {
396 case WebAssembly::BLOCK:
397 case WebAssembly::BLOCK_S:
398 case WebAssembly::END_BLOCK:
399 case WebAssembly::END_BLOCK_S:
400 case WebAssembly::LOOP:
401 case WebAssembly::LOOP_S:
402 case WebAssembly::END_LOOP:
403 case WebAssembly::END_LOOP_S:
404 case WebAssembly::TRY:
405 case WebAssembly::TRY_S:
406 case WebAssembly::END_TRY:
407 case WebAssembly::END_TRY_S:
408 return true;
409 default:
410 return false;
411 }
412}
413
414inline bool isCatch(unsigned Opc) {
415 switch (Opc) {
416 case WebAssembly::CATCH:
417 case WebAssembly::CATCH_S:
418 case WebAssembly::CATCH_ALL:
419 case WebAssembly::CATCH_ALL_S:
420 return true;
421 default:
422 return false;
423 }
424}
425
426inline bool isLocalGet(unsigned Opc) {
427 switch (Opc) {
428 case WebAssembly::LOCAL_GET_I32:
429 case WebAssembly::LOCAL_GET_I32_S:
430 case WebAssembly::LOCAL_GET_I64:
431 case WebAssembly::LOCAL_GET_I64_S:
432 case WebAssembly::LOCAL_GET_F32:
433 case WebAssembly::LOCAL_GET_F32_S:
434 case WebAssembly::LOCAL_GET_F64:
435 case WebAssembly::LOCAL_GET_F64_S:
436 case WebAssembly::LOCAL_GET_V128:
437 case WebAssembly::LOCAL_GET_V128_S:
438 case WebAssembly::LOCAL_GET_FUNCREF:
439 case WebAssembly::LOCAL_GET_FUNCREF_S:
440 case WebAssembly::LOCAL_GET_EXTERNREF:
441 case WebAssembly::LOCAL_GET_EXTERNREF_S:
442 return true;
443 default:
444 return false;
445 }
446}
447
448inline bool isLocalSet(unsigned Opc) {
449 switch (Opc) {
450 case WebAssembly::LOCAL_SET_I32:
451 case WebAssembly::LOCAL_SET_I32_S:
452 case WebAssembly::LOCAL_SET_I64:
453 case WebAssembly::LOCAL_SET_I64_S:
454 case WebAssembly::LOCAL_SET_F32:
455 case WebAssembly::LOCAL_SET_F32_S:
456 case WebAssembly::LOCAL_SET_F64:
457 case WebAssembly::LOCAL_SET_F64_S:
458 case WebAssembly::LOCAL_SET_V128:
459 case WebAssembly::LOCAL_SET_V128_S:
460 case WebAssembly::LOCAL_SET_FUNCREF:
461 case WebAssembly::LOCAL_SET_FUNCREF_S:
462 case WebAssembly::LOCAL_SET_EXTERNREF:
463 case WebAssembly::LOCAL_SET_EXTERNREF_S:
464 return true;
465 default:
466 return false;
467 }
468}
469
470inline bool isLocalTee(unsigned Opc) {
471 switch (Opc) {
472 case WebAssembly::LOCAL_TEE_I32:
473 case WebAssembly::LOCAL_TEE_I32_S:
474 case WebAssembly::LOCAL_TEE_I64:
475 case WebAssembly::LOCAL_TEE_I64_S:
476 case WebAssembly::LOCAL_TEE_F32:
477 case WebAssembly::LOCAL_TEE_F32_S:
478 case WebAssembly::LOCAL_TEE_F64:
479 case WebAssembly::LOCAL_TEE_F64_S:
480 case WebAssembly::LOCAL_TEE_V128:
481 case WebAssembly::LOCAL_TEE_V128_S:
482 case WebAssembly::LOCAL_TEE_FUNCREF:
483 case WebAssembly::LOCAL_TEE_FUNCREF_S:
484 case WebAssembly::LOCAL_TEE_EXTERNREF:
485 case WebAssembly::LOCAL_TEE_EXTERNREF_S:
486 return true;
487 default:
488 return false;
489 }
490}
491
492} // end namespace WebAssembly
493} // end namespace llvm
494
495#endif
IRTranslator LLVM IR MI
#define WASM_LOAD_STORE(NAME)
Representation of each machine instruction.
Definition: MachineInstr.h:68
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ OPERAND_FIRST_TARGET
Definition: MCInstrDesc.h:78
TOF
Target Operand Flag enum.
bool isLocalTee(unsigned Opc)
bool isBrTable(const MachineInstr &MI)
bool isArgument(unsigned Opc)
bool isCallIndirect(unsigned Opc)
unsigned GetDefaultP2Align(unsigned Opc)
bool isMarker(unsigned Opc)
bool isCatch(unsigned Opc)
static const unsigned Nop
Instruction opcodes emitted via means other than CodeGen.
cl::opt< bool > WasmEnableEH
bool isCopy(unsigned Opc)
cl::opt< bool > WasmEnableSjLj
bool isTee(unsigned Opc)
static const unsigned End
cl::opt< bool > WasmEnableEmEH
@ OPERAND_GLOBAL
Global index.
@ OPERAND_OFFSET64
64-bit unsigned memory offsets.
@ OPERAND_I32IMM
32-bit integer immediates.
@ OPERAND_P2ALIGN
p2align immediate for load and store address alignment.
@ OPERAND_TABLE
32-bit unsigned table number.
@ OPERAND_VEC_I64IMM
64-bit vector lane immediate
@ OPERAND_VEC_I16IMM
16-bit vector lane immediate
@ OPERAND_TYPEINDEX
type signature immediate for call_indirect.
@ OPERAND_FUNCTION32
32-bit unsigned function indices.
@ OPERAND_F32IMM
32-bit floating-point immediates.
@ OPERAND_BASIC_BLOCK
Basic block label in a branch construct.
@ OPERAND_VEC_I32IMM
32-bit vector lane immediate
@ OPERAND_BRLIST
A list of branch targets for br_list.
@ OPERAND_F64IMM
64-bit floating-point immediates.
@ OPERAND_VEC_I8IMM
8-bit vector lane immediate
@ OPERAND_SIGNATURE
signature immediate for block/loop.
@ OPERAND_I64IMM
64-bit integer immediates.
@ OPERAND_OFFSET32
32-bit unsigned memory offsets.
unsigned GetDefaultP2AlignAny(unsigned Opc)
Return the default p2align value for a load or store with the given opcode.
cl::opt< bool > WasmEnableEmSjLj
bool isCallDirect(unsigned Opc)
bool isLocalSet(unsigned Opc)
bool isLocalGet(unsigned Opc)
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
MCAsmBackend * createWebAssemblyAsmBackend(const Triple &TT)
MCCodeEmitter * createWebAssemblyMCCodeEmitter(const MCInstrInfo &MCII)
std::unique_ptr< MCObjectTargetWriter > createWebAssemblyWasmObjectWriter(bool Is64Bit, bool IsEmscripten)
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39