aboutsummaryrefslogtreecommitdiff
path: root/gcc/df.h
diff options
context:
space:
mode:
authorKenneth Zadeck <zadeck@naturalbridge.com>2008-01-22 13:57:01 +0000
committerKenneth Zadeck <zadeck@gcc.gnu.org>2008-01-22 13:57:01 +0000
commit963acd6f89ae458cfbddcba67bd0d7530a71feec (patch)
treeebfe2c3b0f60689e131c3a7a378e9b4a90660f8e /gcc/df.h
parent115e6e5572d2fe0fddf7ed3bba2fa692461e8a0a (diff)
downloadgcc-963acd6f89ae458cfbddcba67bd0d7530a71feec.zip
gcc-963acd6f89ae458cfbddcba67bd0d7530a71feec.tar.gz
gcc-963acd6f89ae458cfbddcba67bd0d7530a71feec.tar.bz2
re PR tree-optimization/26854 (Inordinate compile times on large routines)
2008-01-22 Kenneth Zadeck <zadeck@naturalbridge.com> PR rtl-optimization/26854 PR rtl-optimization/34400 PR rtl-optimization/34884 * ddg.c (create_ddg_dep_from_intra_loop_link): Use DF_RD->gen. * df.h (df_changeable_flags.DF_RD_NO_TRIM): Deleted (df_rd_bb_info.expanded_lr_out): Deleted * loop_invariant.c (find_defs): Deleted DF_RD_NO_TRIM flag. * loop_iv.c (iv_analysis_loop_init): Ditto. * df-problems.c (df_rd_free_bb_info, df_rd_alloc, df_rd_confluence_n, df_rd_bb_local_compute, df_rd_transfer_function, df_rd_free): Removed code to allocate, initialize or free expanded_lr_out. (df_rd_bb_local_compute_process_def): Restructured to make more understandable. (df_rd_confluence_n): Removed code to no apply invalidate_by_call sets if the sets are being trimmed. From-SVN: r131719
Diffstat (limited to 'gcc/df.h')
-rw-r--r--gcc/df.h49
1 files changed, 7 insertions, 42 deletions
diff --git a/gcc/df.h b/gcc/df.h
index e5c6870..8beadc9 100644
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -405,27 +405,20 @@ enum df_changeable_flags
DF_LR_RUN_DCE = 1 << 0, /* Run DCE. */
DF_NO_HARD_REGS = 1 << 1, /* Skip hard registers in RD and CHAIN Building. */
- /* Do not trim the solution using the LR result. This can make the
- solution take much longer and take more memory. This is
- necessary for the loop optimizations, but has a very small time
- and space penalty because the loop optimizations process only a
- single loop at a time. Any pass that looks at the entire
- function should not set this flag. */
- DF_RD_NO_TRIM = 1 << 2,
- DF_EQ_NOTES = 1 << 3, /* Build chains with uses present in EQUIV/EQUAL notes. */
- DF_NO_REGS_EVER_LIVE = 1 << 4, /* Do not compute the regs_ever_live. */
+ DF_EQ_NOTES = 1 << 2, /* Build chains with uses present in EQUIV/EQUAL notes. */
+ DF_NO_REGS_EVER_LIVE = 1 << 3, /* Do not compute the regs_ever_live. */
/* Cause df_insn_rescan df_notes_rescan and df_insn_delete, to
return immediately. This is used by passes that know how to update
the scanning them selves. */
- DF_NO_INSN_RESCAN = 1 << 5,
+ DF_NO_INSN_RESCAN = 1 << 4,
/* Cause df_insn_rescan df_notes_rescan and df_insn_delete, to
return after marking the insn for later processing. This allows all
rescans to be batched. */
- DF_DEFER_INSN_RESCAN = 1 << 6,
+ DF_DEFER_INSN_RESCAN = 1 << 5,
- DF_VERIFY_SCHEDULED = 1 << 7
+ DF_VERIFY_SCHEDULED = 1 << 6
};
/* Two of these structures are inline in df, one for the uses and one
@@ -719,37 +712,9 @@ struct df_rd_bb_info
/* Local sets to describe the basic blocks. */
bitmap kill;
bitmap sparse_kill;
+ bitmap gen; /* The set of defs generated in this block. */
- /* Expanded version of the DF_LT->out bitmap to match the positions
- of gen, in and out here. Only allocated if DF_RD_NO_TRIM is
- false. */
- bitmap expanded_lr_out;
-
- /* The set of defs generated in this block. This is not set unless
- the def reaches the end of the block. */
- bitmap gen;
-
- /* The results of the dataflow problem.
-
- If DF_RD_NO_TRIM is not set, these sets are SOMEWHAT trimmed by
- the output of the DF_LR problem. The out set is precisely
- trimmed during propagation which means that the result is also
- trimmed when the propagation terminates. The in set is not
- explicitly trimmed, because this is expensive (adding about 5% to
- the cost of a bootstrap). However since the out sets are trimmed
- and the in sets are built from the out of the pred, the in set is
- MOSTLY trimmed.
-
- The counter case happens at a branch where the variable V is in
- DF_LR->in the true branch but not the false branch. If V is
- defined before the branch, RD will propagate that into the
- DF_RD_in sets of both branches. When the block is processed, the
- DF_RD->out set will have V trimmed out of it but it will still be
- left in DF_RD->in.
-
- If this not a problem for the current optimizers since they were
- designed before any trimming was available. This can be fixed by
- checking the DF_LR->in set directly. */
+ /* The results of the dataflow problem. */
bitmap in; /* At the top of the block. */
bitmap out; /* At the bottom of the block. */
};