diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-05-13 21:13:47 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-05-13 21:13:47 +0000 |
commit | a3426c4cd1aa33f95043869f8b3b23357b929c3e (patch) | |
tree | 0572802e1e05e433b41457699177ccc9b910db73 /gcc/tree.h | |
parent | d70eda17cf5bc22395d4332ced2b13b2606d66e2 (diff) | |
download | gcc-a3426c4cd1aa33f95043869f8b3b23357b929c3e.tar.gz |
* Makefile.in (HOST_RTL): Add $(HOST_PREFIX)bitmap.o.
(rtl.o, emit-rtl.o): Add dependency on bitmap.h.
($(HOST_PREFIX_1)rtl.o): Likewise.
($(HOST_PREFIX_1)bitmap.o): New host object.
* emit-rtl.c (toplevel): Include bitmap.h.
(gen_rtx): Handle 't' and 'b' nodes.
* print-rtl.c (print_rtx): Handle printing NOTE_INSN_LIVE notes.
Print block number for block begin/end notes. Print 't' type
nodes as a pointer. Know that the 3rd argument of live range
start/stop notes is really a range_info rtx. If type is 'b', print
out argument as a bitmap.
* rtl.c: Include bitmap.c.
(copy_rtx): Copy tree nodes as is. Copy bitmaps if type is 'b'.
(note_insn_name): Add NOTE_INSN_RANGE_{START,END}, NOTE_INSN_LIVE.
* rtl.def (RANGE_LIVE): New node to hold live information while we
recalculate the basic blocks.
(RANGE_REG, RANGE_INFO): New rtl types for live range splitting.
(RANGE_VAR): New node, to hold information saved in symbol node for New
communicating live range information to the debug output functions.
* rtl.h (rtunion_def): Add rttree and rtbit fields.
(XBITMAP, XTREE): New accessor macros.
(NOTE_LIVE_INFO): Overload NOTE_SOURCE_FILE for NOTE_INSN_LIVE notes.
(NOTE_RANGE_INFO): Similarly for NOTE_INSN_RANGE_{START,END} notes.
(NOTE_BLOCK_LIVE_RANGE_BLOCK): Define.
(NOTE_INSN_RANGE_START, NOTE_INSN_RANGE_END, NOTE_INSN_LIVE): New notes.
(RANGE_LIVE_{BITMAP,ORIG_BLOCK}): New accessor macros.
(RANGE_REG_{SYMBOL,BLOCK}_NODE, RANGE_VAR_*): New accessor macros.
(RANGE_INFO_*): Likewise.
* sched.c (sched_analyze): Keep live range start/stop notes.
(unlink_other_notes): Likewise.
* haifa-sched.c (sched_analyze): Keep live range start/stop notes.
(unlink_other_notes): Likewise.
* tree.h (BLOCK_LIVE_RANGE_{START,END,VAR_FLAG}): New accessor macros.
(BLOCK_LIVE_RANGE_FLAG): Likewise.
(DECL_LIVE_RANGE_RTL): Likewise.
(struct tree_block): Add live_range_flag, live_range_var_flag,
live_range_start and live_range_end.
(struct tree_decl): Add live_range_rtl field.
* gengenrtl.c (type_from_format): Handle 'b' and 't'.
(accessor_from_format): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@19727 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/tree.h b/gcc/tree.h index 15b9a8af02e..7b7e4cf8215 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -671,6 +671,18 @@ struct tree_exp #define BLOCK_ABSTRACT_ORIGIN(NODE) ((NODE)->block.abstract_origin) #define BLOCK_ABSTRACT(NODE) ((NODE)->block.abstract_flag) #define BLOCK_END_NOTE(NODE) ((NODE)->block.end_note) +/* Nonzero means that this block has separate live range regions */ +#define BLOCK_LIVE_RANGE_FLAG(NOTE) ((NOTE)->block.live_range_flag) + +/* Nonzero means that this block has a variable declared in it + that is split into separate live ranges. */ +#define BLOCK_LIVE_RANGE_VAR_FLAG(NOTE) ((NOTE)->block.live_range_var_flag) + +/* Index for marking the start of the block for live ranges. */ +#define BLOCK_LIVE_RANGE_START(NOTE) ((NOTE)->block.live_range_start) + +/* Index for marking the end of the block for live ranges. */ +#define BLOCK_LIVE_RANGE_END(NOTE) ((NOTE)->block.live_range_end) /* Nonzero means that this block is prepared to handle exceptions listed in the BLOCK_VARS slot. */ @@ -682,6 +694,8 @@ struct tree_block unsigned handler_block_flag : 1; unsigned abstract_flag : 1; + unsigned live_range_flag : 1; + unsigned live_range_var_flag : 1; union tree_node *vars; union tree_node *type_tags; @@ -689,6 +703,8 @@ struct tree_block union tree_node *supercontext; union tree_node *abstract_origin; struct rtx_def *end_note; + int live_range_start; + int live_range_end; }; /* Define fields and accessors for nodes representing data types. */ @@ -971,6 +987,9 @@ struct tree_type to the variable's data type, while the mode of DECL_RTL is the mode actually used to contain the data. */ #define DECL_RTL(NODE) ((NODE)->decl.rtl) +/* Holds an INSN_LIST of all of the live ranges in which the variable + has been moved to a possibly different register. */ +#define DECL_LIVE_RANGE_RTL(NODE) ((NODE)->decl.live_range_rtl) /* For PARM_DECL, holds an RTL for the stack slot or register where the data was actually passed. */ #define DECL_INCOMING_RTL(NODE) ((NODE)->decl.saved_insns.r) @@ -1191,6 +1210,7 @@ struct tree_decl union tree_node *machine_attributes; struct rtx_def *rtl; /* acts as link to register transfer language (rtl) info */ + struct rtx_def *live_range_rtl; /* For FUNCTION_DECLs: points to insn that constitutes its definition on the permanent obstack. For FIELD_DECL, this is DECL_FIELD_SIZE. */ union { |