| 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 | |