1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | |
5 | // clang-format off |
6 | |
7 | /*****************************************************************************/ |
8 | |
9 | #ifndef GTSTRUCT_0 |
10 | #error Define GTSTRUCT_0 before including this file. |
11 | #endif |
12 | |
13 | #ifndef GTSTRUCT_1 |
14 | #error Define GTSTRUCT_1 before including this file. |
15 | #endif |
16 | |
17 | #ifndef GTSTRUCT_2 |
18 | #error Define GTSTRUCT_2 before including this file. |
19 | #endif |
20 | |
21 | #ifndef GTSTRUCT_3 |
22 | #error Define GTSTRUCT_3 before including this file. |
23 | #endif |
24 | |
25 | #ifndef GTSTRUCT_4 |
26 | #error Define GTSTRUCT_4 before including this file. |
27 | #endif |
28 | |
29 | #ifndef GTSTRUCT_N |
30 | #error Define GTSTRUCT_N before including this file. |
31 | #endif |
32 | |
33 | #ifndef GTSTRUCT_2_SPECIAL |
34 | #error Define GTSTRUCT_2_SPECIAL before including this file. |
35 | #endif |
36 | |
37 | #ifndef GTSTRUCT_3_SPECIAL |
38 | #error Define GTSTRUCT_3_SPECIAL before including this file. |
39 | #endif |
40 | |
41 | /*****************************************************************************/ |
42 | |
43 | // |
44 | // Field name , Allowed node enum(s) |
45 | // |
46 | // The "SPECIAL" variants indicate that some or all of the allowed opers exist elsewhere. This is |
47 | // used in the DEBUGGABLE_GENTREE implementation when determining which vtable pointer to use for |
48 | // a given oper. For example, IntConCommon (for the GenTreeIntConCommon type) allows opers |
49 | // for all its subtypes. The "SPECIAL" version is attached to the supertypes. "N" is always |
50 | // considered "special". |
51 | |
52 | GTSTRUCT_0(UnOp , GT_OP) |
53 | GTSTRUCT_0(Op , GT_OP) |
54 | #if !FEATURE_EH_FUNCLETS |
55 | GTSTRUCT_2(Val , GT_END_LFIN, GT_JMP) |
56 | #else |
57 | GTSTRUCT_1(Val , GT_JMP) |
58 | #endif |
59 | GTSTRUCT_3_SPECIAL(IntConCommon, GT_CNS_INT, GT_CNS_LNG, GT_JMPTABLE) |
60 | GTSTRUCT_1(JumpTable , GT_JMPTABLE) |
61 | GTSTRUCT_1(IntCon , GT_CNS_INT) |
62 | GTSTRUCT_1(LngCon , GT_CNS_LNG) |
63 | GTSTRUCT_1(DblCon , GT_CNS_DBL) |
64 | GTSTRUCT_1(StrCon , GT_CNS_STR) |
65 | GTSTRUCT_N(LclVarCommon, GT_LCL_VAR, GT_LCL_FLD, GT_PHI_ARG, GT_STORE_LCL_VAR, GT_STORE_LCL_FLD, GT_LCL_VAR_ADDR, GT_LCL_FLD_ADDR) |
66 | GTSTRUCT_3(LclVar , GT_LCL_VAR, GT_LCL_VAR_ADDR, GT_STORE_LCL_VAR) |
67 | GTSTRUCT_3(LclFld , GT_LCL_FLD, GT_STORE_LCL_FLD, GT_LCL_FLD_ADDR) |
68 | GTSTRUCT_1(Cast , GT_CAST) |
69 | GTSTRUCT_1(Box , GT_BOX) |
70 | GTSTRUCT_1(Field , GT_FIELD) |
71 | GTSTRUCT_1(Call , GT_CALL) |
72 | GTSTRUCT_2_SPECIAL(ArgList , GT_LIST, GT_FIELD_LIST) |
73 | GTSTRUCT_1(FieldList , GT_FIELD_LIST) |
74 | GTSTRUCT_1(Colon , GT_COLON) |
75 | GTSTRUCT_1(FptrVal , GT_FTN_ADDR) |
76 | GTSTRUCT_1(Intrinsic , GT_INTRINSIC) |
77 | GTSTRUCT_1(Index , GT_INDEX) |
78 | GTSTRUCT_1(IndexAddr , GT_INDEX_ADDR) |
79 | #if defined(FEATURE_HW_INTRINSICS) && defined(FEATURE_SIMD) |
80 | GTSTRUCT_3(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_SIMD_CHK, GT_HW_INTRINSIC_CHK) |
81 | #elif defined(FEATURE_SIMD) |
82 | GTSTRUCT_2(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_SIMD_CHK) |
83 | #elif defined(FEATURE_HW_INTRINSICS) |
84 | GTSTRUCT_2(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_HW_INTRINSIC_CHK) |
85 | #else // !FEATURE_SIMD && !FEATURE_HW_INTRINSICS |
86 | GTSTRUCT_1(BoundsChk , GT_ARR_BOUNDS_CHECK) |
87 | #endif // !FEATURE_SIMD && !FEATURE_HW_INTRINSICS |
88 | GTSTRUCT_1(ArrLen , GT_ARR_LENGTH) |
89 | GTSTRUCT_1(ArrElem , GT_ARR_ELEM) |
90 | GTSTRUCT_1(ArrOffs , GT_ARR_OFFSET) |
91 | GTSTRUCT_1(ArrIndex , GT_ARR_INDEX) |
92 | GTSTRUCT_1(RetExpr , GT_RET_EXPR) |
93 | GTSTRUCT_2(Stmt , GT_STMT, GT_IL_OFFSET) |
94 | GTSTRUCT_2(CopyOrReload, GT_COPY, GT_RELOAD) |
95 | GTSTRUCT_2(ClsVar , GT_CLS_VAR, GT_CLS_VAR_ADDR) |
96 | GTSTRUCT_1(ArgPlace , GT_ARGPLACE) |
97 | GTSTRUCT_1(Label , GT_LABEL) |
98 | GTSTRUCT_1(CmpXchg , GT_CMPXCHG) |
99 | GTSTRUCT_1(AddrMode , GT_LEA) |
100 | GTSTRUCT_N(Blk , GT_BLK, GT_STORE_BLK, GT_OBJ, GT_STORE_OBJ, GT_DYN_BLK, GT_STORE_DYN_BLK) |
101 | GTSTRUCT_2(Obj , GT_OBJ, GT_STORE_OBJ) |
102 | GTSTRUCT_2(DynBlk , GT_DYN_BLK, GT_STORE_DYN_BLK) |
103 | GTSTRUCT_1(Qmark , GT_QMARK) |
104 | GTSTRUCT_1(PhiArg , GT_PHI_ARG) |
105 | GTSTRUCT_1(StoreInd , GT_STOREIND) |
106 | GTSTRUCT_N(Indir , GT_STOREIND, GT_IND, GT_NULLCHECK, GT_BLK, GT_STORE_BLK, GT_OBJ, GT_STORE_OBJ, GT_DYN_BLK, GT_STORE_DYN_BLK) |
107 | #if FEATURE_ARG_SPLIT |
108 | GTSTRUCT_2_SPECIAL(PutArgStk, GT_PUTARG_STK, GT_PUTARG_SPLIT) |
109 | GTSTRUCT_1(PutArgSplit , GT_PUTARG_SPLIT) |
110 | #else // !FEATURE_ARG_SPLIT |
111 | GTSTRUCT_1(PutArgStk , GT_PUTARG_STK) |
112 | #endif // !FEATURE_ARG_SPLIT |
113 | GTSTRUCT_1(PhysReg , GT_PHYSREG) |
114 | #ifdef FEATURE_SIMD |
115 | GTSTRUCT_1(SIMD , GT_SIMD) |
116 | #endif // FEATURE_SIMD |
117 | #ifdef FEATURE_HW_INTRINSICS |
118 | GTSTRUCT_1(HWIntrinsic , GT_HWIntrinsic) |
119 | #endif // FEATURE_HW_INTRINSICS |
120 | GTSTRUCT_1(AllocObj , GT_ALLOCOBJ) |
121 | GTSTRUCT_1(RuntimeLookup, GT_RUNTIMELOOKUP) |
122 | GTSTRUCT_2(CC , GT_JCC, GT_SETCC) |
123 | #if defined(_TARGET_X86_) |
124 | GTSTRUCT_1(MultiRegOp , GT_MUL_LONG) |
125 | #elif defined (_TARGET_ARM_) |
126 | GTSTRUCT_3(MultiRegOp , GT_MUL_LONG, GT_PUTARG_REG, GT_BITCAST) |
127 | #endif |
128 | /*****************************************************************************/ |
129 | #undef GTSTRUCT_0 |
130 | #undef GTSTRUCT_1 |
131 | #undef GTSTRUCT_2 |
132 | #undef GTSTRUCT_3 |
133 | #undef GTSTRUCT_4 |
134 | #undef GTSTRUCT_N |
135 | #undef GTSTRUCT_2_SPECIAL |
136 | #undef GTSTRUCT_3_SPECIAL |
137 | /*****************************************************************************/ |
138 | |
139 | // clang-format on |
140 | |