| 1 | //- WebAssemblyISD.def - WebAssembly ISD ---------------------------*- 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 describes the various WebAssembly ISD node types. |
| 11 | /// |
| 12 | //===----------------------------------------------------------------------===// |
| 13 | |
| 14 | // NOTE: NO INCLUDE GUARD DESIRED! |
| 15 | |
| 16 | HANDLE_NODETYPE(CALL) |
| 17 | HANDLE_NODETYPE(RET_CALL) |
| 18 | HANDLE_NODETYPE(RETURN) |
| 19 | HANDLE_NODETYPE(ARGUMENT) |
| 20 | HANDLE_NODETYPE(LOCAL_GET) |
| 21 | HANDLE_NODETYPE(LOCAL_SET) |
| 22 | // A wrapper node for TargetExternalSymbol, TargetGlobalAddress, and MCSymbol |
| 23 | HANDLE_NODETYPE(Wrapper) |
| 24 | // A special node for TargetGlobalAddress used in PIC code for |
| 25 | // __memory_base/__table_base relative access. |
| 26 | HANDLE_NODETYPE(WrapperREL) |
| 27 | HANDLE_NODETYPE(BR_IF) |
| 28 | HANDLE_NODETYPE(BR_TABLE) |
| 29 | HANDLE_NODETYPE(DOT) |
| 30 | HANDLE_NODETYPE(SHUFFLE) |
| 31 | HANDLE_NODETYPE(SWIZZLE) |
| 32 | HANDLE_NODETYPE(VEC_SHL) |
| 33 | HANDLE_NODETYPE(VEC_SHR_S) |
| 34 | HANDLE_NODETYPE(VEC_SHR_U) |
| 35 | HANDLE_NODETYPE(NARROW_U) |
| 36 | HANDLE_NODETYPE(EXTEND_LOW_S) |
| 37 | HANDLE_NODETYPE(EXTEND_LOW_U) |
| 38 | HANDLE_NODETYPE(EXTEND_HIGH_S) |
| 39 | HANDLE_NODETYPE(EXTEND_HIGH_U) |
| 40 | HANDLE_NODETYPE(CONVERT_LOW_S) |
| 41 | HANDLE_NODETYPE(CONVERT_LOW_U) |
| 42 | HANDLE_NODETYPE(PROMOTE_LOW) |
| 43 | HANDLE_NODETYPE(TRUNC_SAT_ZERO_S) |
| 44 | HANDLE_NODETYPE(TRUNC_SAT_ZERO_U) |
| 45 | HANDLE_NODETYPE(DEMOTE_ZERO) |
| 46 | HANDLE_NODETYPE(I64_ADD128) |
| 47 | HANDLE_NODETYPE(I64_SUB128) |
| 48 | HANDLE_NODETYPE(I64_MUL_WIDE_S) |
| 49 | HANDLE_NODETYPE(I64_MUL_WIDE_U) |
| 50 | |
| 51 | // Memory intrinsics |
| 52 | HANDLE_NODETYPE(GLOBAL_GET) |
| 53 | HANDLE_NODETYPE(GLOBAL_SET) |
| 54 | HANDLE_NODETYPE(TABLE_GET) |
| 55 | HANDLE_NODETYPE(TABLE_SET) |
| 56 | |
| 57 | // Bulk memory instructions. These follow LLVM's expected semantics of |
| 58 | // supporting out-of-bounds pointers if the length is zero, by inserting |
| 59 | // a branch around Wasm's `memory.copy` and `memory.fill`, which would |
| 60 | // otherwise trap. |
| 61 | HANDLE_NODETYPE(MEMCPY) |
| 62 | HANDLE_NODETYPE(MEMSET) |
| 63 |