summaryrefslogtreecommitdiff
path: root/gcc/df.h
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2012-10-08 15:33:58 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2012-10-08 15:33:58 +0000
commit7b19209f2934c0ac28445ff2032747552a390f2f (patch)
treedc4fd0ce62886f374accbfc584455a9e48228637 /gcc/df.h
parent76cee070fd46483d818ffee61b7ec12be062afda (diff)
downloadgcc-7b19209f2934c0ac28445ff2032747552a390f2f.tar.gz
bitmap.h (bitmap_and_into): Update prototype.
* bitmap.h (bitmap_and_into): Update prototype. * bitmap.c (bitmap_and_into): Return true if the target bitmap changed, false otherwise. * df.h (df_dump_insn_problem_function): New function type. (struct df_problem): Add two functions, to dump just before and just after an insn. (DF_RD_PRUNE_DEAD_DEFS): New changable flag. (df_dump_insn_top, df_dump_insn_bottom): New prototypes. * df-core (df_dump_region): Use dump_bb. (df_dump_bb_problem_data): New function. (df_dump_top, df_dump_bottom): Rewrite using df_dump_bb_problem_data. (df_dump_insn_problem_data): New function. (df_dump_insn_top, df_dump_insn_bottom): New functions. * df-scan.c (problem_SCAN): Add NULL fields for new members. * df-problems.c (df_rd_local_compute): Ignore hard registers if DF_NO_HARD_REGS is in effect. (df_rd_transfer_function): If DF_RD_PRUNE_DEAD_DEFS is in effect, prune reaching defs using the LR problem. (df_rd_start_dump): Fix dumping of DEFs map. (df_rd_dump_defs_set): New function. (df_rd_top_dump, df_rd_bottom_dump): Use it. (problem_RD): Add NULL fields for new members. (problem_LR, problem_LIVE): Likewise. (df_chain_bb_dump): New function. (df_chain_top_dump): Dump only for artificial DEFs and USEs, using df_chain_bb_dump. (df_chain_bottom_dump): Likewise. (df_chain_insn_top_dump, df_chain_insn_bottom_dump): New functions. (problem_CHAIN): Add them as new members. (problem_WORD_LR, problem_NOTE): Add NULL fields for new members. (problem_MD): Likewise. * cfgrtl.c (rtl_dump_bb): Use df_dump_insn_top and df_dump_insn_bottom. (print_rtl_with_bb): Likewise. * dce.c (init_dce): Use DF_RD_PRUNE_DEAD_DEFS. * loop-invariant.c (find_defs): Likewise. * loop-iv.c (iv_analysis_loop_init): Likewise. * ree.c (find_and_remove_re): Likewise. * web.c (web_main): Likewise. From-SVN: r192213
Diffstat (limited to 'gcc/df.h')
-rw-r--r--gcc/df.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/df.h b/gcc/df.h
index e59ae126f2e..e7031d0bb2f 100644
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -239,6 +239,9 @@ typedef void (*df_dump_problem_function) (FILE *);
/* Function to dump top or bottom of basic block results to FILE. */
typedef void (*df_dump_bb_problem_function) (basic_block, FILE *);
+/* Function to dump before or after an insn to FILE. */
+typedef void (*df_dump_insn_problem_function) (const_rtx, FILE *);
+
/* Function to dump top or bottom of basic block results to FILE. */
typedef void (*df_verify_solution_start) (void);
@@ -268,6 +271,8 @@ struct df_problem {
df_dump_problem_function dump_start_fun;
df_dump_bb_problem_function dump_top_fun;
df_dump_bb_problem_function dump_bottom_fun;
+ df_dump_insn_problem_function dump_insn_top_fun;
+ df_dump_insn_problem_function dump_insn_bottom_fun;
df_verify_solution_start verify_start_fun;
df_verify_solution_end verify_end_fun;
struct df_problem *dependent_problem;
@@ -463,7 +468,12 @@ enum df_changeable_flags
rescans to be batched. */
DF_DEFER_INSN_RESCAN = 1 << 5,
- DF_VERIFY_SCHEDULED = 1 << 6
+ /* Compute the reaching defs problem as "live and reaching defs" (LR&RD).
+ A DEF is reaching and live at insn I if DEF reaches I and REGNO(DEF)
+ is in LR_IN of the basic block containing I. */
+ DF_RD_PRUNE_DEAD_DEFS = 1 << 6,
+
+ DF_VERIFY_SCHEDULED = 1 << 7
};
/* Two of these structures are inline in df, one for the uses and one
@@ -773,7 +783,9 @@ struct df_scan_bb_info
/* Reaching definitions. All bitmaps are indexed by the id field of
- the ref except sparse_kill which is indexed by regno. */
+ the ref except sparse_kill which is indexed by regno. For the
+ LR&RD problem, the kill set is not complete: It does not contain
+ DEFs killed because the set register has died in the LR set. */
struct df_rd_bb_info
{
/* Local sets to describe the basic blocks. */
@@ -918,6 +930,8 @@ extern void df_dump_region (FILE *);
extern void df_dump_start (FILE *);
extern void df_dump_top (basic_block, FILE *);
extern void df_dump_bottom (basic_block, FILE *);
+extern void df_dump_insn_top (const_rtx, FILE *);
+extern void df_dump_insn_bottom (const_rtx, FILE *);
extern void df_refs_chain_dump (df_ref *, bool, FILE *);
extern void df_regs_chain_dump (df_ref, FILE *);
extern void df_insn_debug (rtx, bool, FILE *);