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.
7 /*****************************************************************************/
10 #error Define GTSTRUCT_0 before including this file.
14 #error Define GTSTRUCT_1 before including this file.
18 #error Define GTSTRUCT_2 before including this file.
22 #error Define GTSTRUCT_3 before including this file.
26 #error Define GTSTRUCT_4 before including this file.
30 #error Define GTSTRUCT_N before including this file.
33 #ifndef GTSTRUCT_2_SPECIAL
34 #error Define GTSTRUCT_2_SPECIAL before including this file.
37 #ifndef GTSTRUCT_3_SPECIAL
38 #error Define GTSTRUCT_3_SPECIAL before including this file.
41 /*****************************************************************************/
44 // Field name , Allowed node enum(s)
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".
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)
57 GTSTRUCT_1(Val , GT_JMP)
59 #ifndef LEGACY_BACKEND
60 GTSTRUCT_3_SPECIAL(IntConCommon, GT_CNS_INT, GT_CNS_LNG, GT_JMPTABLE)
61 GTSTRUCT_1(JumpTable , GT_JMPTABLE)
62 #else // LEGACY_BACKEND
63 GTSTRUCT_2_SPECIAL(IntConCommon, GT_CNS_INT, GT_CNS_LNG)
64 #endif// LEGACY_BACKEND
65 GTSTRUCT_1(IntCon , GT_CNS_INT)
66 GTSTRUCT_1(LngCon , GT_CNS_LNG)
67 GTSTRUCT_1(DblCon , GT_CNS_DBL)
68 GTSTRUCT_1(StrCon , GT_CNS_STR)
69 GTSTRUCT_N(LclVarCommon, GT_LCL_VAR, GT_LCL_FLD, GT_REG_VAR, GT_PHI_ARG, GT_STORE_LCL_VAR, GT_STORE_LCL_FLD, GT_LCL_VAR_ADDR, GT_LCL_FLD_ADDR)
70 GTSTRUCT_3(LclVar , GT_LCL_VAR, GT_LCL_VAR_ADDR, GT_STORE_LCL_VAR)
71 #ifndef LEGACY_BACKEND
72 GTSTRUCT_3(LclFld , GT_LCL_FLD, GT_STORE_LCL_FLD, GT_LCL_FLD_ADDR)
73 #else // LEGACY_BACKEND
74 GTSTRUCT_1(LclFld , GT_LCL_FLD)
75 #endif // LEGACY_BACKEND
76 GTSTRUCT_1(RegVar , GT_REG_VAR)
77 GTSTRUCT_1(Cast , GT_CAST)
78 GTSTRUCT_1(Box , GT_BOX)
79 GTSTRUCT_1(Field , GT_FIELD)
80 GTSTRUCT_1(Call , GT_CALL)
81 GTSTRUCT_2_SPECIAL(ArgList , GT_LIST, GT_FIELD_LIST)
82 GTSTRUCT_1(FieldList , GT_FIELD_LIST)
83 GTSTRUCT_1(Colon , GT_COLON)
84 GTSTRUCT_1(FptrVal , GT_FTN_ADDR)
85 GTSTRUCT_1(Intrinsic , GT_INTRINSIC)
86 GTSTRUCT_1(Index , GT_INDEX)
87 GTSTRUCT_1(IndexAddr , GT_INDEX_ADDR)
88 #if defined(FEATURE_HW_INTRINSICS) && defined(FEATURE_SIMD)
89 GTSTRUCT_3(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_SIMD_CHK, GT_HW_INTRINSIC_CHK)
90 #elif defined(FEATURE_SIMD)
91 GTSTRUCT_2(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_SIMD_CHK)
92 #elif defined(FEATURE_HW_INTRINSICS)
93 GTSTRUCT_2(BoundsChk , GT_ARR_BOUNDS_CHECK, GT_HW_INTRINSIC_CHK)
94 #else // !FEATURE_SIMD && !FEATURE_HW_INTRINSICS
95 GTSTRUCT_1(BoundsChk , GT_ARR_BOUNDS_CHECK)
96 #endif // !FEATURE_SIMD && !FEATURE_HW_INTRINSICS
97 GTSTRUCT_1(ArrLen , GT_ARR_LENGTH)
98 GTSTRUCT_1(ArrElem , GT_ARR_ELEM)
99 GTSTRUCT_1(ArrOffs , GT_ARR_OFFSET)
100 GTSTRUCT_1(ArrIndex , GT_ARR_INDEX)
101 GTSTRUCT_1(RetExpr , GT_RET_EXPR)
102 GTSTRUCT_2(Stmt , GT_STMT, GT_IL_OFFSET)
103 GTSTRUCT_2(CopyOrReload, GT_COPY, GT_RELOAD)
104 GTSTRUCT_2(ClsVar , GT_CLS_VAR, GT_CLS_VAR_ADDR)
105 GTSTRUCT_1(ArgPlace , GT_ARGPLACE)
106 GTSTRUCT_1(Label , GT_LABEL)
107 GTSTRUCT_1(CmpXchg , GT_CMPXCHG)
108 GTSTRUCT_1(AddrMode , GT_LEA)
109 GTSTRUCT_N(Blk , GT_BLK, GT_STORE_BLK, GT_OBJ, GT_STORE_OBJ, GT_DYN_BLK, GT_STORE_DYN_BLK)
110 GTSTRUCT_2(Obj , GT_OBJ, GT_STORE_OBJ)
111 GTSTRUCT_2(DynBlk , GT_DYN_BLK, GT_STORE_DYN_BLK)
112 GTSTRUCT_1(Qmark , GT_QMARK)
113 GTSTRUCT_1(PhiArg , GT_PHI_ARG)
114 GTSTRUCT_1(StoreInd , GT_STOREIND)
115 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)
116 #if defined(LEGACY_BACKEND) || !defined(_TARGET_ARM_)
117 GTSTRUCT_1(PutArgStk , GT_PUTARG_STK)
118 #else // defined(_TARGET_ARM_) && !defined(LEGACY_BACKEND)
119 GTSTRUCT_2_SPECIAL(PutArgStk, GT_PUTARG_STK, GT_PUTARG_SPLIT)
120 GTSTRUCT_1(PutArgSplit , GT_PUTARG_SPLIT)
121 #endif // defined(LEGACY_BACKEND) || !defined(_TARGET_ARM_)
122 GTSTRUCT_1(PhysReg , GT_PHYSREG)
124 GTSTRUCT_1(SIMD , GT_SIMD)
125 #endif // FEATURE_SIMD
126 #ifdef FEATURE_HW_INTRINSICS
127 GTSTRUCT_1(HWIntrinsic , GT_HWIntrinsic)
128 #endif // FEATURE_HW_INTRINSICS
129 GTSTRUCT_1(AllocObj , GT_ALLOCOBJ)
130 GTSTRUCT_1(RuntimeLookup, GT_RUNTIMELOOKUP)
131 GTSTRUCT_2(CC , GT_JCC, GT_SETCC)
132 #if !defined(LEGACY_BACKEND) && defined(_TARGET_ARM_)
133 GTSTRUCT_3(MultiRegOp , GT_MUL_LONG, GT_PUTARG_REG, GT_BITCAST)
135 /*****************************************************************************/
142 #undef GTSTRUCT_2_SPECIAL
143 #undef GTSTRUCT_3_SPECIAL
144 /*****************************************************************************/