diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-10-09 19:47:18 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-10-09 19:47:18 +0000 |
commit | 2d9b9dfea029c646d489d11eb327a0e72d31051c (patch) | |
tree | 979c66605d3637bf2f02aa8e816c05810e05aa54 /gcc/basic-block.h | |
parent | 053352b4aa2b1d19c92c926d174856bbb809ae7b (diff) | |
download | gcc-2d9b9dfea029c646d489d11eb327a0e72d31051c.tar.gz |
* Makefile.in (flow.o): Depend on TREE_H.
* basic-block.h (REG_SET_EQUAL_P): New.
(XOR_REG_SET): New.
(n_edges): Declare.
(free_regset_vector): Remove declaration.
(flow_delete_insn_chain): Declare.
(enum update_life_extent): New.
(update_life_info, count_or_remove_death_notes): Declare.
* combine.c (distribute_notes) [REG_DEAD]: Stop search at bb->head.
Verify register live at bb->global_live_at_start before adding USE.
* flow.c (HAVE_epilogue, HAVE_prologue): Provide default.
(CLEAN_ALLOCA): New.
(n_edges): New.
(PROP_*): New flags.
(find_basic_blocks_1): Use alloc_EXPR_LIST.
(clear_edges): Zero n_edges.
(make_edge): Increment n_edges.
(split_edge): Don't allocate bb->local_set. Increment n_edges.
(flow_delete_insn_chain): Export.
(delete_block): Decrement n_edges.
(merge_blocks_nomove): Likewise.
(life_analysis): Give life_analysis_1 PROP flags.
(verify_wide_reg_1, verify_wide_reg): New.
(verify_local_live_at_start): New.
(update_life_info): Rewrite to call into propogate_block.
(mark_reg): New.
(mark_regs_live_at_end): After reload, if epilogue as rtl,
always mark stack pointer. Conditionally mark PIC register.
After reload, mark call-saved registers, return regsiters.
(life_analysis_1): Accept PROP flags not remove_dead_code.
Call mark_regs_live_at_end before zeroing regs_ever_live.
Use calculate_global_regs_live. Copy global_live_at_end before
calling final propagate_block. Zero reg_next_use on exit.
(calculate_global_regs_live): New.
(allocate_bb_life_data): Don't allocate bb->local_set.
(init_regset_vector, free_regset_vector): Remove.
(propagate_block): Accept FLAGS not FINAL or REMOVE_DEAD_CODE.
Test flags before every operation. Warn if prologue/epilogue insn
would have been deleted.
(mark_set_regs, mark_set_1): Accept and use FLAGS.
Use alloc_EXPR_LIST.
(mark_used_regs): Accept and use FLAGS, not FINAL.
Remove special handling for RETURN.
(try_pre_increment): Use alloc_EXPR_LIST.
(dump_flow_info): Dump n_edges.
(unlink_insn_chain, split_hard_reg_notes): Remove.
(maybe_add_dead_note, maybe_add_dead_note_use): Remove.
(find_insn_with_note, new_insn_dead_notes): Remove.
(update_n_sets, sets_reg_or_subreg_1, sets_reg_or_subreg): Remove.
(maybe_remove_dead_notes, prepend_reg_notes): Remove.
(replace_insns): Remove.
(count_or_remove_death_notes): New.
(verify_flow_info): Abort on error after all checks.
(remove_edge): Decrement n_edges.
(remove_fake_edges): Tweek format.
* haifa-sched.c (schedule_insns): Use split_all_insns.
* output.h (update_life_info): Remove declaration.
* recog.c (split_all_insns): From the corpse of split_block_insns,
do the whole function block by block. Use update_life_info.
(recog_last_allowed_insn): New.
(recog_next_insn): Mind it.
(peephole2_optimize): Set it. Walk backwards through blocks.
Use update_life_info.
* rtl.h (update_flow_info, replace_insns): Remove declarations.
(split_all_insns): Declare.
* toplev.c (rest_of_compilation): Thread prologue before flow2.
Use split_all_insns.
* i386.md (or -1 peep2s): Disable.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29877 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/basic-block.h')
-rw-r--r-- | gcc/basic-block.h | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 881085b0d07..ca63f73e25e 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -31,6 +31,9 @@ typedef bitmap regset; /* Head of register set linked list. */ /* Copy a register set to another register set. */ #define COPY_REG_SET(TO, FROM) bitmap_copy (TO, FROM) +/* Compare two register sets. */ +#define REG_SET_EQUAL_P(A, B) bitmap_equal_p (A, B) + /* `and' a register set with a second register set. */ #define AND_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_AND) @@ -41,6 +44,9 @@ typedef bitmap regset; /* Head of register set linked list. */ /* Inclusive or a register set with a second register set. */ #define IOR_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_IOR) +/* Exclusive or a register set with a second register set. */ +#define XOR_REG_SET(TO, FROM) bitmap_operation (TO, TO, FROM, BITMAP_XOR) + /* Or into TO the register set FROM1 `and'ed with the complement of FROM2. */ #define IOR_AND_COMPL_REG_SET(TO, FROM1, FROM2) \ bitmap_ior_and_compl (TO, FROM1, FROM2) @@ -153,6 +159,10 @@ typedef struct basic_block_def { extern int n_basic_blocks; +/* Number of edges in the current function. */ + +extern int n_edges; + /* Index by basic block number, get basic block struct info. */ extern varray_type basic_block_info; @@ -229,9 +239,6 @@ extern struct basic_block_def entry_exit_blocks[2]; #define ENTRY_BLOCK_PTR (&entry_exit_blocks[0]) #define EXIT_BLOCK_PTR (&entry_exit_blocks[1]) -/* from flow.c */ -extern void free_regset_vector PROTO ((regset *, int nelts)); - extern varray_type basic_block_for_insn; #define BLOCK_FOR_INSN(INSN) VARRAY_BB (basic_block_for_insn, INSN_UID (INSN)) #define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0) @@ -249,6 +256,7 @@ extern void insert_insn_on_edge PROTO ((rtx, edge)); extern void commit_edge_insertions PROTO ((void)); extern void remove_fake_edges PROTO ((void)); extern void add_noreturn_fake_exit_edges PROTO ((void)); +extern void flow_delete_insn_chain PROTO((rtx, rtx)); /* This structure maintains an edge list vector. */ struct edge_list @@ -291,6 +299,15 @@ extern void compute_dominators PROTO ((sbitmap *, sbitmap *, extern void compute_flow_dominators PROTO ((sbitmap *, sbitmap *)); extern void compute_immediate_dominators PROTO ((int *, sbitmap *)); +enum update_life_extent +{ + UPDATE_LIFE_GLOBAL = 0, + UPDATE_LIFE_LOCAL = 1 +}; + +extern void update_life_info PROTO ((sbitmap, enum update_life_extent)); +extern int count_or_remove_death_notes PROTO ((sbitmap, int)); + /* In lcm.c */ extern void pre_lcm PROTO ((int, int, int_list_ptr *, int_list_ptr *, |