43#define NOOP_MOVE_INSN_CODE INT_MAX
47#define RTX_CODE enum rtx_code
50#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) ENUM ,
59#define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE)
63# define NON_GENERATOR_NUM_RTX_CODE ((int) MATCH_OPERAND)
66#define RTX_CODE_BITSIZE 8
96#define RTX_OBJ_MASK (~1)
97#define RTX_OBJ_RESULT (RTX_OBJ & RTX_OBJ_MASK)
98#define RTX_COMPARE_MASK (~1)
99#define RTX_COMPARE_RESULT (RTX_COMPARE & RTX_COMPARE_MASK)
100#define RTX_ARITHMETIC_MASK (~1)
101#define RTX_ARITHMETIC_RESULT (RTX_COMM_ARITH & RTX_ARITHMETIC_MASK)
102#define RTX_BINARY_MASK (~3)
103#define RTX_BINARY_RESULT (RTX_COMPARE & RTX_BINARY_MASK)
104#define RTX_COMMUTATIVE_MASK (~2)
105#define RTX_COMMUTATIVE_RESULT (RTX_COMM_COMPARE & RTX_COMMUTATIVE_MASK)
106#define RTX_NON_COMMUTATIVE_RESULT (RTX_COMPARE & RTX_COMMUTATIVE_MASK)
109#define GET_RTX_LENGTH(CODE) (rtx_length[(int) (CODE)])
112#define GET_RTX_NAME(CODE) (rtx_name[(int) (CODE)])
115#define GET_RTX_FORMAT(CODE) (rtx_format[(int) (CODE)])
118#define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)])
122#define INSN_CHAIN_CODE_P(CODE) IN_RANGE (CODE, DEBUG_INSN, NOTE)
288#define CWI_GET_NUM_ELEM(RTX) \
289 ((int)RTL_FLAG_CHECK1("CWI_GET_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem)
290#define CWI_PUT_NUM_ELEM(RTX, NUM) \
291 (RTL_FLAG_CHECK1("CWI_PUT_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem = (NUM))
312struct GTY((desc(
"0"), tag(
"0"),
313 chain_next (
"RTX_NEXT (&%h)"),
332 unsigned int jump : 1;
339 unsigned int call : 1;
389 unsigned int used : 1;
455 }
GTY ((special (
"rtx_def"), desc (
"GET_CODE (&%0)"))) u;
478 return rt->code == EXPR_LIST;
508 return rt->code == INSN_LIST;
536 return rt->code == SEQUENCE;
544 return rt->code == SEQUENCE;
619 inline rtx jump_label ()
const;
665 inline rtvec get_labels ()
const;
703#define RTX_HDR_SIZE offsetof (struct rtx_def, u)
706#define RTX_CODE_SIZE(CODE) rtx_code_size[CODE]
708#define NULL_RTX (rtx) 0
712#define RTX_NEXT(X) (rtx_next[GET_CODE (X)] == 0 ? NULL \
713 : *(rtx *)(((char *)X) + rtx_next[GET_CODE (X)]))
717#define RTX_PREV(X) ((INSN_P (X) \
719 || JUMP_TABLE_DATA_P (X) \
722 && PREV_INSN (as_a <rtx_insn *> (X)) != NULL \
723 && NEXT_INSN (PREV_INSN (as_a <rtx_insn *> (X))) == X \
724 ? PREV_INSN (as_a <rtx_insn *> (X)) : NULL)
728#define GET_CODE(RTX) ((enum rtx_code) (RTX)->code)
729#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE))
731#define GET_MODE(RTX) ((machine_mode) (RTX)->mode)
732#define PUT_MODE_RAW(RTX, MODE) ((RTX)->mode = (MODE))
743#define NULL_RTVEC (rtvec) 0
745#define GET_NUM_ELEM(RTVEC) ((RTVEC)->num_elem)
746#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (NUM))
749#define REG_P(X) (GET_CODE (X) == REG)
752#define MEM_P(X) (GET_CODE (X) == MEM)
754#if TARGET_SUPPORTS_WIDE_INT
757#define CASE_CONST_SCALAR_INT \
763#define CASE_CONST_UNIQUE \
765 case CONST_WIDE_INT: \
766 case CONST_POLY_INT: \
771#define CASE_CONST_ANY \
773 case CONST_WIDE_INT: \
774 case CONST_POLY_INT: \
782#define CASE_CONST_SCALAR_INT \
788#define CASE_CONST_UNIQUE \
794#define CASE_CONST_ANY \
802#define CONST_INT_P(X) (GET_CODE (X) == CONST_INT)
805#define CONST_WIDE_INT_P(X) (GET_CODE (X) == CONST_WIDE_INT)
809#define CONST_POLY_INT_P(X) \
810 (NUM_POLY_INT_COEFFS > 1 && GET_CODE (X) == CONST_POLY_INT)
813#define CONST_FIXED_P(X) (GET_CODE (X) == CONST_FIXED)
817#define CONST_DOUBLE_P(X) (GET_CODE (X) == CONST_DOUBLE)
820#define CONST_DOUBLE_AS_INT_P(X) \
821 (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == VOIDmode)
824#if TARGET_SUPPORTS_WIDE_INT
825#define CONST_SCALAR_INT_P(X) \
826 (CONST_INT_P (X) || CONST_WIDE_INT_P (X))
828#define CONST_SCALAR_INT_P(X) \
829 (CONST_INT_P (X) || CONST_DOUBLE_AS_INT_P (X))
833#define CONST_DOUBLE_AS_FLOAT_P(X) \
834 (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode)
837#define CONST_VECTOR_P(X) (GET_CODE (X) == CONST_VECTOR)
840#define LABEL_P(X) (GET_CODE (X) == CODE_LABEL)
843#define JUMP_P(X) (GET_CODE (X) == JUMP_INSN)
846#define CALL_P(X) (GET_CODE (X) == CALL_INSN)
850#define FAKE_CALL_P(RTX) \
851 (RTL_FLAG_CHECK1 ("FAKE_CALL_P", (RTX), CALL_INSN)->used)
854#define NONJUMP_INSN_P(X) (GET_CODE (X) == INSN)
857#define DEBUG_INSN_P(X) (GET_CODE (X) == DEBUG_INSN)
860#define NONDEBUG_INSN_P(X) (NONJUMP_INSN_P (X) || JUMP_P (X) || CALL_P (X))
863#define MAY_HAVE_DEBUG_MARKER_INSNS debug_nonbind_markers_p
865#define MAY_HAVE_DEBUG_BIND_INSNS flag_var_tracking_assignments
867#define MAY_HAVE_DEBUG_INSNS \
868 (MAY_HAVE_DEBUG_MARKER_INSNS || MAY_HAVE_DEBUG_BIND_INSNS)
871#define INSN_P(X) (NONDEBUG_INSN_P (X) || DEBUG_INSN_P (X))
874#define NOTE_P(X) (GET_CODE (X) == NOTE)
877#define BARRIER_P(X) (GET_CODE (X) == BARRIER)
880#define JUMP_TABLE_DATA_P(INSN) (GET_CODE (INSN) == JUMP_TABLE_DATA)
883#define SUBREG_P(RTX) (GET_CODE (RTX) == SUBREG)
886#define SYMBOL_REF_P(RTX) (GET_CODE (RTX) == SYMBOL_REF)
1017#define ANY_RETURN_P(X) \
1018 (GET_CODE (X) == RETURN || GET_CODE (X) == SIMPLE_RETURN)
1023 (GET_RTX_CLASS (GET_CODE (X)) == RTX_UNARY)
1027#define BINARY_P(X) \
1028 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_BINARY_MASK) == RTX_BINARY_RESULT)
1032#define ARITHMETIC_P(X) \
1033 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_ARITHMETIC_MASK) \
1034 == RTX_ARITHMETIC_RESULT)
1038#define COMMUTATIVE_ARITH_P(X) \
1039 (GET_RTX_CLASS (GET_CODE (X)) == RTX_COMM_ARITH)
1045#define SWAPPABLE_OPERANDS_P(X) \
1046 ((1 << GET_RTX_CLASS (GET_CODE (X))) \
1047 & ((1 << RTX_COMM_ARITH) | (1 << RTX_COMM_COMPARE) \
1048 | (1 << RTX_COMPARE)))
1052#define NON_COMMUTATIVE_P(X) \
1053 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK) \
1054 == RTX_NON_COMMUTATIVE_RESULT)
1058#define COMMUTATIVE_P(X) \
1059 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK) \
1060 == RTX_COMMUTATIVE_RESULT)
1064#define COMPARISON_P(X) \
1065 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMPARE_MASK) == RTX_COMPARE_RESULT)
1069#define CONSTANT_P(X) \
1070 (GET_RTX_CLASS (GET_CODE (X)) == RTX_CONST_OBJ)
1073#define LABEL_REF_P(X) \
1074 (GET_CODE (X) == LABEL_REF)
1077#define OBJECT_P(X) \
1078 ((GET_RTX_CLASS (GET_CODE (X)) & RTX_OBJ_MASK) == RTX_OBJ_RESULT)
1082#if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
1085#define RTL_CHECK1(RTX, N, C1) __extension__ \
1086(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1087 const enum rtx_code _code = GET_CODE (_rtx); \
1088 if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \
1089 rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \
1091 if (GET_RTX_FORMAT (_code)[_n] != C1) \
1092 rtl_check_failed_type1 (_rtx, _n, C1, __FILE__, __LINE__, \
1094 &_rtx->u.fld[_n]; }))
1096#define RTL_CHECK2(RTX, N, C1, C2) __extension__ \
1097(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1098 const enum rtx_code _code = GET_CODE (_rtx); \
1099 if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \
1100 rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \
1102 if (GET_RTX_FORMAT (_code)[_n] != C1 \
1103 && GET_RTX_FORMAT (_code)[_n] != C2) \
1104 rtl_check_failed_type2 (_rtx, _n, C1, C2, __FILE__, __LINE__, \
1106 &_rtx->u.fld[_n]; }))
1108#define RTL_CHECKC1(RTX, N, C) __extension__ \
1109(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1110 if (GET_CODE (_rtx) != (C)) \
1111 rtl_check_failed_code1 (_rtx, (C), __FILE__, __LINE__, \
1113 &_rtx->u.fld[_n]; }))
1115#define RTL_CHECKC2(RTX, N, C1, C2) __extension__ \
1116(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1117 const enum rtx_code _code = GET_CODE (_rtx); \
1118 if (_code != (C1) && _code != (C2)) \
1119 rtl_check_failed_code2 (_rtx, (C1), (C2), __FILE__, __LINE__, \
1121 &_rtx->u.fld[_n]; }))
1123#define RTL_CHECKC3(RTX, N, C1, C2, C3) __extension__ \
1124(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1125 const enum rtx_code _code = GET_CODE (_rtx); \
1126 if (_code != (C1) && _code != (C2) && _code != (C3)) \
1127 rtl_check_failed_code3 (_rtx, (C1), (C2), (C3), __FILE__, \
1128 __LINE__, __FUNCTION__); \
1129 &_rtx->u.fld[_n]; }))
1131#define RTVEC_ELT(RTVEC, I) __extension__ \
1132(*({ __typeof (RTVEC) const _rtvec = (RTVEC); const int _i = (I); \
1133 if (_i < 0 || _i >= GET_NUM_ELEM (_rtvec)) \
1134 rtvec_check_failed_bounds (_rtvec, _i, __FILE__, __LINE__, \
1136 &_rtvec->elem[_i]; }))
1138#define XWINT(RTX, N) __extension__ \
1139(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N); \
1140 const enum rtx_code _code = GET_CODE (_rtx); \
1141 if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \
1142 rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \
1144 if (GET_RTX_FORMAT (_code)[_n] != 'w') \
1145 rtl_check_failed_type1 (_rtx, _n, 'w', __FILE__, __LINE__, \
1147 &_rtx->u.hwint[_n]; }))
1149#define CWI_ELT(RTX, I) __extension__ \
1150(*({ __typeof (RTX) const _cwi = (RTX); \
1151 int _max = CWI_GET_NUM_ELEM (_cwi); \
1152 const int _i = (I); \
1153 if (_i < 0 || _i >= _max) \
1154 cwi_check_failed_bounds (_cwi, _i, __FILE__, __LINE__, \
1156 &_cwi->u.hwiv.elem[_i]; }))
1158#define XCWINT(RTX, N, C) __extension__ \
1159(*({ __typeof (RTX) const _rtx = (RTX); \
1160 if (GET_CODE (_rtx) != (C)) \
1161 rtl_check_failed_code1 (_rtx, (C), __FILE__, __LINE__, \
1163 &_rtx->u.hwint[N]; }))
1165#define XCMWINT(RTX, N, C, M) __extension__ \
1166(*({ __typeof (RTX) const _rtx = (RTX); \
1167 if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) != (M)) \
1168 rtl_check_failed_code_mode (_rtx, (C), (M), false, __FILE__, \
1169 __LINE__, __FUNCTION__); \
1170 &_rtx->u.hwint[N]; }))
1172#define XCNMPRV(RTX, C, M) __extension__ \
1173({ __typeof (RTX) const _rtx = (RTX); \
1174 if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M)) \
1175 rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__, \
1176 __LINE__, __FUNCTION__); \
1179#define XCNMPFV(RTX, C, M) __extension__ \
1180({ __typeof (RTX) const _rtx = (RTX); \
1181 if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M)) \
1182 rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__, \
1183 __LINE__, __FUNCTION__); \
1186#define REG_CHECK(RTX) __extension__ \
1187({ __typeof (RTX) const _rtx = (RTX); \
1188 if (GET_CODE (_rtx) != REG) \
1189 rtl_check_failed_code1 (_rtx, REG, __FILE__, __LINE__, \
1193#define BLOCK_SYMBOL_CHECK(RTX) __extension__ \
1194({ __typeof (RTX) const _symbol = (RTX); \
1195 const unsigned int flags = SYMBOL_REF_FLAGS (_symbol); \
1196 if ((flags & SYMBOL_FLAG_HAS_BLOCK_INFO) == 0) \
1197 rtl_check_failed_block_symbol (__FILE__, __LINE__, \
1199 &_symbol->u.block_sym; })
1201#define HWIVEC_CHECK(RTX,C) __extension__ \
1202({ __typeof (RTX) const _symbol = (RTX); \
1203 RTL_CHECKC1 (_symbol, 0, C); \
1204 &_symbol->u.hwiv; })
1206extern void rtl_check_failed_bounds (
const_rtx,
int,
const char *,
int,
1209extern void rtl_check_failed_type1 (
const_rtx,
int,
int,
const char *,
int,
1212extern void rtl_check_failed_type2 (
const_rtx,
int,
int,
int,
const char *,
1219 const char *,
int,
const char *)
1226 bool,
const char *,
int,
const char *)
1228extern void rtl_check_failed_block_symbol (
const char *,
int,
const char *)
1230extern void cwi_check_failed_bounds (
const_rtx,
int,
const char *,
int,
1233extern void rtvec_check_failed_bounds (
const_rtvec,
int,
const char *,
int,
1239#define RTL_CHECK1(RTX, N, C1) ((RTX)->u.fld[N])
1240#define RTL_CHECK2(RTX, N, C1, C2) ((RTX)->u.fld[N])
1241#define RTL_CHECKC1(RTX, N, C) ((RTX)->u.fld[N])
1242#define RTL_CHECKC2(RTX, N, C1, C2) ((RTX)->u.fld[N])
1243#define RTL_CHECKC3(RTX, N, C1, C2, C3) ((RTX)->u.fld[N])
1244#define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[I])
1245#define XWINT(RTX, N) ((RTX)->u.hwint[N])
1246#define CWI_ELT(RTX, I) ((RTX)->u.hwiv.elem[I])
1247#define XCWINT(RTX, N, C) ((RTX)->u.hwint[N])
1248#define XCMWINT(RTX, N, C, M) ((RTX)->u.hwint[N])
1249#define XCNMWINT(RTX, N, C, M) ((RTX)->u.hwint[N])
1250#define XCNMPRV(RTX, C, M) (&(RTX)->u.rv)
1251#define XCNMPFV(RTX, C, M) (&(RTX)->u.fv)
1252#define REG_CHECK(RTX) (&(RTX)->u.reg)
1253#define BLOCK_SYMBOL_CHECK(RTX) (&(RTX)->u.block_sym)
1254#define HWIVEC_CHECK(RTX,C) (&(RTX)->u.hwiv)
1261#define RTX_FLAG(RTX, FLAG) ((RTX)->FLAG)
1263#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION >= 2007)
1264#define RTL_FLAG_CHECK1(NAME, RTX, C1) __extension__ \
1265({ __typeof (RTX) const _rtx = (RTX); \
1266 if (GET_CODE (_rtx) != C1) \
1267 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1271#define RTL_FLAG_CHECK2(NAME, RTX, C1, C2) __extension__ \
1272({ __typeof (RTX) const _rtx = (RTX); \
1273 if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2) \
1274 rtl_check_failed_flag (NAME,_rtx, __FILE__, __LINE__, \
1278#define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3) __extension__ \
1279({ __typeof (RTX) const _rtx = (RTX); \
1280 if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2 \
1281 && GET_CODE (_rtx) != C3) \
1282 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1286#define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4) __extension__ \
1287({ __typeof (RTX) const _rtx = (RTX); \
1288 if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2 \
1289 && GET_CODE (_rtx) != C3 && GET_CODE(_rtx) != C4) \
1290 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1294#define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5) __extension__ \
1295({ __typeof (RTX) const _rtx = (RTX); \
1296 if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2 \
1297 && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4 \
1298 && GET_CODE (_rtx) != C5) \
1299 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1303#define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6) \
1305({ __typeof (RTX) const _rtx = (RTX); \
1306 if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2 \
1307 && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4 \
1308 && GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6) \
1309 rtl_check_failed_flag (NAME,_rtx, __FILE__, __LINE__, \
1313#define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7) \
1315({ __typeof (RTX) const _rtx = (RTX); \
1316 if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2 \
1317 && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4 \
1318 && GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6 \
1319 && GET_CODE (_rtx) != C7) \
1320 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1324#define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) \
1326({ __typeof (RTX) const _rtx = (RTX); \
1327 if (!INSN_CHAIN_CODE_P (GET_CODE (_rtx))) \
1328 rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
1332extern void rtl_check_failed_flag (
const char *,
const_rtx,
const char *,
1339#define RTL_FLAG_CHECK1(NAME, RTX, C1) (RTX)
1340#define RTL_FLAG_CHECK2(NAME, RTX, C1, C2) (RTX)
1341#define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3) (RTX)
1342#define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4) (RTX)
1343#define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5) (RTX)
1344#define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6) (RTX)
1345#define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7) (RTX)
1346#define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) (RTX)
1349#define XINT(RTX, N) (RTL_CHECK2 (RTX, N, 'i', 'n').rt_int)
1350#define XUINT(RTX, N) (RTL_CHECK2 (RTX, N, 'i', 'n').rt_uint)
1351#define XLOC(RTX, N) (RTL_CHECK1 (RTX, N, 'L').rt_loc)
1352#define XSTR(RTX, N) (RTL_CHECK2 (RTX, N, 's', 'S').rt_str)
1353#define XEXP(RTX, N) (RTL_CHECK2 (RTX, N, 'e', 'u').rt_rtx)
1354#define XVEC(RTX, N) (RTL_CHECK2 (RTX, N, 'E', 'V').rt_rtvec)
1355#define XMODE(RTX, N) (RTL_CHECK1 (RTX, N, 'M').rt_type)
1356#define XTREE(RTX, N) (RTL_CHECK1 (RTX, N, 't').rt_tree)
1357#define XBBDEF(RTX, N) (RTL_CHECK1 (RTX, N, 'B').rt_bb)
1358#define XTMPL(RTX, N) (RTL_CHECK1 (RTX, N, 'T').rt_str)
1359#define XCFI(RTX, N) (RTL_CHECK1 (RTX, N, 'C').rt_cfi)
1361#define XVECEXP(RTX, N, M) RTVEC_ELT (XVEC (RTX, N), M)
1362#define XVECLEN(RTX, N) GET_NUM_ELEM (XVEC (RTX, N))
1367#define X0INT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_int)
1368#define X0UINT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_uint)
1369#define X0LOC(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_loc)
1370#define X0STR(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_str)
1371#define X0EXP(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_rtx)
1372#define X0VEC(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_rtvec)
1373#define X0MODE(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_type)
1374#define X0TREE(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_tree)
1375#define X0BBDEF(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_bb)
1376#define X0ADVFLAGS(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_addr_diff_vec_flags)
1377#define X0CSELIB(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_cselib)
1378#define X0MEMATTR(RTX, N) (RTL_CHECKC1 (RTX, N, MEM).rt_mem)
1379#define X0CONSTANT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_constant)
1382#define X0ANY(RTX, N) RTL_CHECK1 (RTX, N, '0')
1384#define XCINT(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_int)
1385#define XCUINT(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_uint)
1386#define XCLOC(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_loc)
1387#define XCSUBREG(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_subreg)
1388#define XCSTR(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_str)
1389#define XCEXP(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_rtx)
1390#define XCVEC(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_rtvec)
1391#define XCMODE(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_type)
1392#define XCTREE(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_tree)
1393#define XCBBDEF(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_bb)
1394#define XCCFI(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_cfi)
1395#define XCCSELIB(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_cselib)
1397#define XCVECEXP(RTX, N, M, C) RTVEC_ELT (XCVEC (RTX, N, C), M)
1398#define XCVECLEN(RTX, N, C) GET_NUM_ELEM (XCVEC (RTX, N, C))
1400#define XC2EXP(RTX, N, C1, C2) (RTL_CHECKC2 (RTX, N, C1, C2).rt_rtx)
1401#define XC3EXP(RTX, N, C1, C2, C3) (RTL_CHECKC3 (RTX, N, C1, C2, C3).rt_rtx)
1414 return XEXP (
this, 0);
1440 return XVECEXP (
this, 0, index);
1455 (insn))->u2.insn_uid;
1460 (insn))->u2.insn_uid;
1478 return XEXP (insn, 0);
1481inline rtx_insn *
NEXT_INSN (
const rtx_insn *insn)
1489 return XEXP (insn, 1);
1510 return XEXP (insn, 3);
1515 return XEXP (insn, 3);
1520 return XLOC (insn, 4);
1525 return XLOC (insn, 4);
1534#define RTL_LOCATION(X) (INSN_P (X) ? \
1535 INSN_LOCATION (as_a <rtx_insn *> (X)) \
1540#define INSN_CODE(INSN) XINT (INSN, 5)
1546 return XVEC (pat, 0);
1548 return XVEC (pat, 1);
1569#define RTX_FRAME_RELATED_P(RTX) \
1570 (RTL_FLAG_CHECK6 ("RTX_FRAME_RELATED_P", (RTX), DEBUG_INSN, INSN, \
1571 CALL_INSN, JUMP_INSN, BARRIER, SET)->frame_related)
1574#define CROSSING_JUMP_P(RTX) \
1575 (RTL_FLAG_CHECK1 ("CROSSING_JUMP_P", (RTX), JUMP_INSN)->jump)
1579#define RTL_CONST_CALL_P(RTX) \
1580 (RTL_FLAG_CHECK1 ("RTL_CONST_CALL_P", (RTX), CALL_INSN)->unchanging)
1584#define RTL_PURE_CALL_P(RTX) \
1585 (RTL_FLAG_CHECK1 ("RTL_PURE_CALL_P", (RTX), CALL_INSN)->return_val)
1588#define RTL_CONST_OR_PURE_CALL_P(RTX) \
1589 (RTL_CONST_CALL_P (RTX) || RTL_PURE_CALL_P (RTX))
1593#define RTL_LOOPING_CONST_OR_PURE_CALL_P(RTX) \
1594 (RTL_FLAG_CHECK1 ("CONST_OR_PURE_CALL_P", (RTX), CALL_INSN)->call)
1597#define SIBLING_CALL_P(RTX) \
1598 (RTL_FLAG_CHECK1 ("SIBLING_CALL_P", (RTX), CALL_INSN)->jump)
1601#define INSN_ANNULLED_BRANCH_P(RTX) \
1602 (RTL_FLAG_CHECK1 ("INSN_ANNULLED_BRANCH_P", (RTX), JUMP_INSN)->unchanging)
1608#define INSN_FROM_TARGET_P(RTX) \
1609 (RTL_FLAG_CHECK3 ("INSN_FROM_TARGET_P", (RTX), INSN, JUMP_INSN, \
1610 CALL_INSN)->in_struct)
1614#define ADDR_DIFF_VEC_FLAGS(RTX) X0ADVFLAGS (RTX, 4)
1618#define CSELIB_VAL_PTR(RTX) X0CSELIB (RTX, 0)
1625#define REG_NOTES(INSN) XEXP(INSN, 6)
1629#define ENTRY_VALUE_EXP(RTX) (RTL_CHECKC1 (RTX, 0, ENTRY_VALUE).rt_rtx)
1633#define DEF_REG_NOTE(NAME) NAME,
1634#include "reg-notes.def"
1640#define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK))
1641#define PUT_REG_NOTE_KIND(LINK, KIND) \
1642 PUT_MODE_RAW (LINK, (machine_mode) (KIND))
1647#define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int) (MODE)])
1662#define CALL_INSN_FUNCTION_USAGE(INSN) XEXP(INSN, 7)
1667#define CODE_LABEL_NUMBER(INSN) XINT (INSN, 5)
1676#define NOTE_DATA(INSN) RTL_CHECKC1 (INSN, 3, NOTE)
1677#define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 3, NOTE)
1678#define SET_INSN_DELETED(INSN) set_insn_deleted (INSN);
1679#define NOTE_BLOCK(INSN) XCTREE (INSN, 3, NOTE)
1680#define NOTE_EH_HANDLER(INSN) XCINT (INSN, 3, NOTE)
1681#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 3, NOTE)
1682#define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 3, NOTE)
1683#define NOTE_MARKER_LOCATION(INSN) XCLOC (INSN, 3, NOTE)
1684#define NOTE_CFI(INSN) XCCFI (INSN, 3, NOTE)
1685#define NOTE_LABEL_NUMBER(INSN) XCINT (INSN, 3, NOTE)
1689#define NOTE_KIND(INSN) XCINT (INSN, 4, NOTE)
1692#define NOTE_INSN_BASIC_BLOCK_P(INSN) \
1693 (NOTE_P (INSN) && NOTE_KIND (INSN) == NOTE_INSN_BASIC_BLOCK)
1697#define NOTE_MARKER_P(INSN) \
1699 (NOTE_KIND (INSN) == NOTE_INSN_BEGIN_STMT \
1700 || NOTE_KIND (INSN) == NOTE_INSN_INLINE_ENTRY))
1703#define PAT_VAR_LOCATION_DECL(PAT) (XCTREE ((PAT), 0, VAR_LOCATION))
1704#define PAT_VAR_LOCATION_LOC(PAT) (XCEXP ((PAT), 1, VAR_LOCATION))
1709#define PAT_VAR_LOCATION_STATUS(PAT) \
1710 (RTL_FLAG_CHECK1 ("PAT_VAR_LOCATION_STATUS", PAT, VAR_LOCATION) \
1711 ->u2.var_location_status)
1714#define NOTE_VAR_LOCATION_DECL(NOTE) \
1715 PAT_VAR_LOCATION_DECL (NOTE_VAR_LOCATION (NOTE))
1716#define NOTE_VAR_LOCATION_LOC(NOTE) \
1717 PAT_VAR_LOCATION_LOC (NOTE_VAR_LOCATION (NOTE))
1718#define NOTE_VAR_LOCATION_STATUS(NOTE) \
1719 PAT_VAR_LOCATION_STATUS (NOTE_VAR_LOCATION (NOTE))
1723#define DEBUG_BIND_INSN_P(INSN) \
1724 (DEBUG_INSN_P (INSN) \
1725 && (GET_CODE (PATTERN (INSN)) \
1729#define DEBUG_MARKER_INSN_P(INSN) \
1730 (DEBUG_INSN_P (INSN) \
1731 && (GET_CODE (PATTERN (INSN)) \
1734#define INSN_DEBUG_MARKER_KIND(INSN) \
1735 (GET_CODE (PATTERN (INSN)) == DEBUG_MARKER \
1736 ? (GET_MODE (PATTERN (INSN)) == VOIDmode \
1737 ? NOTE_INSN_BEGIN_STMT \
1738 : GET_MODE (PATTERN (INSN)) == BLKmode \
1739 ? NOTE_INSN_INLINE_ENTRY \
1740 : (enum insn_note)-1) \
1741 : (enum insn_note)-1)
1747#define GEN_RTX_DEBUG_MARKER_BEGIN_STMT_PAT() \
1748 gen_rtx_DEBUG_MARKER (VOIDmode)
1749#define GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT() \
1750 gen_rtx_DEBUG_MARKER (BLKmode)
1753#define INSN_VAR_LOCATION(INSN) \
1754 (RTL_FLAG_CHECK1 ("INSN_VAR_LOCATION", PATTERN (INSN), VAR_LOCATION))
1756#define INSN_VAR_LOCATION_PTR(INSN) \
1760#define INSN_VAR_LOCATION_DECL(INSN) \
1761 PAT_VAR_LOCATION_DECL (INSN_VAR_LOCATION (INSN))
1762#define INSN_VAR_LOCATION_LOC(INSN) \
1763 PAT_VAR_LOCATION_LOC (INSN_VAR_LOCATION (INSN))
1764#define INSN_VAR_LOCATION_STATUS(INSN) \
1765 PAT_VAR_LOCATION_STATUS (INSN_VAR_LOCATION (INSN))
1769#define gen_rtx_UNKNOWN_VAR_LOC() (gen_rtx_CLOBBER (VOIDmode, const0_rtx))
1772#define VAR_LOC_UNKNOWN_P(X) \
1773 (GET_CODE (X) == CLOBBER && XEXP ((X), 0) == const0_rtx)
1777#define NOTE_DURING_CALL_P(RTX) \
1778 (RTL_FLAG_CHECK1 ("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call)
1781#define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR)
1784#define DEBUG_IMPLICIT_PTR_DECL(RTX) XCTREE (RTX, 0, DEBUG_IMPLICIT_PTR)
1787#define DEBUG_PARAMETER_REF_DECL(RTX) XCTREE (RTX, 0, DEBUG_PARAMETER_REF)
1800#define DEF_INSN_NOTE(NAME) NAME,
1801#include "insn-notes.def"
1810#define GET_NOTE_INSN_NAME(NOTE_CODE) \
1811 (note_insn_name[(NOTE_CODE)])
1815#define LABEL_NAME(RTX) XCSTR (RTX, 6, CODE_LABEL)
1819#define LABEL_NUSES(RTX) XCINT (RTX, 4, CODE_LABEL)
1832#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION > 2007)
1835#define LABEL_KIND(LABEL) __extension__ \
1836({ __typeof (LABEL) const _label = (LABEL); \
1837 if (! LABEL_P (_label)) \
1838 rtl_check_failed_flag ("LABEL_KIND", _label, __FILE__, __LINE__, \
1840 (enum label_kind) ((_label->jump << 1) | _label->call); })
1843#define SET_LABEL_KIND(LABEL, KIND) do { \
1844 __typeof (LABEL) const _label = (LABEL); \
1845 const unsigned int _kind = (KIND); \
1846 if (! LABEL_P (_label)) \
1847 rtl_check_failed_flag ("SET_LABEL_KIND", _label, __FILE__, __LINE__, \
1849 _label->jump = ((_kind >> 1) & 1); \
1850 _label->call = (_kind & 1); \
1856#define LABEL_KIND(LABEL) \
1857 ((enum label_kind) (((LABEL)->jump << 1) | (LABEL)->call))
1860#define SET_LABEL_KIND(LABEL, KIND) do { \
1861 rtx const _label = (LABEL); \
1862 const unsigned int _kind = (KIND); \
1863 _label->jump = ((_kind >> 1) & 1); \
1864 _label->call = (_kind & 1); \
1869#define LABEL_ALT_ENTRY_P(LABEL) (LABEL_KIND (LABEL) != LABEL_NORMAL)
1874#define JUMP_LABEL(INSN) XCEXP (INSN, 7, JUMP_INSN)
1901#define LABEL_REFS(LABEL) XCEXP (LABEL, 3, CODE_LABEL)
1915 XCEXP (ref, 0, LABEL_REF) = label;
1920#define REGNO(RTX) (rhs_regno(RTX))
1921#define SET_REGNO(RTX, N) (df_ref_change_reg_with_loc (RTX, N))
1926#define REG_NREGS(RTX) (REG_CHECK (RTX)->nregs)
1931#define ORIGINAL_REGNO(RTX) \
1932 (RTL_FLAG_CHECK1 ("ORIGINAL_REGNO", (RTX), REG)->u2.original_regno)
1960#define REG_FUNCTION_VALUE_P(RTX) \
1961 (RTL_FLAG_CHECK2 ("REG_FUNCTION_VALUE_P", (RTX), REG, PARALLEL)->return_val)
1964#define REG_USERVAR_P(RTX) \
1965 (RTL_FLAG_CHECK1 ("REG_USERVAR_P", (RTX), REG)->volatil)
1968#define REG_POINTER(RTX) \
1969 (RTL_FLAG_CHECK1 ("REG_POINTER", (RTX), REG)->frame_related)
1972#define MEM_POINTER(RTX) \
1973 (RTL_FLAG_CHECK1 ("MEM_POINTER", (RTX), MEM)->frame_related)
1976#define HARD_REGISTER_P(REG) HARD_REGISTER_NUM_P (REGNO (REG))
1979#define HARD_REGISTER_NUM_P(REG_NO) ((REG_NO) < FIRST_PSEUDO_REGISTER)
1982#define VIRTUAL_REGISTER_P(REG) VIRTUAL_REGISTER_NUM_P (REGNO (REG))
1985#define VIRTUAL_REGISTER_NUM_P(REG_NO) \
1986 IN_RANGE (REG_NO, FIRST_VIRTUAL_REGISTER, LAST_VIRTUAL_REGISTER)
1989#define INTVAL(RTX) XCWINT (RTX, 0, CONST_INT)
1990#define UINTVAL(RTX) ((unsigned HOST_WIDE_INT) INTVAL (RTX))
1996#define CONST_WIDE_INT_VEC(RTX) HWIVEC_CHECK (RTX, CONST_WIDE_INT)
1997#define CONST_WIDE_INT_NUNITS(RTX) CWI_GET_NUM_ELEM (RTX)
1998#define CONST_WIDE_INT_ELT(RTX, N) CWI_ELT (RTX, N)
2002#define CONST_POLY_INT_COEFFS(RTX) \
2003 (RTL_FLAG_CHECK1("CONST_POLY_INT_COEFFS", (RTX), \
2004 CONST_POLY_INT)->u.cpi.coeffs)
2013#define CONST_DOUBLE_LOW(r) XCMWINT (r, 0, CONST_DOUBLE, VOIDmode)
2014#define CONST_DOUBLE_HIGH(r) XCMWINT (r, 1, CONST_DOUBLE, VOIDmode)
2015#define CONST_DOUBLE_REAL_VALUE(r) \
2016 ((const struct real_value *) XCNMPRV (r, CONST_DOUBLE, VOIDmode))
2018#define CONST_FIXED_VALUE(r) \
2019 ((const struct fixed_value *) XCNMPFV (r, CONST_FIXED, VOIDmode))
2020#define CONST_FIXED_VALUE_HIGH(r) \
2021 ((HOST_WIDE_INT) (CONST_FIXED_VALUE (r)->data.high))
2022#define CONST_FIXED_VALUE_LOW(r) \
2023 ((HOST_WIDE_INT) (CONST_FIXED_VALUE (r)->data.low))
2026#define CONST_VECTOR_ELT(RTX, N) const_vector_elt (RTX, N)
2029#define CONST_VECTOR_NPATTERNS(RTX) \
2030 (RTL_FLAG_CHECK1 ("CONST_VECTOR_NPATTERNS", (RTX), CONST_VECTOR) \
2031 ->u2.const_vector.npatterns)
2033#define CONST_VECTOR_NELTS_PER_PATTERN(RTX) \
2034 (RTL_FLAG_CHECK1 ("CONST_VECTOR_NELTS_PER_PATTERN", (RTX), CONST_VECTOR) \
2035 ->u2.const_vector.nelts_per_pattern)
2037#define CONST_VECTOR_DUPLICATE_P(RTX) \
2038 (CONST_VECTOR_NELTS_PER_PATTERN (RTX) == 1)
2040#define CONST_VECTOR_STEPPED_P(RTX) \
2041 (CONST_VECTOR_NELTS_PER_PATTERN (RTX) == 3)
2043#define CONST_VECTOR_ENCODED_ELT(RTX, N) XCVECEXP (RTX, 0, N, CONST_VECTOR)
2054#define CONST_VECTOR_NUNITS(RTX) GET_MODE_NUNITS (GET_MODE (RTX))
2059#define SUBREG_REG(RTX) XCEXP (RTX, 0, SUBREG)
2060#define SUBREG_BYTE(RTX) XCSUBREG (RTX, 1, SUBREG)
2066#define COSTS_N_INSNS(N) ((N) * 4)
2070#define MAX_COST INT_MAX
2111 return (
a->speed <
b->speed
2112 || (
a->speed ==
b->speed &&
a->size <
b->size));
2114 return (
a->size <
b->size
2115 || (
a->size ==
b->size &&
a->speed <
b->speed));
2147 machine_mode outer_mode_in)
2170inline unsigned HOST_WIDE_INT
2178 res += (HOST_WIDE_INT)
offset.coeffs[
i] << ((1 +
i) * 16);
2275typedef std::pair <rtx, machine_mode>
rtx_mode_t;
2314 || (x.second == BImode &&
INTVAL (x.first) == 1));
2318 case CONST_WIDE_INT:
2322#if TARGET_SUPPORTS_WIDE_INT == 0
2340wi::shwi (HOST_WIDE_INT val, machine_mode mode)
2364 generic_wide_int <wide_int_ref_storage <false, false> > >
2445 unsigned int,
unsigned int);
2449 unsigned int,
unsigned int,
unsigned int);
2461subreg_lsb_1 (machine_mode outer_mode, machine_mode inner_mode,
2476 machine_mode inner_mode,
2517#define SUBREG_PROMOTED_VAR_P(RTX) \
2518 (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED", (RTX), SUBREG)->in_struct)
2537#define SUBREG_PROMOTED_SET(RTX, VAL) \
2539 rtx const _rtx = RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SET", \
2544 _rtx->volatil = 0; \
2545 _rtx->unchanging = 0; \
2548 _rtx->volatil = 0; \
2549 _rtx->unchanging = 1; \
2551 case SRP_UNSIGNED: \
2552 _rtx->volatil = 1; \
2553 _rtx->unchanging = 0; \
2555 case SRP_SIGNED_AND_UNSIGNED: \
2556 _rtx->volatil = 1; \
2557 _rtx->unchanging = 1; \
2565#define SUBREG_PROMOTED_GET(RTX) \
2566 (2 * (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_GET", (RTX), SUBREG)->volatil)\
2567 + (RTX)->unchanging - 1)
2570#define SUBREG_PROMOTED_SIGN(RTX) \
2571 ((RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SIGN", (RTX), SUBREG)->volatil) ? 1\
2572 : (RTX)->unchanging - 1)
2576#define SUBREG_PROMOTED_SIGNED_P(RTX) \
2577 (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SIGNED_P", (RTX), SUBREG)->unchanging)
2581#define SUBREG_PROMOTED_UNSIGNED_P(RTX) \
2582 (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_UNSIGNED_P", (RTX), SUBREG)->volatil)
2585#define SUBREG_CHECK_PROMOTED_SIGN(RTX, SIGN) \
2586((SIGN) == SRP_POINTER ? SUBREG_PROMOTED_GET (RTX) == SRP_POINTER \
2587 : (SIGN) == SRP_SIGNED ? SUBREG_PROMOTED_SIGNED_P (RTX) \
2588 : SUBREG_PROMOTED_UNSIGNED_P (RTX))
2591#define STATIC_CHAIN_REG_P(RTX) \
2592 (RTL_FLAG_CHECK1 ("STATIC_CHAIN_REG_P", (RTX), REG)->jump)
2596#define LRA_SUBREG_P(RTX) \
2597 (RTL_FLAG_CHECK1 ("LRA_SUBREG_P", (RTX), SUBREG)->jump)
2601#define ASM_OPERANDS_TEMPLATE(RTX) XCSTR (RTX, 0, ASM_OPERANDS)
2602#define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XCSTR (RTX, 1, ASM_OPERANDS)
2603#define ASM_OPERANDS_OUTPUT_IDX(RTX) XCINT (RTX, 2, ASM_OPERANDS)
2604#define ASM_OPERANDS_INPUT_VEC(RTX) XCVEC (RTX, 3, ASM_OPERANDS)
2605#define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XCVEC (RTX, 4, ASM_OPERANDS)
2606#define ASM_OPERANDS_INPUT(RTX, N) XCVECEXP (RTX, 3, N, ASM_OPERANDS)
2607#define ASM_OPERANDS_INPUT_LENGTH(RTX) XCVECLEN (RTX, 3, ASM_OPERANDS)
2608#define ASM_OPERANDS_INPUT_CONSTRAINT_EXP(RTX, N) \
2609 XCVECEXP (RTX, 4, N, ASM_OPERANDS)
2610#define ASM_OPERANDS_INPUT_CONSTRAINT(RTX, N) \
2611 XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0)
2612#define ASM_OPERANDS_INPUT_MODE(RTX, N) \
2613 GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS))
2614#define ASM_OPERANDS_LABEL_VEC(RTX) XCVEC (RTX, 5, ASM_OPERANDS)
2615#define ASM_OPERANDS_LABEL_LENGTH(RTX) XCVECLEN (RTX, 5, ASM_OPERANDS)
2616#define ASM_OPERANDS_LABEL(RTX, N) XCVECEXP (RTX, 5, N, ASM_OPERANDS)
2617#define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCLOC (RTX, 6, ASM_OPERANDS)
2618#define ASM_INPUT_SOURCE_LOCATION(RTX) XCLOC (RTX, 1, ASM_INPUT)
2621#define MEM_READONLY_P(RTX) \
2622 (RTL_FLAG_CHECK1 ("MEM_READONLY_P", (RTX), MEM)->unchanging)
2627#define MEM_KEEP_ALIAS_SET_P(RTX) \
2628 (RTL_FLAG_CHECK1 ("MEM_KEEP_ALIAS_SET_P", (RTX), MEM)->jump)
2631#define MEM_VOLATILE_P(RTX) \
2632 (RTL_FLAG_CHECK3 ("MEM_VOLATILE_P", (RTX), MEM, ASM_OPERANDS, \
2633 ASM_INPUT)->volatil)
2636#define MEM_NOTRAP_P(RTX) \
2637 (RTL_FLAG_CHECK1 ("MEM_NOTRAP_P", (RTX), MEM)->call)
2641#define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1)
2645#define REG_ATTRS(RTX) (REG_CHECK (RTX)->attrs)
2647#ifndef GENERATOR_FILE
2654#define MEM_ALIAS_SET(RTX) (get_mem_attrs (RTX)->alias)
2658#define MEM_EXPR(RTX) (get_mem_attrs (RTX)->expr)
2661#define MEM_OFFSET_KNOWN_P(RTX) (get_mem_attrs (RTX)->offset_known_p)
2664#define MEM_OFFSET(RTX) (get_mem_attrs (RTX)->offset)
2667#define MEM_ADDR_SPACE(RTX) (get_mem_attrs (RTX)->addrspace)
2670#define MEM_SIZE_KNOWN_P(RTX) (get_mem_attrs (RTX)->size_known_p)
2673#define MEM_SIZE(RTX) (get_mem_attrs (RTX)->size)
2677#define MEM_ALIGN(RTX) (get_mem_attrs (RTX)->align)
2679#define MEM_ADDR_SPACE(RTX) ADDR_SPACE_GENERIC
2684#define REG_EXPR(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->decl)
2688#define REG_OFFSET(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->offset)
2691#define MEM_COPY_ATTRIBUTES(LHS, RHS) \
2692 (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \
2693 MEM_NOTRAP_P (LHS) = MEM_NOTRAP_P (RHS), \
2694 MEM_READONLY_P (LHS) = MEM_READONLY_P (RHS), \
2695 MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS), \
2696 MEM_POINTER (LHS) = MEM_POINTER (RHS), \
2697 MEM_ATTRS (LHS) = MEM_ATTRS (RHS))
2702#define LABEL_REF_NONLOCAL_P(RTX) \
2703 (RTL_FLAG_CHECK1 ("LABEL_REF_NONLOCAL_P", (RTX), LABEL_REF)->volatil)
2706#define LABEL_PRESERVE_P(RTX) \
2707 (RTL_FLAG_CHECK2 ("LABEL_PRESERVE_P", (RTX), CODE_LABEL, NOTE)->in_struct)
2711#define SCHED_GROUP_P(RTX) \
2712 (RTL_FLAG_CHECK4 ("SCHED_GROUP_P", (RTX), DEBUG_INSN, INSN, \
2713 JUMP_INSN, CALL_INSN)->in_struct)
2717#define SET_DEST(RTX) XC2EXP (RTX, 0, SET, CLOBBER)
2718#define SET_SRC(RTX) XCEXP (RTX, 1, SET)
2719#define SET_IS_RETURN_P(RTX) \
2720 (RTL_FLAG_CHECK1 ("SET_IS_RETURN_P", (RTX), SET)->jump)
2723#define TRAP_CONDITION(RTX) XCEXP (RTX, 0, TRAP_IF)
2724#define TRAP_CODE(RTX) XCEXP (RTX, 1, TRAP_IF)
2729#define COND_EXEC_TEST(RTX) XCEXP (RTX, 0, COND_EXEC)
2730#define COND_EXEC_CODE(RTX) XCEXP (RTX, 1, COND_EXEC)
2734#define CONSTANT_POOL_ADDRESS_P(RTX) \
2735 (RTL_FLAG_CHECK1 ("CONSTANT_POOL_ADDRESS_P", (RTX), SYMBOL_REF)->unchanging)
2739#define TREE_CONSTANT_POOL_ADDRESS_P(RTX) \
2740 (RTL_FLAG_CHECK1 ("TREE_CONSTANT_POOL_ADDRESS_P", \
2741 (RTX), SYMBOL_REF)->frame_related)
2744#define SYMBOL_REF_FLAG(RTX) \
2745 (RTL_FLAG_CHECK1 ("SYMBOL_REF_FLAG", (RTX), SYMBOL_REF)->volatil)
2749#define SYMBOL_REF_USED(RTX) \
2750 (RTL_FLAG_CHECK1 ("SYMBOL_REF_USED", (RTX), SYMBOL_REF)->used)
2753#define SYMBOL_REF_WEAK(RTX) \
2754 (RTL_FLAG_CHECK1 ("SYMBOL_REF_WEAK", (RTX), SYMBOL_REF)->return_val)
2758#define SYMBOL_REF_DATA(RTX) X0ANY ((RTX), 1)
2762#define SET_SYMBOL_REF_DECL(RTX, DECL) \
2763 (gcc_assert (!CONSTANT_POOL_ADDRESS_P (RTX)), X0TREE ((RTX), 1) = (DECL))
2766#define SYMBOL_REF_DECL(RTX) \
2767 (CONSTANT_POOL_ADDRESS_P (RTX) ? NULL : X0TREE ((RTX), 1))
2770#define SET_SYMBOL_REF_CONSTANT(RTX, C) \
2771 (gcc_assert (CONSTANT_POOL_ADDRESS_P (RTX)), X0CONSTANT ((RTX), 1) = (C))
2774#define SYMBOL_REF_CONSTANT(RTX) \
2775 (CONSTANT_POOL_ADDRESS_P (RTX) ? X0CONSTANT ((RTX), 1) : NULL)
2784#define SYMBOL_REF_FLAGS(RTX) \
2785 (RTL_FLAG_CHECK1 ("SYMBOL_REF_FLAGS", (RTX), SYMBOL_REF) \
2786 ->u2.symbol_ref_flags)
2792#define SYMBOL_FLAG_FUNCTION (1 << 0)
2793#define SYMBOL_REF_FUNCTION_P(RTX) \
2794 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_FUNCTION) != 0)
2796#define SYMBOL_FLAG_LOCAL (1 << 1)
2797#define SYMBOL_REF_LOCAL_P(RTX) \
2798 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_LOCAL) != 0)
2800#define SYMBOL_FLAG_SMALL (1 << 2)
2801#define SYMBOL_REF_SMALL_P(RTX) \
2802 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_SMALL) != 0)
2805#define SYMBOL_FLAG_TLS_SHIFT 3
2806#define SYMBOL_REF_TLS_MODEL(RTX) \
2807 ((enum tls_model) ((SYMBOL_REF_FLAGS (RTX) >> SYMBOL_FLAG_TLS_SHIFT) & 7))
2809#define SYMBOL_FLAG_EXTERNAL (1 << 6)
2810#define SYMBOL_REF_EXTERNAL_P(RTX) \
2811 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_EXTERNAL) != 0)
2813#define SYMBOL_FLAG_HAS_BLOCK_INFO (1 << 7)
2814#define SYMBOL_REF_HAS_BLOCK_INFO_P(RTX) \
2815 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_HAS_BLOCK_INFO) != 0)
2818#define SYMBOL_FLAG_ANCHOR (1 << 8)
2819#define SYMBOL_REF_ANCHOR_P(RTX) \
2820 ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_ANCHOR) != 0)
2823#define SYMBOL_FLAG_MACH_DEP_SHIFT 9
2824#define SYMBOL_FLAG_MACH_DEP (1 << SYMBOL_FLAG_MACH_DEP_SHIFT)
2829#define SYMBOL_REF_BLOCK(RTX) (BLOCK_SYMBOL_CHECK (RTX)->block)
2835#define SYMBOL_REF_BLOCK_OFFSET(RTX) (BLOCK_SYMBOL_CHECK (RTX)->offset)
2838#define PREFETCH_SCHEDULE_BARRIER_P(RTX) \
2839 (RTL_FLAG_CHECK1 ("PREFETCH_SCHEDULE_BARRIER_P", (RTX), PREFETCH)->volatil)
2844#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) \
2845 || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) \
2846 || defined (HAVE_PRE_MODIFY_DISP) || defined (HAVE_POST_MODIFY_DISP) \
2847 || defined (HAVE_PRE_MODIFY_REG) || defined (HAVE_POST_MODIFY_REG))
2848#define AUTO_INC_DEC 1
2850#define AUTO_INC_DEC 0
2857#define FIND_REG_INC_NOTE(INSN, REG) \
2858 ((REG) != NULL_RTX && REG_P ((REG)) \
2859 ? find_regno_note ((INSN), REG_INC, REGNO (REG)) \
2860 : find_reg_note ((INSN), REG_INC, (REG)))
2862#define FIND_REG_INC_NOTE(INSN, REG) 0
2865#ifndef HAVE_PRE_INCREMENT
2866#define HAVE_PRE_INCREMENT 0
2869#ifndef HAVE_PRE_DECREMENT
2870#define HAVE_PRE_DECREMENT 0
2873#ifndef HAVE_POST_INCREMENT
2874#define HAVE_POST_INCREMENT 0
2877#ifndef HAVE_POST_DECREMENT
2878#define HAVE_POST_DECREMENT 0
2881#ifndef HAVE_POST_MODIFY_DISP
2882#define HAVE_POST_MODIFY_DISP 0
2885#ifndef HAVE_POST_MODIFY_REG
2886#define HAVE_POST_MODIFY_REG 0
2889#ifndef HAVE_PRE_MODIFY_DISP
2890#define HAVE_PRE_MODIFY_DISP 0
2893#ifndef HAVE_PRE_MODIFY_REG
2894#define HAVE_PRE_MODIFY_REG 0
2902#ifndef USE_LOAD_POST_INCREMENT
2903#define USE_LOAD_POST_INCREMENT(MODE) HAVE_POST_INCREMENT
2906#ifndef USE_LOAD_POST_DECREMENT
2907#define USE_LOAD_POST_DECREMENT(MODE) HAVE_POST_DECREMENT
2910#ifndef USE_LOAD_PRE_INCREMENT
2911#define USE_LOAD_PRE_INCREMENT(MODE) HAVE_PRE_INCREMENT
2914#ifndef USE_LOAD_PRE_DECREMENT
2915#define USE_LOAD_PRE_DECREMENT(MODE) HAVE_PRE_DECREMENT
2918#ifndef USE_STORE_POST_INCREMENT
2919#define USE_STORE_POST_INCREMENT(MODE) HAVE_POST_INCREMENT
2922#ifndef USE_STORE_POST_DECREMENT
2923#define USE_STORE_POST_DECREMENT(MODE) HAVE_POST_DECREMENT
2926#ifndef USE_STORE_PRE_INCREMENT
2927#define USE_STORE_PRE_INCREMENT(MODE) HAVE_PRE_INCREMENT
2930#ifndef USE_STORE_PRE_DECREMENT
2931#define USE_STORE_PRE_DECREMENT(MODE) HAVE_PRE_DECREMENT
2942#ifndef GENERATOR_FILE
2949 return rtx_cost (x, VOIDmode, INSN, 4, speed_p);
2984#define EXTRACT_ARGS_IN_RANGE(SIZE, POS, RANGE) \
2985 (IN_RANGE ((POS), 0, (unsigned HOST_WIDE_INT) (RANGE) - 1) \
2986 && IN_RANGE ((SIZE), 1, (unsigned HOST_WIDE_INT) (RANGE) \
2987 - (unsigned HOST_WIDE_INT)(POS)))
3004#define rtx_alloca(code) \
3005 rtx_init ((rtx) alloca (RTX_CODE_SIZE ((code))), (code))
3007#define rtx_alloc_v(c, SZ) rtx_alloc_stat_v (c MEM_STAT_INFO, SZ)
3008#define const_wide_int_alloc(NWORDS) \
3009 rtx_alloc_v (CONST_WIDE_INT, \
3010 (sizeof (struct hwivec_def) \
3011 + ((NWORDS)-1) * sizeof (HOST_WIDE_INT))) \
3040 return (
GET_CODE (x) == CONST_VECTOR
3048template <
typename T>
3063template <
typename T>
3079template <
typename T>
3123 *base_out =
XEXP (x, 0);
3124 *step_out =
XEXP (x, 1);
3202 return maybe_lt (outer_prec, inner_prec);
3228 return maybe_gt (outer_prec, inner_prec);
3298#define convert_memory_address(to_mode,x) \
3299 convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC)
3308#if TARGET_SUPPORTS_WIDE_INT == 0
3312#if TARGET_SUPPORTS_WIDE_INT == 0
3499 machine_mode op_mode)
3513 machine_mode op0_mode,
rtx op0,
rtx op1,
rtx op2)
3521 machine_mode op_mode,
rtx op0,
rtx op1)
3536 machine_mode op_mode)
3557 machine_mode op_mode,
rtx op0,
rtx op1)
3596extern bool val_signbit_p (machine_mode,
unsigned HOST_WIDE_INT);
3598 unsigned HOST_WIDE_INT);
3600 unsigned HOST_WIDE_INT);
3733 rtx srcoff,
void *arg);
3806 machine_mode *, location_t *);
3818#define MAX_SAVED_CONST_INT 64
3821#define const0_rtx (const_int_rtx[MAX_SAVED_CONST_INT])
3822#define const1_rtx (const_int_rtx[MAX_SAVED_CONST_INT+1])
3823#define const2_rtx (const_int_rtx[MAX_SAVED_CONST_INT+2])
3824#define constm1_rtx (const_int_rtx[MAX_SAVED_CONST_INT-1])
3832#define CONST0_RTX(MODE) (const_tiny_rtx[0][(int) (MODE)])
3836#define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
3837#define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
3838#define CONSTM1_RTX(MODE) (const_tiny_rtx[3][(int) (MODE)])
3851#ifndef HARD_FRAME_POINTER_REGNUM
3852#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM
3855#ifndef HARD_FRAME_POINTER_IS_FRAME_POINTER
3856#define HARD_FRAME_POINTER_IS_FRAME_POINTER \
3857 (HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM)
3860#ifndef HARD_FRAME_POINTER_IS_ARG_POINTER
3861#define HARD_FRAME_POINTER_IS_ARG_POINTER \
3862 (HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM)
3873#if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM
3876#if HARD_FRAME_POINTER_IS_FRAME_POINTER
3881#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
3882#if HARD_FRAME_POINTER_IS_ARG_POINTER
3946#if SWITCHABLE_TARGET
3949#define this_target_rtl (&default_target_rtl)
3953 (this_target_rtl->x_global_rtl)
3954#define pic_offset_table_rtx \
3955 (this_target_rtl->x_pic_offset_table_rtx)
3956#define return_address_pointer_rtx \
3957 (this_target_rtl->x_return_address_pointer_rtx)
3958#define top_of_stack \
3959 (this_target_rtl->x_top_of_stack)
3960#define mode_mem_attrs \
3961 (this_target_rtl->x_mode_mem_attrs)
3966#define stack_pointer_rtx (global_rtl[GR_STACK_POINTER])
3967#define frame_pointer_rtx (global_rtl[GR_FRAME_POINTER])
3968#define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER])
3969#define arg_pointer_rtx (global_rtl[GR_ARG_POINTER])
3971#ifndef GENERATOR_FILE
3987#ifndef GENERATOR_FILE
3989#undef gen_rtx_ASM_INPUT
3990#define gen_rtx_ASM_INPUT(MODE, ARG0) \
3991 gen_rtx_fmt_sL (ASM_INPUT, (MODE), (ARG0), 0)
3992#define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC) \
3993 gen_rtx_fmt_sL (ASM_INPUT, (MODE), (ARG0), (LOC))
4011#define alloca_raw_REG(mode, regno) \
4012 init_raw_REG (rtx_alloca (REG), (mode), (regno))
4019#ifdef GENERATOR_FILE
4020#define PUT_MODE(RTX, MODE) PUT_MODE_RAW (RTX, MODE)
4032#define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (N))
4040#define FIRST_VIRTUAL_REGISTER (FIRST_PSEUDO_REGISTER)
4046#define virtual_incoming_args_rtx (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
4048#define VIRTUAL_INCOMING_ARGS_REGNUM (FIRST_VIRTUAL_REGISTER)
4054#define virtual_stack_vars_rtx (global_rtl[GR_VIRTUAL_STACK_ARGS])
4056#define VIRTUAL_STACK_VARS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 1)
4062#define virtual_stack_dynamic_rtx (global_rtl[GR_VIRTUAL_STACK_DYNAMIC])
4064#define VIRTUAL_STACK_DYNAMIC_REGNUM ((FIRST_VIRTUAL_REGISTER) + 2)
4070#define virtual_outgoing_args_rtx (global_rtl[GR_VIRTUAL_OUTGOING_ARGS])
4072#define VIRTUAL_OUTGOING_ARGS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 3)
4080#define virtual_cfa_rtx (global_rtl[GR_VIRTUAL_CFA])
4082#define VIRTUAL_CFA_REGNUM ((FIRST_VIRTUAL_REGISTER) + 4)
4084#define LAST_VIRTUAL_POINTER_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4)
4089#define virtual_preferred_stack_boundary_rtx \
4090 (global_rtl[GR_VIRTUAL_PREFERRED_STACK_BOUNDARY])
4092#define VIRTUAL_PREFERRED_STACK_BOUNDARY_REGNUM \
4093 ((FIRST_VIRTUAL_REGISTER) + 5)
4095#define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 5)
4098#define REGNO_PTR_FRAME_P(REGNUM) \
4099 ((REGNUM) == STACK_POINTER_REGNUM \
4100 || (REGNUM) == FRAME_POINTER_REGNUM \
4101 || (REGNUM) == HARD_FRAME_POINTER_REGNUM \
4102 || (REGNUM) == ARG_POINTER_REGNUM \
4103 || VIRTUAL_REGISTER_NUM_P (REGNUM))
4106#define INVALID_REGNUM (~(unsigned int) 0)
4109#define IGNORED_DWARF_REGNUM (INVALID_REGNUM - 1)
4136#define can_create_pseudo_p() (!reload_in_progress && !reload_completed)
4141extern int regstack_completed;
4361 rtx arg1, machine_mode arg1_mode)
4369 rtx arg1, machine_mode arg1_mode,
4370 rtx arg2, machine_mode arg2_mode)
4381 rtx arg1, machine_mode arg1_mode,
4382 rtx arg2, machine_mode arg2_mode,
4383 rtx arg3, machine_mode arg3_mode)
4395 rtx arg1, machine_mode arg1_mode,
4396 rtx arg2, machine_mode arg2_mode,
4397 rtx arg3, machine_mode arg3_mode,
4398 rtx arg4, machine_mode arg4_mode)
4415 machine_mode outmode)
4422 machine_mode outmode,
4423 rtx arg1, machine_mode arg1_mode)
4431 machine_mode outmode,
4432 rtx arg1, machine_mode arg1_mode,
4433 rtx arg2, machine_mode arg2_mode)
4444 machine_mode outmode,
4445 rtx arg1, machine_mode arg1_mode,
4446 rtx arg2, machine_mode arg2_mode,
4447 rtx arg3, machine_mode arg3_mode)
4459 machine_mode outmode,
4460 rtx arg1, machine_mode arg1_mode,
4461 rtx arg2, machine_mode arg2_mode,
4462 rtx arg3, machine_mode arg3_mode,
4463 rtx arg4, machine_mode arg4_mode)
4480#ifdef GENERATOR_FILE
4481extern bool read_rtx (
const char *,
vec<rtx> *);
4511extern bool stack_regs_mentioned (
const_rtx insn);
4539 unsigned HOST_WIDE_INT *);
4554#define gen_lowpart rtl_hooks.gen_lowpart
4568#define fatal_insn(msgid, insn) \
4569 _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__)
4570#define fatal_insn_not_found(insn) \
4571 _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
static int unique_id
Definition alias.cc:221
Definition varasm.cc:3951
Definition machmode.h:833
poly_int64 offset
Definition rtl.h:164
unsigned char addrspace
Definition rtl.h:179
tree expr
Definition rtl.h:160
alias_set_type alias
Definition rtl.h:171
mem_attrs()
Definition emit-rtl.cc:1829
poly_int64 size
Definition rtl.h:168
bool offset_known_p
Definition rtl.h:182
bool size_known_p
Definition rtl.h:185
unsigned int align
Definition rtl.h:176
Definition poly-int.h:378
C coeffs[N]
Definition poly-int.h:433
Definition function-abi.h:35
tree decl
Definition rtl.h:197
poly_int64 offset
Definition rtl.h:198
Definition machmode.h:437
rtx simplify_binary_operation_1(rtx_code, machine_mode, rtx, rtx, rtx, rtx)
Definition simplify-rtx.cc:3022
rtx simplify_binary_operation_series(rtx_code, machine_mode, rtx, rtx)
Definition simplify-rtx.cc:2771
static const unsigned int max_assoc_count
Definition rtl.h:3472
unsigned int assoc_count
Definition rtl.h:3468
rtx simplify_shift_const_int(rtx_code, machine_mode, rtx, unsigned int)
rtx simplify_relational_operation_1(rtx_code, machine_mode, machine_mode, rtx, rtx)
Definition simplify-rtx.cc:6221
rtx simplify_associative_operation(rtx_code, machine_mode, rtx, rtx)
Definition simplify-rtx.cc:2393
rtx simplify_plus_minus(rtx_code, machine_mode, rtx, rtx)
Definition simplify-rtx.cc:5833
rtx simplify_merge_mask(rtx, rtx, int)
Definition simplify-rtx.cc:6994
rtx simplify_gen_relational(rtx_code, machine_mode, machine_mode, rtx, rtx)
Definition simplify-rtx.cc:387
rtx simplify_ternary_operation_1(rtx_code, machine_mode, machine_mode, rtx, rtx, rtx)