mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 04:10:29 +08:00
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
This commit is contained in:
parent
fccc55155d
commit
ed8921dc73
@ -1,3 +1,28 @@
|
||||
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.
|
||||
|
@ -265,8 +265,8 @@ init_caller_save (void)
|
||||
savepat = gen_rtx_SET (VOIDmode, test_mem, test_reg);
|
||||
restpat = gen_rtx_SET (VOIDmode, test_reg, test_mem);
|
||||
|
||||
saveinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, savepat, 0, -1, 0);
|
||||
restinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, 0, restpat, 0, -1, 0);
|
||||
saveinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, savepat, 0, -1, 0);
|
||||
restinsn = gen_rtx_INSN (VOIDmode, 0, 0, 0, restpat, 0, -1, 0);
|
||||
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
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,
|
||||
never appear in the insn stream so giving it the same INSN_UID
|
||||
as I2 will not cause a problem. */
|
||||
|
||||
i1 = gen_rtx_INSN (VOIDmode, INSN_UID (i2), NULL_RTX, i2,
|
||||
BLOCK_FOR_INSN (i2), XVECEXP (PATTERN (i2), 0, 1),
|
||||
INSN_LOCATION (i2), -1, NULL_RTX);
|
||||
i1 = gen_rtx_INSN (VOIDmode, NULL_RTX, i2, BLOCK_FOR_INSN (i2),
|
||||
XVECEXP (PATTERN (i2), 0, 1), INSN_LOCATION (i2),
|
||||
-1, NULL_RTX);
|
||||
INSN_UID (i1) = INSN_UID (i2);
|
||||
|
||||
SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
|
||||
SUBST (XEXP (SET_SRC (PATTERN (i2)), 0),
|
||||
|
@ -2451,7 +2451,7 @@ set_mem_attrs_for_spill (rtx mem)
|
||||
rtx
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1086,8 +1086,8 @@ gen_rtx_next (void)
|
||||
int k;
|
||||
|
||||
rtx_next_new[i] = -1;
|
||||
if (strncmp (rtx_format[i], "iuu", 3) == 0)
|
||||
rtx_next_new[i] = 2;
|
||||
if (strncmp (rtx_format[i], "uu", 2) == 0)
|
||||
rtx_next_new[i] = 1;
|
||||
else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST)
|
||||
rtx_next_new[i] = 1;
|
||||
else
|
||||
@ -1227,19 +1227,19 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
|
||||
case '0':
|
||||
if (i == MEM && aindex == 1)
|
||||
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";
|
||||
else if (i == CODE_LABEL && aindex == 5)
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
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";
|
||||
else if (i == LABEL_REF && (aindex == 1 || aindex == 2))
|
||||
t = rtx_tp, subname = "rt_rtx";
|
||||
else if (i == NOTE && aindex == 4)
|
||||
else if (i == NOTE && aindex == 3)
|
||||
t = note_union_tp, subname = "";
|
||||
else if (i == NOTE && aindex == 5)
|
||||
else if (i == NOTE && aindex == 4)
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
else if (i == NOTE && aindex >= 7)
|
||||
else if (i == NOTE && aindex >= 6)
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
else if (i == ADDR_DIFF_VEC && aindex == 4)
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
@ -1255,9 +1255,9 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
else if (i == SYMBOL_REF && aindex == 2)
|
||||
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";
|
||||
else if (i == BARRIER && aindex >= 3)
|
||||
else if (i == BARRIER && aindex >= 2)
|
||||
t = scalar_tp, subname = "rt_int";
|
||||
else if (i == ENTRY_VALUE && aindex == 0)
|
||||
t = rtx_tp, subname = "rt_rtx";
|
||||
|
@ -1744,7 +1744,7 @@ setup_prohibited_mode_move_regs (void)
|
||||
test_reg1 = gen_rtx_REG (VOIDmode, 0);
|
||||
test_reg2 = gen_rtx_REG (VOIDmode, 0);
|
||||
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++)
|
||||
{
|
||||
SET_HARD_REG_SET (ira_prohibited_mode_move_regs[i]);
|
||||
|
@ -187,6 +187,9 @@ print_rtx (const_rtx in_rtx)
|
||||
i = 5;
|
||||
#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
|
||||
them already. */
|
||||
format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i;
|
||||
@ -228,7 +231,7 @@ print_rtx (const_rtx in_rtx)
|
||||
if (decl)
|
||||
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))
|
||||
{
|
||||
@ -290,7 +293,7 @@ print_rtx (const_rtx in_rtx)
|
||||
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. */
|
||||
fprintf (outfile, "\n%s%*s -> ", print_rtx_head, indent * 2, "");
|
||||
@ -328,13 +331,13 @@ print_rtx (const_rtx in_rtx)
|
||||
case 'e':
|
||||
do_e:
|
||||
indent += 2;
|
||||
if (i == 7 && INSN_P (in_rtx))
|
||||
if (i == 6 && INSN_P (in_rtx))
|
||||
/* Put REG_NOTES on their own line. */
|
||||
fprintf (outfile, "\n%s%*s",
|
||||
print_rtx_head, indent * 2, "");
|
||||
if (!sawclose)
|
||||
fprintf (outfile, " ");
|
||||
if (i == 8 && CALL_P (in_rtx))
|
||||
if (i == 7 && CALL_P (in_rtx))
|
||||
{
|
||||
in_call_function_usage = true;
|
||||
print_rtx (XEXP (in_rtx, i));
|
||||
@ -384,7 +387,7 @@ print_rtx (const_rtx in_rtx)
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
if (i == 5 && INSN_P (in_rtx))
|
||||
if (i == 4 && INSN_P (in_rtx))
|
||||
{
|
||||
#ifndef GENERATOR_FILE
|
||||
/* Pretty-print insn locations. Ignore scoping as it is mostly
|
||||
@ -413,7 +416,7 @@ print_rtx (const_rtx in_rtx)
|
||||
LOCATION_LINE (ASM_INPUT_SOURCE_LOCATION (in_rtx)));
|
||||
#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
|
||||
other times often contains garbage from INSN->NOTE death. */
|
||||
|
30
gcc/rtl.def
30
gcc/rtl.def
@ -139,46 +139,46 @@ DEF_RTL_EXPR(ADDRESS, "address", "i", RTX_EXTRA)
|
||||
---------------------------------------------------------------------- */
|
||||
|
||||
/* 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. */
|
||||
DEF_RTL_EXPR(INSN, "insn", "iuuBeiie", RTX_INSN)
|
||||
DEF_RTL_EXPR(INSN, "insn", "uuBeiie", RTX_INSN)
|
||||
|
||||
/* An instruction that can possibly jump.
|
||||
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
|
||||
but which will not change which instruction comes next
|
||||
in the current function.
|
||||
Field ( rtx->u.fld[8] ) is CALL_INSN_FUNCTION_USAGE.
|
||||
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
|
||||
of rtx is always either an ADDR_VEC or an ADDR_DIFF_VEC. These
|
||||
placeholders do not appear as real instructions inside a basic
|
||||
block, but are considered active_insn_p instructions for historical
|
||||
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. */
|
||||
DEF_RTL_EXPR(BARRIER, "barrier", "iuu00000", RTX_EXTRA)
|
||||
DEF_RTL_EXPR(BARRIER, "barrier", "uu00000", RTX_EXTRA)
|
||||
|
||||
/* Holds a label that is followed by instructions.
|
||||
Operand:
|
||||
4: is used in jump.c for the use-count of the label.
|
||||
5: is used in the sh backend.
|
||||
6: is a number that is unique in the entire compilation.
|
||||
7: is the user-given name of the label, if any. */
|
||||
DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuB00is", RTX_EXTRA)
|
||||
3: is used in jump.c for the use-count of the label.
|
||||
4: is used in the sh backend.
|
||||
5: is a number that is unique in the entire compilation.
|
||||
6: is the user-given name of the label, if any. */
|
||||
DEF_RTL_EXPR(CODE_LABEL, "code_label", "uuB00is", RTX_EXTRA)
|
||||
|
||||
/* Say where in the code a source line starts, for symbol table's sake.
|
||||
Operand:
|
||||
4: note-specific data
|
||||
5: enum insn_note
|
||||
6: unique number if insn_note == note_insn_deleted_label. */
|
||||
DEF_RTL_EXPR(NOTE, "note", "iuuB0ni", RTX_EXTRA)
|
||||
3: note-specific data
|
||||
4: enum insn_note
|
||||
5: unique number if insn_note == note_insn_deleted_label. */
|
||||
DEF_RTL_EXPR(NOTE, "note", "uuB0ni", RTX_EXTRA)
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
Top level constituents of INSN, JUMP_INSN and CALL_INSN.
|
||||
|
73
gcc/rtl.h
73
gcc/rtl.h
@ -109,6 +109,10 @@ extern const char * const rtx_format[NUM_RTX_CODE];
|
||||
extern const enum rtx_class rtx_class[NUM_RTX_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_next[NUM_RTX_CODE];
|
||||
|
||||
@ -355,6 +359,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
|
||||
/* The ORIGINAL_REGNO of a REG. */
|
||||
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
|
||||
HOST_WIDE_INTs in the hwivec_def. */
|
||||
unsigned int num_elem;
|
||||
@ -817,15 +824,12 @@ extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, int,
|
||||
__FUNCTION__); \
|
||||
_rtx; })
|
||||
|
||||
#define RTL_FLAG_CHECK8(NAME, RTX, C1, C2, C3, C4, C5, C6, C7, C8) \
|
||||
#define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) \
|
||||
__extension__ \
|
||||
({ __typeof (RTX) const _rtx = (RTX); \
|
||||
if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2 \
|
||||
&& GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4 \
|
||||
&& GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6 \
|
||||
&& GET_CODE (_rtx) != C7 && GET_CODE (_rtx) != C8) \
|
||||
rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
|
||||
__FUNCTION__); \
|
||||
if (!INSN_CHAIN_CODE_P (GET_CODE (_rtx))) \
|
||||
rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__, \
|
||||
__FUNCTION__); \
|
||||
_rtx; })
|
||||
|
||||
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_CHECK3(NAME, RTX, C1, C2, C3) (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_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
|
||||
|
||||
#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 *,
|
||||
|
||||
/* Holds a unique number for each insn.
|
||||
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. */
|
||||
#define PREV_INSN(INSN) XEXP (INSN, 1)
|
||||
#define NEXT_INSN(INSN) XEXP (INSN, 2)
|
||||
#define PREV_INSN(INSN) XEXP (INSN, 0)
|
||||
#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. */
|
||||
#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)))\
|
||||
!= UNKNOWN_LOCATION)
|
||||
@ -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.
|
||||
-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) \
|
||||
(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 *,
|
||||
|
||||
/* 1 if RTX is an insn that has been deleted. */
|
||||
#define INSN_DELETED_P(RTX) \
|
||||
(RTL_FLAG_CHECK8 ("INSN_DELETED_P", (RTX), DEBUG_INSN, INSN, \
|
||||
CALL_INSN, JUMP_INSN, JUMP_TABLE_DATA, \
|
||||
CODE_LABEL, BARRIER, NOTE)->volatil)
|
||||
(RTL_INSN_CHAIN_FLAG_CHECK ("INSN_DELETED_P", (RTX))->volatil)
|
||||
|
||||
/* 1 if RTX is a call to a const function. Built from ECF_CONST and
|
||||
TREE_READONLY. */
|
||||
@ -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.
|
||||
The mode field of the EXPR_LIST contains not a real machine mode
|
||||
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
|
||||
question. */
|
||||
@ -1012,12 +1015,12 @@ extern const char * const reg_note_name[];
|
||||
CLOBBER expressions document the registers explicitly clobbered
|
||||
by this CALL_INSN.
|
||||
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
|
||||
is made from `L' and the label-number printed in decimal.
|
||||
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
|
||||
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[];
|
||||
*/
|
||||
|
||||
/* Opaque data. */
|
||||
#define NOTE_DATA(INSN) RTL_CHECKC1 (INSN, 4, NOTE)
|
||||
#define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 4, NOTE)
|
||||
#define NOTE_DATA(INSN) RTL_CHECKC1 (INSN, 3, NOTE)
|
||||
#define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 3, NOTE)
|
||||
#define SET_INSN_DELETED(INSN) set_insn_deleted (INSN);
|
||||
#define NOTE_BLOCK(INSN) XCTREE (INSN, 4, NOTE)
|
||||
#define NOTE_EH_HANDLER(INSN) XCINT (INSN, 4, NOTE)
|
||||
#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 4, NOTE)
|
||||
#define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 4, NOTE)
|
||||
#define NOTE_CFI(INSN) XCCFI (INSN, 4, NOTE)
|
||||
#define NOTE_LABEL_NUMBER(INSN) XCINT (INSN, 4, NOTE)
|
||||
#define NOTE_BLOCK(INSN) XCTREE (INSN, 3, NOTE)
|
||||
#define NOTE_EH_HANDLER(INSN) XCINT (INSN, 3, NOTE)
|
||||
#define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 3, NOTE)
|
||||
#define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 3, NOTE)
|
||||
#define NOTE_CFI(INSN) XCCFI (INSN, 3, NOTE)
|
||||
#define NOTE_LABEL_NUMBER(INSN) XCINT (INSN, 3, NOTE)
|
||||
|
||||
/* In a NOTE that is a line number, this is the line number.
|
||||
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. */
|
||||
#define NOTE_INSN_BASIC_BLOCK_P(INSN) \
|
||||
@ -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
|
||||
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
|
||||
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
|
||||
bits. This field indicates whether the label is an alternate
|
||||
@ -1180,12 +1183,12 @@ enum label_kind
|
||||
/* 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
|
||||
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
|
||||
goes through all the LABEL_REFs that jump to that label. The chain
|
||||
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
|
||||
be used on RHS. Use SET_REGNO to change the value. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user