diff options
author | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-27 22:23:32 +0000 |
---|---|---|
committer | zadeck <zadeck@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-27 22:23:32 +0000 |
commit | fcf2ad9fd02a1c26242f14c379df42a4d774430f (patch) | |
tree | abaa3980317c102c364cc5e69f9d31a4c7517c10 /gcc/df-core.c | |
parent | 52fdc46e80b7c8c4cc2c0fcf9ea807a2c578ccb0 (diff) | |
download | gcc-fcf2ad9fd02a1c26242f14c379df42a4d774430f.tar.gz |
2006-01-27 Daniel Berlin <dberlin@dberlin.org>
Kenneth Zadeck <zadeck@naturalbridge.com>
PR rtl-optimization/24762
* doc/tm.texi: Added TARGET_EXTRA_LIVE_ON_ENTRY.
* targhooks.c (hook_void_bitmap): New hook prototype.
* targhoohs.h (hook_void_bitmap): Ditto.
* bitmap.h (bitmap_head_def): Moved to coretypes.h.
* coretypes.h (bitmap_head_def): Moved from bitmap.h.
* target.h (live_on_entry): New function pointer.
* df-scan.c (df_all_hard_regs): Removed.
(df_scan_dump, df_hard_reg_init): Removed df_all_hard_regs.
(df_scan_free_internal): Added df->entry_block_defs.
(df_scan_alloc): Ditto.
(df_scan_dump): Ditto.
(df_uses_record): Plumbed flag field properly thru calls.
Record EH_RETURN_DATA_REGNO in eh blocks unconditionally.
This part fixes PR24762.
(df_bb_refs_record): Added code to make the frame and arg
pointers live in EH blocks.
(df_refs_record): Added call to df_record_entry_block_defs.
(df_record_entry_block_defs): New function.
* df-core.c: Added comments to describe new artifical defs.
* df.h (DF_REF_DIES_AFTER_THIS_USE): New flag in enum df_ref_flags.
(entry_block_defs): New field in struct df.
(df_all_hard_regs): Deleted.
* target-def.h: Added TARGET_EXTRA_LIVE_ON_ENTRY.
* df-problems.c (df_ru_bb_local_compute_process_def):
Added code to handle artifical defs in the entry to a function.
(df_ru_bb_local_compute): Ditto.
(df_rd_bb_local_compute_process_def): Ditto.
(df_rd_bb_local_compute): Ditto.
(df_lr_bb_local_compute): Ditto.
(df_ur_bb_local_compute): Ditto.
(df_urec_bb_local_compute): Ditto.
(df_chain_create_bb): Ditto.
(df_ur_local_finalize): Removed entry.
(df_urec_init): Ditto.
(df_urec_local_finalize): Ditto.
(df_ri_bb_compute): Added detection of last use of pseudos.
* Makefile.in (df-scan.o): Updated dependencies.
* config/mips/mips-protos.h (mips_set_live_on_entry): Added.
* config/mips/mips.c (mips_set_live_on_entry): Added.
* config/mips/mips.c (TARGET_EXTRA_LIVE_ON_ENTRY): Added value
for target hook.
* dce.c (marked_insn_p): Added code to handle artifical defs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110312 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/df-core.c')
-rw-r--r-- | gcc/df-core.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/gcc/df-core.c b/gcc/df-core.c index a0ed23caa16..416406b68f1 100644 --- a/gcc/df-core.c +++ b/gcc/df-core.c @@ -205,18 +205,23 @@ There are 4 ways to obtain access to refs: defs and uses are only there if DF_HARD_REGS was specified when the df instance was created. - Artificial defs and uses occur at the beginning blocks that are the - destination of eh edges. The defs come from the registers - specified in EH_RETURN_DATA_REGNO and the uses come from the - registers specified in ED_USES. Logically these defs and uses - should really occur along the eh edge, but there is no convienent - way to do this. Artificial edges that occur at the beginning of - the block have the DF_REF_AT_TOP flag set. - - Artificial uses also occur at the end of all blocks. These arise - from the hard registers that are always live, such as the stack - register and are put there to keep the code from forgetting about - them. + Artificial defs and uses occur both at the beginning and ends of blocks. + + For blocks that area at the destination of eh edges, the + artificial uses and defs occur at the beginning. The defs relate + to the registers specified in EH_RETURN_DATA_REGNO and the uses + relate to the registers specified in ED_USES. Logically these + defs and uses should really occur along the eh edge, but there is + no convenient way to do this. Artificial edges that occur at the + beginning of the block have the DF_REF_AT_TOP flag set. + + Artificial uses occur at the end of all blocks. These arise from + the hard registers that are always live, such as the stack + register and are put there to keep the code from forgetting about + them. + + Artifical defs occur at the end of the entry block. These arise + from registers that are live at entry to the function. 2) All of the uses and defs associated with each pseudo or hard register are linked in a bidirectional chain. These are called |