diff options
-rw-r--r-- | gcc/ChangeLog | 25 | ||||
-rw-r--r-- | gcc/caller-save.c | 4 | ||||
-rw-r--r-- | gcc/combine.c | 7 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 2 | ||||
-rw-r--r-- | gcc/gengtype.c | 20 | ||||
-rw-r--r-- | gcc/ira.c | 2 | ||||
-rw-r--r-- | gcc/print-rtl.c | 15 | ||||
-rw-r--r-- | gcc/rtl.def | 30 | ||||
-rw-r--r-- | gcc/rtl.h | 73 |
9 files changed, 105 insertions, 73 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 217579e..33727d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,30 @@ 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.h (rtx_def): Add orignal_regno to u2. (ORIGINAL_REGNO): Use it instead of field 1. diff --git a/gcc/caller-save.c b/gcc/caller-save.c index 59917a8..20421c9 100644 --- a/gcc/caller-save.c +++ b/gcc/caller-save.c @@ -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++) diff --git a/gcc/combine.c b/gcc/combine.c index a2f42c5..061b4d55 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -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), diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 1eacb8f..ab44aba 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -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); } diff --git a/gcc/gengtype.c b/gcc/gengtype.c index dca930f..5fdb65f 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -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]); diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index cbffada..9d90325 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -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. */ diff --git a/gcc/rtl.def b/gcc/rtl.def index 19a0fa1..f192412 100644 --- a/gcc/rtl.def +++ b/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. @@ -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. */ |