aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl.h
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-05-12 09:26:15 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-05-12 09:26:15 -0700
commitbe1bb652637d5d8785993a4cd197d989dc4b5260 (patch)
treed0c01aedfa0c100dbc8cf6e908311acdea960127 /gcc/rtl.h
parentfb0f12c9326308579f89b0961681ffdb85288228 (diff)
downloadgcc-be1bb652637d5d8785993a4cd197d989dc4b5260.zip
gcc-be1bb652637d5d8785993a4cd197d989dc4b5260.tar.gz
gcc-be1bb652637d5d8785993a4cd197d989dc4b5260.tar.bz2
Makefile.in (final.o): Depend on BASIC_BLOCK_H.
* Makefile.in (final.o): Depend on BASIC_BLOCK_H. * final.c (final_end_function): Use app_disable. Rearrange note handling into a switch. Emit deleted labels. (output_asm_label): Generate label strings for deleted labels. * flow.c (tail_recursion_label_list): New. (find_basic_blocks_1): Set label_value_list directly. Collect list of tail recursion labels from call_placeholders. Don't add deleted labels to the label value list. (cleanup_cfg): Use free_EXPR_LIST_list. (flow_delete_insn_chain): Turn non-removable labels into notes. (flow_delete_block): Don't disable deleting the block because of a non-removable label. (tail_recursion_label_p): New. (merge_blocks_move_predecessor_nojumps): Don't disable the merge because of a label. (merge_blocks_move_successor_nojumps): Likewise. Also move a jump table. (merge_blocks): Disable a merge because of tail recursion labels. * ifcvt.c (merge_if_block): Don't disable a merge because of a label. Use a more accurate measure of not merging the join block. (find_if_block): Don't disable conversion because of a label. (find_if_case_1, find_if_case_2): Likewise. * jump.c (duplicate_loop_exit_test): Preserve the kind of list element when copying. (squeeze_notes): Also leave EH notes. (mark_jump_label): Ignore deleted labels. Use an INSN_LIST for REG_LABEL notes. (delete_insn): Preserve LABEL_NAME in NOTE_SOURCE_FILE when deleting a label. * print-rtl.c (print_rtx): Print NOTE_SOURCE_FILE for NOTE_INSN_DELETED_LABEL. Print `[# deleted]' for a label_ref referring to a deleted label. Convert tail handling to a switch. * rtl.def (CODE_LABEL): Rearrange elements to be compatible with NOTE for NOTE_INSN_DELETED_LABEL. (NOTE): Fix commentary. * rtl.h (REG_LABEL): Update commentary wrt INSN_LIST. (REG_CC_SETTER, REG_CC_USER, REG_LIBCALL): Likewise. (CODE_LABEL_NUMBER, LABEL_NAME): Update index. (LABEL_NUSES, LABEL_REFS): Likewise. * unroll.c (copy_loop_body): Don't copy NOTE_INSN_DELETED_LABEL. From-SVN: r33876
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r--gcc/rtl.h21
1 files changed, 12 insertions, 9 deletions
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 815cb0d..ccd143e 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -417,7 +417,7 @@ enum reg_note
appear on an insn which copies a register parameter to a pseudo-register,
if there is a memory address which could be used to hold that
pseudo-register throughout the function. */
- REG_EQUIV,
+ REG_EQUIV,
/* Like REG_EQUIV except that the destination is only momentarily equal
to the specified rtx. Therefore, it cannot be used for substitution;
@@ -437,7 +437,8 @@ enum reg_note
REG_RETVAL,
/* The inverse of REG_RETVAL: it goes on the first insn of the library call
- and points at the one that has the REG_RETVAL. */
+ and points at the one that has the REG_RETVAL. This note is also an
+ INSN_LIST. */
REG_LIBCALL,
/* The register is always nonnegative during the containing loop. This is
@@ -459,11 +460,13 @@ enum reg_note
we permit putting a cc0-setting insn in the delay slot of a branch as
long as only one copy of the insn exists. In that case, these notes
point from one to the other to allow code generation to determine what
- any require information and to properly update CC_STATUS. */
+ any require information and to properly update CC_STATUS. These notes
+ are INSN_LISTs. */
REG_CC_SETTER, REG_CC_USER,
/* Points to a CODE_LABEL. Used by non-JUMP_INSNs to say that the
- CODE_LABEL contained in the REG_LABEL note is used by the insn. */
+ CODE_LABEL contained in the REG_LABEL note is used by the insn.
+ This note is an INSN_LIST. */
REG_LABEL,
/* REG_DEP_ANTI and REG_DEP_OUTPUT are used in LOG_LINKS to represent
@@ -544,7 +547,7 @@ extern const char * const reg_note_name[];
/* 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, 3)
+#define CODE_LABEL_NUMBER(INSN) XINT(INSN, 5)
#define LINE_NUMBER NOTE
@@ -664,11 +667,11 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
/* The name of a label, in case it corresponds to an explicit label
in the input source code. */
-#define LABEL_NAME(RTX) XCSTR(RTX, 4, 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, 3, CODE_LABEL)
/* Associate a name with a CODE_LABEL. */
#define LABEL_ALTERNATE_NAME(RTX) XCSTR(RTX, 7, CODE_LABEL)
@@ -687,8 +690,8 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
/* Once basic blocks are found in flow.c,
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, 6, CODE_LABEL)
+ The chain eventually winds up at the CODE_LABEL: it is circular. */
+#define LABEL_REFS(LABEL) XCEXP(LABEL, 4, CODE_LABEL)
/* This is the field in the LABEL_REF through which the circular chain
of references to a particular label is linked.