Commit ed8921dc by Richard Sandiford Committed by Richard Sandiford

gcc/

	* rtl.def (DEBUG_INSN, INSN, JUMP_INSN, CALL_INSN, JUMP_TABLE_DATA)
	(BARRIER, CODE_LABEL, NOTE): Remove first "i" field.
	* rtl.h (rtx_def): Add insn_uid to u2 field.
	(RTX_FLAG_CHECK8): Delete in favor of...
	(RTL_INSN_CHAIN_FLAG_CHECK): ...this new macro.
	(INSN_DELETED_P): Update accordingly.
	(INSN_UID): Use u2.insn_uid.
	(INSN_CHAIN_CODE_P): Define.
	(PREV_INSN, NEXT_INSN, BLOCK_FOR_INSN, PATTERN, INSN_LOCATION)
	(INSN_CODE, REG_NOTES, CALL_INSN_FUNCTION_USAGE, CODE_LABEL_NUMBER)
	(NOTE_DATA, NOTE_DELETED_LABEL_NAME, NOTE_BLOCK, NOTE_EH_HANDLER)
	(NOTE_BASIC_BLOCK, NOTE_VAR_LOCATION, NOTE_CFI, NOTE_LABEL_NUMBER)
	(NOTE_KIND, LABEL_NAME, LABEL_NUSES, JUMP_LABEL, LABEL_REFS): Lower
	indices accordingly.
	* print-rtl.c (print_rtx): Print INSN_UIDs before the main loop.
	Update indices for insn-chain rtxes.
	* gengtype.c (gen_rtx_next): Adjust test for insn-chain rtxes.
	(adjust_field_rtx_def): Lower '0' indices for all insn-chain rtxes.
	* emit-rtl.c (gen_label_rtx): Update gen_rtx_LABEL call.
	* caller-save.c (init_caller_save): Update gen_rtx_INSN calls.
	* combine.c (try_combine): Likewise.
	* ira.c (setup_prohibited_mode_move_regs): Likewise.

From-SVN: r210360
parent fccc5515
2014-05-13 Richard Sandiford <rdsandiford@googlemail.com> 2014-05-13 Richard Sandiford <rdsandiford@googlemail.com>
* rtl.def (DEBUG_INSN, INSN, JUMP_INSN, CALL_INSN, JUMP_TABLE_DATA)
(BARRIER, CODE_LABEL, NOTE): Remove first "i" field.
* rtl.h (rtx_def): Add insn_uid to u2 field.
(RTX_FLAG_CHECK8): Delete in favor of...
(RTL_INSN_CHAIN_FLAG_CHECK): ...this new macro.
(INSN_DELETED_P): Update accordingly.
(INSN_UID): Use u2.insn_uid.
(INSN_CHAIN_CODE_P): Define.
(PREV_INSN, NEXT_INSN, BLOCK_FOR_INSN, PATTERN, INSN_LOCATION)
(INSN_CODE, REG_NOTES, CALL_INSN_FUNCTION_USAGE, CODE_LABEL_NUMBER)
(NOTE_DATA, NOTE_DELETED_LABEL_NAME, NOTE_BLOCK, NOTE_EH_HANDLER)
(NOTE_BASIC_BLOCK, NOTE_VAR_LOCATION, NOTE_CFI, NOTE_LABEL_NUMBER)
(NOTE_KIND, LABEL_NAME, LABEL_NUSES, JUMP_LABEL, LABEL_REFS): Lower
indices accordingly.
* print-rtl.c (print_rtx): Print INSN_UIDs before the main loop.
Update indices for insn-chain rtxes.
* gengtype.c (gen_rtx_next): Adjust test for insn-chain rtxes.
(adjust_field_rtx_def): Lower '0' indices for all insn-chain rtxes.
* emit-rtl.c (gen_label_rtx): Update gen_rtx_LABEL call.
* caller-save.c (init_caller_save): Update gen_rtx_INSN calls.
* combine.c (try_combine): Likewise.
* ira.c (setup_prohibited_mode_move_regs): Likewise.
2014-05-13 Richard Sandiford <rdsandiford@googlemail.com>
* rtl.def (REG): Remove middle field. * rtl.def (REG): Remove middle field.
* rtl.h (rtx_def): Add orignal_regno to u2. * rtl.h (rtx_def): Add orignal_regno to u2.
(ORIGINAL_REGNO): Use it instead of field 1. (ORIGINAL_REGNO): Use it instead of field 1.
......
...@@ -265,8 +265,8 @@ init_caller_save (void) ...@@ -265,8 +265,8 @@ init_caller_save (void)
savepat = gen_rtx_SET (VOIDmode, test_mem, test_reg); savepat = gen_rtx_SET (VOIDmode, test_mem, test_reg);
restpat = gen_rtx_SET (VOIDmode, test_reg, test_mem); restpat = gen_rtx_SET (VOIDmode, test_reg, test_mem);
saveinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, savepat, 0, -1, 0); saveinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, savepat, 0, -1, 0);
restinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, restpat, 0, -1, 0); restinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, restpat, 0, -1, 0);
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
for (j = 1; j <= MOVE_MAX_WORDS; j++) for (j = 1; j <= MOVE_MAX_WORDS; j++)
......
...@@ -2739,9 +2739,10 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p, ...@@ -2739,9 +2739,10 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
never appear in the insn stream so giving it the same INSN_UID never appear in the insn stream so giving it the same INSN_UID
as I2 will not cause a problem. */ as I2 will not cause a problem. */
i1 = gen_rtx_INSN (VOIDmode, INSN_UID (i2), NULL_RTX, i2, i1 = gen_rtx_INSN (VOIDmode, NULL_RTX, i2, BLOCK_FOR_INSN (i2),
BLOCK_FOR_INSN (i2), XVECEXP (PATTERN (i2), 0, 1), XVECEXP (PATTERN (i2), 0, 1), INSN_LOCATION (i2),
INSN_LOCATION (i2), -1, NULL_RTX); -1, NULL_RTX);
INSN_UID (i1) = INSN_UID (i2);
SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0)); SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
SUBST (XEXP (SET_SRC (PATTERN (i2)), 0), SUBST (XEXP (SET_SRC (PATTERN (i2)), 0),
......
...@@ -2451,7 +2451,7 @@ set_mem_attrs_for_spill (rtx mem) ...@@ -2451,7 +2451,7 @@ set_mem_attrs_for_spill (rtx mem)
rtx rtx
gen_label_rtx (void) gen_label_rtx (void)
{ {
return gen_rtx_CODE_LABEL (VOIDmode, 0, NULL_RTX, NULL_RTX, return gen_rtx_CODE_LABEL (VOIDmode, NULL_RTX, NULL_RTX,
NULL, label_num++, NULL); NULL, label_num++, NULL);
} }
......
...@@ -1086,8 +1086,8 @@ gen_rtx_next (void) ...@@ -1086,8 +1086,8 @@ gen_rtx_next (void)
int k; int k;
rtx_next_new[i] = -1; rtx_next_new[i] = -1;
if (strncmp (rtx_format[i], "iuu", 3) == 0) if (strncmp (rtx_format[i], "uu", 2) == 0)
rtx_next_new[i] = 2; rtx_next_new[i] = 1;
else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST) else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST)
rtx_next_new[i] = 1; rtx_next_new[i] = 1;
else else
...@@ -1227,19 +1227,19 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) ...@@ -1227,19 +1227,19 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
case '0': case '0':
if (i == MEM && aindex == 1) if (i == MEM && aindex == 1)
t = mem_attrs_tp, subname = "rt_mem"; t = mem_attrs_tp, subname = "rt_mem";
else if (i == JUMP_INSN && aindex == 8) else if (i == JUMP_INSN && aindex == 7)
t = rtx_tp, subname = "rt_rtx"; t = rtx_tp, subname = "rt_rtx";
else if (i == CODE_LABEL && aindex == 5)
t = scalar_tp, subname = "rt_int";
else if (i == CODE_LABEL && aindex == 4) else if (i == CODE_LABEL && aindex == 4)
t = scalar_tp, subname = "rt_int";
else if (i == CODE_LABEL && aindex == 3)
t = rtx_tp, subname = "rt_rtx"; t = rtx_tp, subname = "rt_rtx";
else if (i == LABEL_REF && (aindex == 1 || aindex == 2)) else if (i == LABEL_REF && (aindex == 1 || aindex == 2))
t = rtx_tp, subname = "rt_rtx"; t = rtx_tp, subname = "rt_rtx";
else if (i == NOTE && aindex == 4) else if (i == NOTE && aindex == 3)
t = note_union_tp, subname = ""; t = note_union_tp, subname = "";
else if (i == NOTE && aindex == 5) else if (i == NOTE && aindex == 4)
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
else if (i == NOTE && aindex >= 7) else if (i == NOTE && aindex >= 6)
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
else if (i == ADDR_DIFF_VEC && aindex == 4) else if (i == ADDR_DIFF_VEC && aindex == 4)
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
...@@ -1255,9 +1255,9 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) ...@@ -1255,9 +1255,9 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
else if (i == SYMBOL_REF && aindex == 2) else if (i == SYMBOL_REF && aindex == 2)
t = symbol_union_tp, subname = ""; t = symbol_union_tp, subname = "";
else if (i == JUMP_TABLE_DATA && aindex >= 5) else if (i == JUMP_TABLE_DATA && aindex >= 4)
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
else if (i == BARRIER && aindex >= 3) else if (i == BARRIER && aindex >= 2)
t = scalar_tp, subname = "rt_int"; t = scalar_tp, subname = "rt_int";
else if (i == ENTRY_VALUE && aindex == 0) else if (i == ENTRY_VALUE && aindex == 0)
t = rtx_tp, subname = "rt_rtx"; t = rtx_tp, subname = "rt_rtx";
......
...@@ -1744,7 +1744,7 @@ setup_prohibited_mode_move_regs (void) ...@@ -1744,7 +1744,7 @@ setup_prohibited_mode_move_regs (void)
test_reg1 = gen_rtx_REG (VOIDmode, 0); test_reg1 = gen_rtx_REG (VOIDmode, 0);
test_reg2 = gen_rtx_REG (VOIDmode, 0); test_reg2 = gen_rtx_REG (VOIDmode, 0);
move_pat = gen_rtx_SET (VOIDmode, test_reg1, test_reg2); move_pat = gen_rtx_SET (VOIDmode, test_reg1, test_reg2);
move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, move_pat, 0, -1, 0); move_insn = gen_rtx_INSN (VOIDmode, 0, 0, 0, move_pat, 0, -1, 0);
for (i = 0; i < NUM_MACHINE_MODES; i++) for (i = 0; i < NUM_MACHINE_MODES; i++)
{ {
SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]); SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
......
...@@ -187,6 +187,9 @@ print_rtx (const_rtx in_rtx) ...@@ -187,6 +187,9 @@ print_rtx (const_rtx in_rtx)
i = 5; i = 5;
#endif #endif
if (INSN_CHAIN_CODE_P (GET_CODE (in_rtx)))
fprintf (outfile, " %d", INSN_UID (in_rtx));
/* Get the format string and skip the first elements if we have handled /* Get the format string and skip the first elements if we have handled
them already. */ them already. */
format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i; format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i;
...@@ -228,7 +231,7 @@ print_rtx (const_rtx in_rtx) ...@@ -228,7 +231,7 @@ print_rtx (const_rtx in_rtx)
if (decl) if (decl)
print_node_brief (outfile, "", decl, dump_flags); print_node_brief (outfile, "", decl, dump_flags);
} }
else if (i == 4 && NOTE_P (in_rtx)) else if (i == 3 && NOTE_P (in_rtx))
{ {
switch (NOTE_KIND (in_rtx)) switch (NOTE_KIND (in_rtx))
{ {
...@@ -290,7 +293,7 @@ print_rtx (const_rtx in_rtx) ...@@ -290,7 +293,7 @@ print_rtx (const_rtx in_rtx)
break; break;
} }
} }
else if (i == 8 && JUMP_P (in_rtx) && JUMP_LABEL (in_rtx) != NULL) else if (i == 7 && JUMP_P (in_rtx) && JUMP_LABEL (in_rtx) != NULL)
{ {
/* Output the JUMP_LABEL reference. */ /* Output the JUMP_LABEL reference. */
fprintf (outfile, "\n%s%*s -> ", print_rtx_head, indent * 2, ""); fprintf (outfile, "\n%s%*s -> ", print_rtx_head, indent * 2, "");
...@@ -328,13 +331,13 @@ print_rtx (const_rtx in_rtx) ...@@ -328,13 +331,13 @@ print_rtx (const_rtx in_rtx)
case 'e': case 'e':
do_e: do_e:
indent += 2; indent += 2;
if (i == 7 && INSN_P (in_rtx)) if (i == 6 && INSN_P (in_rtx))
/* Put REG_NOTES on their own line. */ /* Put REG_NOTES on their own line. */
fprintf (outfile, "\n%s%*s", fprintf (outfile, "\n%s%*s",
print_rtx_head, indent * 2, ""); print_rtx_head, indent * 2, "");
if (!sawclose) if (!sawclose)
fprintf (outfile, " "); fprintf (outfile, " ");
if (i == 8 && CALL_P (in_rtx)) if (i == 7 && CALL_P (in_rtx))
{ {
in_call_function_usage = true; in_call_function_usage = true;
print_rtx (XEXP (in_rtx, i)); print_rtx (XEXP (in_rtx, i));
...@@ -384,7 +387,7 @@ print_rtx (const_rtx in_rtx) ...@@ -384,7 +387,7 @@ print_rtx (const_rtx in_rtx)
break; break;
case 'i': case 'i':
if (i == 5 && INSN_P (in_rtx)) if (i == 4 && INSN_P (in_rtx))
{ {
#ifndef GENERATOR_FILE #ifndef GENERATOR_FILE
/* Pretty-print insn locations. Ignore scoping as it is mostly /* Pretty-print insn locations. Ignore scoping as it is mostly
...@@ -413,7 +416,7 @@ print_rtx (const_rtx in_rtx) ...@@ -413,7 +416,7 @@ print_rtx (const_rtx in_rtx)
LOCATION_LINE (ASM_INPUT_SOURCE_LOCATION (in_rtx))); LOCATION_LINE (ASM_INPUT_SOURCE_LOCATION (in_rtx)));
#endif #endif
} }
else if (i == 6 && NOTE_P (in_rtx)) else if (i == 5 && NOTE_P (in_rtx))
{ {
/* This field is only used for NOTE_INSN_DELETED_LABEL, and /* This field is only used for NOTE_INSN_DELETED_LABEL, and
other times often contains garbage from INSN->NOTE death. */ other times often contains garbage from INSN->NOTE death. */
......
...@@ -139,46 +139,46 @@ DEF_RTL_EXPR(ADDRESS, "address", "i", RTX_EXTRA) ...@@ -139,46 +139,46 @@ DEF_RTL_EXPR(ADDRESS, "address", "i", RTX_EXTRA)
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
/* An annotation for variable assignment tracking. */ /* An annotation for variable assignment tracking. */
DEF_RTL_EXPR(DEBUG_INSN, "debug_insn", "iuuBeiie", RTX_INSN) DEF_RTL_EXPR(DEBUG_INSN, "debug_insn", "uuBeiie", RTX_INSN)
/* An instruction that cannot jump. */ /* An instruction that cannot jump. */
DEF_RTL_EXPR(INSN, "insn", "iuuBeiie", RTX_INSN) DEF_RTL_EXPR(INSN, "insn", "uuBeiie", RTX_INSN)
/* An instruction that can possibly jump. /* An instruction that can possibly jump.
Fields ( rtx->u.fld[] ) have exact same meaning as INSN's. */ Fields ( rtx->u.fld[] ) have exact same meaning as INSN's. */
DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "iuuBeiie0", RTX_INSN) DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "uuBeiie0", RTX_INSN)
/* An instruction that can possibly call a subroutine /* An instruction that can possibly call a subroutine
but which will not change which instruction comes next but which will not change which instruction comes next
in the current function. in the current function.
Field ( rtx->u.fld[8] ) is CALL_INSN_FUNCTION_USAGE. Field ( rtx->u.fld[8] ) is CALL_INSN_FUNCTION_USAGE.
All other fields ( rtx->u.fld[] ) have exact same meaning as INSN's. */ All other fields ( rtx->u.fld[] ) have exact same meaning as INSN's. */
DEF_RTL_EXPR(CALL_INSN, "call_insn", "iuuBeiiee", RTX_INSN) DEF_RTL_EXPR(CALL_INSN, "call_insn", "uuBeiiee", RTX_INSN)
/* Placeholder for tablejump JUMP_INSNs. The pattern of this kind /* Placeholder for tablejump JUMP_INSNs. The pattern of this kind
of rtx is always either an ADDR_VEC or an ADDR_DIFF_VEC. These of rtx is always either an ADDR_VEC or an ADDR_DIFF_VEC. These
placeholders do not appear as real instructions inside a basic placeholders do not appear as real instructions inside a basic
block, but are considered active_insn_p instructions for historical block, but are considered active_insn_p instructions for historical
reasons, when jump table data was represented with JUMP_INSNs. */ reasons, when jump table data was represented with JUMP_INSNs. */
DEF_RTL_EXPR(JUMP_TABLE_DATA, "jump_table_data", "iuuBe0000", RTX_INSN) DEF_RTL_EXPR(JUMP_TABLE_DATA, "jump_table_data", "uuBe0000", RTX_INSN)
/* A marker that indicates that control will not flow through. */ /* A marker that indicates that control will not flow through. */
DEF_RTL_EXPR(BARRIER, "barrier", "iuu00000", RTX_EXTRA) DEF_RTL_EXPR(BARRIER, "barrier", "uu00000", RTX_EXTRA)
/* Holds a label that is followed by instructions. /* Holds a label that is followed by instructions.
Operand: Operand:
4: is used in jump.c for the use-count of the label. 3: is used in jump.c for the use-count of the label.
5: is used in the sh backend. 4: is used in the sh backend.
6: is a number that is unique in the entire compilation. 5: is a number that is unique in the entire compilation.
7: is the user-given name of the label, if any. */ 6: is the user-given name of the label, if any. */
DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuB00is", RTX_EXTRA) DEF_RTL_EXPR(CODE_LABEL, "code_label", "uuB00is", RTX_EXTRA)
/* Say where in the code a source line starts, for symbol table's sake. /* Say where in the code a source line starts, for symbol table's sake.
Operand: Operand:
4: note-specific data 3: note-specific data
5: enum insn_note 4: enum insn_note
6: unique number if insn_note == note_insn_deleted_label. */ 5: unique number if insn_note == note_insn_deleted_label. */
DEF_RTL_EXPR(NOTE, "note", "iuuB0ni", RTX_EXTRA) DEF_RTL_EXPR(NOTE, "note", "uuB0ni", RTX_EXTRA)
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
Top level constituents of INSN, JUMP_INSN and CALL_INSN. Top level constituents of INSN, JUMP_INSN and CALL_INSN.
......
...@@ -109,6 +109,10 @@ extern const char * const rtx_format[NUM_RTX_CODE]; ...@@ -109,6 +109,10 @@ extern const char * const rtx_format[NUM_RTX_CODE];
extern const enum rtx_class rtx_class[NUM_RTX_CODE]; extern const enum rtx_class rtx_class[NUM_RTX_CODE];
#define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)]) #define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)])
/* True if CODE is part of the insn chain (i.e. has INSN_UID, PREV_INSN
and NEXT_INSN fields). */
#define INSN_CHAIN_CODE_P(CODE) IN_RANGE (CODE, DEBUG_INSN, NOTE)
extern const unsigned char rtx_code_size[NUM_RTX_CODE]; extern const unsigned char rtx_code_size[NUM_RTX_CODE];
extern const unsigned char rtx_next[NUM_RTX_CODE]; extern const unsigned char rtx_next[NUM_RTX_CODE];
...@@ -355,6 +359,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"), ...@@ -355,6 +359,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
/* The ORIGINAL_REGNO of a REG. */ /* The ORIGINAL_REGNO of a REG. */
unsigned int original_regno; unsigned int original_regno;
/* The INSN_UID of an RTX_INSN-class code. */
int insn_uid;
/* In a CONST_WIDE_INT (aka hwivec_def), this is the number of /* In a CONST_WIDE_INT (aka hwivec_def), this is the number of
HOST_WIDE_INTs in the hwivec_def. */ HOST_WIDE_INTs in the hwivec_def. */
unsigned int num_elem; unsigned int num_elem;
...@@ -817,15 +824,12 @@ extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, int, ...@@ -817,15 +824,12 @@ extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, int,
__FUNCTION__); \ __FUNCTION__); \
_rtx; }) _rtx; })
#define RTL_FLAG_CHECK8(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8) \ #define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) \
__extension__ \ __extension__ \
({ __typeof (RTX) const _rtx = (RTX); \ ({ __typeof (RTX) const _rtx = (RTX); \
if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2 \ if (!INSN_CHAIN_CODE_P (GET_CODE (_rtx))) \
&& GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4 \ rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
&& GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6 \ __FUNCTION__); \
&& GET_CODE (_rtx) != C7 && GET_CODE (_rtx) != C8) \
rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
__FUNCTION__); \
_rtx; }) _rtx; })
extern void rtl_check_failed_flag (const char *, const_rtx, const char *, extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
...@@ -839,10 +843,10 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, ...@@ -839,10 +843,10 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
#define RTL_FLAG_CHECK2(NAME, RTX, C1, C2) (RTX) #define RTL_FLAG_CHECK2(NAME, RTX, C1, C2) (RTX)
#define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3) (RTX) #define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3) (RTX)
#define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4) (RTX) #define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4) (RTX)
#define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5) (RTX) #define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5) (RTX)
#define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6) (RTX) #define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6) (RTX)
#define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7) (RTX) #define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7) (RTX)
#define RTL_FLAG_CHECK8(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8) (RTX) #define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) (RTX)
#endif #endif
#define XINT(RTX, N) (RTL_CHECK2 (RTX, N, 'i', 'n').rt_int) #define XINT(RTX, N) (RTL_CHECK2 (RTX, N, 'i', 'n').rt_int)
...@@ -899,18 +903,19 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, ...@@ -899,18 +903,19 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
/* Holds a unique number for each insn. /* Holds a unique number for each insn.
These are not necessarily sequentially increasing. */ These are not necessarily sequentially increasing. */
#define INSN_UID(INSN) XINT (INSN, 0) #define INSN_UID(INSN) \
(RTL_INSN_CHAIN_FLAG_CHECK ("INSN_UID", (INSN))->u2.insn_uid)
/* Chain insns together in sequence. */ /* Chain insns together in sequence. */
#define PREV_INSN(INSN) XEXP (INSN, 1) #define PREV_INSN(INSN) XEXP (INSN, 0)
#define NEXT_INSN(INSN) XEXP (INSN, 2) #define NEXT_INSN(INSN) XEXP (INSN, 1)
#define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 3) #define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 2)
/* The body of an insn. */ /* The body of an insn. */
#define PATTERN(INSN) XEXP (INSN, 4) #define PATTERN(INSN) XEXP (INSN, 3)
#define INSN_LOCATION(INSN) XUINT (INSN, 5) #define INSN_LOCATION(INSN) XUINT (INSN, 4)
#define INSN_HAS_LOCATION(INSN) ((LOCATION_LOCUS (INSN_LOCATION (INSN)))\ #define INSN_HAS_LOCATION(INSN) ((LOCATION_LOCUS (INSN_LOCATION (INSN)))\
!= UNKNOWN_LOCATION) != UNKNOWN_LOCATION)
...@@ -921,7 +926,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, ...@@ -921,7 +926,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
/* Code number of instruction, from when it was recognized. /* Code number of instruction, from when it was recognized.
-1 means this instruction has not been recognized yet. */ -1 means this instruction has not been recognized yet. */
#define INSN_CODE(INSN) XINT (INSN, 6) #define INSN_CODE(INSN) XINT (INSN, 5)
#define RTX_FRAME_RELATED_P(RTX) \ #define RTX_FRAME_RELATED_P(RTX) \
(RTL_FLAG_CHECK6 ("RTX_FRAME_RELATED_P", (RTX), DEBUG_INSN, INSN, \ (RTL_FLAG_CHECK6 ("RTX_FRAME_RELATED_P", (RTX), DEBUG_INSN, INSN, \
...@@ -929,9 +934,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, ...@@ -929,9 +934,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
/* 1 if RTX is an insn that has been deleted. */ /* 1 if RTX is an insn that has been deleted. */
#define INSN_DELETED_P(RTX) \ #define INSN_DELETED_P(RTX) \
(RTL_FLAG_CHECK8 ("INSN_DELETED_P", (RTX), DEBUG_INSN, INSN, \ (RTL_INSN_CHAIN_FLAG_CHECK ("INSN_DELETED_P", (RTX))->volatil)
CALL_INSN, JUMP_INSN, JUMP_TABLE_DATA, \
CODE_LABEL, BARRIER, NOTE)->volatil)
/* 1 if RTX is a call to a const function. Built from ECF_CONST and /* 1 if RTX is a call to a const function. Built from ECF_CONST and
TREE_READONLY. */ TREE_READONLY. */
...@@ -981,7 +984,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, ...@@ -981,7 +984,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
chain pointer and the first operand is the REG being described. chain pointer and the first operand is the REG being described.
The mode field of the EXPR_LIST contains not a real machine mode The mode field of the EXPR_LIST contains not a real machine mode
but a value from enum reg_note. */ but a value from enum reg_note. */
#define REG_NOTES(INSN) XEXP(INSN, 7) #define REG_NOTES(INSN) XEXP(INSN, 6)
/* In an ENTRY_VALUE this is the DECL_INCOMING_RTL of the argument in /* In an ENTRY_VALUE this is the DECL_INCOMING_RTL of the argument in
question. */ question. */
...@@ -1012,12 +1015,12 @@ extern const char * const reg_note_name[]; ...@@ -1012,12 +1015,12 @@ extern const char * const reg_note_name[];
CLOBBER expressions document the registers explicitly clobbered CLOBBER expressions document the registers explicitly clobbered
by this CALL_INSN. by this CALL_INSN.
Pseudo registers can not be mentioned in this list. */ Pseudo registers can not be mentioned in this list. */
#define CALL_INSN_FUNCTION_USAGE(INSN) XEXP(INSN, 8) #define CALL_INSN_FUNCTION_USAGE(INSN) XEXP(INSN, 7)
/* The label-number of a code-label. The assembler label /* The label-number of a code-label. The assembler label
is made from `L' and the label-number printed in decimal. is made from `L' and the label-number printed in decimal.
Label numbers are unique in a compilation. */ Label numbers are unique in a compilation. */
#define CODE_LABEL_NUMBER(INSN) XINT (INSN, 6) #define CODE_LABEL_NUMBER(INSN) XINT (INSN, 5)
/* In a NOTE that is a line number, this is a string for the file name that the /* In a NOTE that is a line number, this is a string for the file name that the
line is in. We use the same field to record block numbers temporarily in line is in. We use the same field to record block numbers temporarily in
...@@ -1026,19 +1029,19 @@ extern const char * const reg_note_name[]; ...@@ -1026,19 +1029,19 @@ extern const char * const reg_note_name[];
*/ */
/* Opaque data. */ /* Opaque data. */
#define NOTE_DATA(INSN) RTL_CHECKC1 (INSN, 4, NOTE) #define NOTE_DATA(INSN) RTL_CHECKC1 (INSN, 3, NOTE)
#define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 4, NOTE) #define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 3, NOTE)
#define SET_INSN_DELETED(INSN) set_insn_deleted (INSN); #define SET_INSN_DELETED(INSN) set_insn_deleted (INSN);
#define NOTE_BLOCK(INSN) XCTREE (INSN, 4, NOTE) #define NOTE_BLOCK(INSN) XCTREE (INSN, 3, NOTE)
#define NOTE_EH_HANDLER(INSN) XCINT (INSN, 4, NOTE) #define NOTE_EH_HANDLER(INSN) XCINT (INSN, 3, NOTE)
#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 4, NOTE) #define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 3, NOTE)
#define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 4, NOTE) #define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 3, NOTE)
#define NOTE_CFI(INSN) XCCFI (INSN, 4, NOTE) #define NOTE_CFI(INSN) XCCFI (INSN, 3, NOTE)
#define NOTE_LABEL_NUMBER(INSN) XCINT (INSN, 4, NOTE) #define NOTE_LABEL_NUMBER(INSN) XCINT (INSN, 3, NOTE)
/* In a NOTE that is a line number, this is the line number. /* In a NOTE that is a line number, this is the line number.
Other kinds of NOTEs are identified by negative numbers here. */ Other kinds of NOTEs are identified by negative numbers here. */
#define NOTE_KIND(INSN) XCINT (INSN, 5, NOTE) #define NOTE_KIND(INSN) XCINT (INSN, 4, NOTE)
/* Nonzero if INSN is a note marking the beginning of a basic block. */ /* Nonzero if INSN is a note marking the beginning of a basic block. */
#define NOTE_INSN_BASIC_BLOCK_P(INSN) \ #define NOTE_INSN_BASIC_BLOCK_P(INSN) \
...@@ -1121,11 +1124,11 @@ extern const char * const note_insn_name[NOTE_INSN_MAX]; ...@@ -1121,11 +1124,11 @@ extern const char * const note_insn_name[NOTE_INSN_MAX];
/* The name of a label, in case it corresponds to an explicit label /* The name of a label, in case it corresponds to an explicit label
in the input source code. */ in the input source code. */
#define LABEL_NAME(RTX) XCSTR (RTX, 7, CODE_LABEL) #define LABEL_NAME(RTX) XCSTR (RTX, 6, CODE_LABEL)
/* In jump.c, each label contains a count of the number /* In jump.c, each label contains a count of the number
of LABEL_REFs that point at it, so unused labels can be deleted. */ of LABEL_REFs that point at it, so unused labels can be deleted. */
#define LABEL_NUSES(RTX) XCINT (RTX, 5, CODE_LABEL) #define LABEL_NUSES(RTX) XCINT (RTX, 4, CODE_LABEL)
/* Labels carry a two-bit field composed of the ->jump and ->call /* Labels carry a two-bit field composed of the ->jump and ->call
bits. This field indicates whether the label is an alternate bits. This field indicates whether the label is an alternate
...@@ -1180,12 +1183,12 @@ enum label_kind ...@@ -1180,12 +1183,12 @@ enum label_kind
/* In jump.c, each JUMP_INSN can point to a label that it can jump to, /* In jump.c, each JUMP_INSN can point to a label that it can jump to,
so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can
be decremented and possibly the label can be deleted. */ be decremented and possibly the label can be deleted. */
#define JUMP_LABEL(INSN) XCEXP (INSN, 8, JUMP_INSN) #define JUMP_LABEL(INSN) XCEXP (INSN, 7, JUMP_INSN)
/* Once basic blocks are found, each CODE_LABEL starts a chain that /* Once basic blocks are found, each CODE_LABEL starts a chain that
goes through all the LABEL_REFs that jump to that label. The chain goes through all the LABEL_REFs that jump to that label. The chain
eventually winds up at the CODE_LABEL: it is circular. */ eventually winds up at the CODE_LABEL: it is circular. */
#define LABEL_REFS(LABEL) XCEXP (LABEL, 4, CODE_LABEL) #define LABEL_REFS(LABEL) XCEXP (LABEL, 3, CODE_LABEL)
/* For a REG rtx, REGNO extracts the register number. REGNO can only /* For a REG rtx, REGNO extracts the register number. REGNO can only
be used on RHS. Use SET_REGNO to change the value. */ be used on RHS. Use SET_REGNO to change the value. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment