aboutsummaryrefslogtreecommitdiff
path: root/gcc/ddg.c
diff options
context:
space:
mode:
authorKenneth Zadeck <zadeck@naturalbridge.com>2008-01-20 01:48:25 +0000
committerKenneth Zadeck <zadeck@gcc.gnu.org>2008-01-20 01:48:25 +0000
commit2b49e1a09d063e655ae02b6ab788cefe58b0d723 (patch)
tree586d89d9ceda6355a6a8d5fafc831147afd78ca0 /gcc/ddg.c
parent1828e8e9bfa9526684899e422be914402b3ba960 (diff)
downloadgcc-2b49e1a09d063e655ae02b6ab788cefe58b0d723.zip
gcc-2b49e1a09d063e655ae02b6ab788cefe58b0d723.tar.gz
gcc-2b49e1a09d063e655ae02b6ab788cefe58b0d723.tar.bz2
re PR tree-optimization/26854 (Inordinate compile times on large routines)
2008-01-19 Kenneth Zadeck <zadeck@naturalbridge.com> PR rtl-optimization/26854 PR rtl-optimization/34400 * ddg.c (create_ddg_dep_from_intra_loop_link): Do not use DF_RD->gen. * df.h (df_changeable_flags.DF_RD_NO_TRIM): New. (df_rd_bb_info.expanded_lr_out): New. * loop_invariant.c (find_defs): Added 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): Added 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): Add code to do nothing with fake edges and code to no apply invalidate_by_call sets if the sets are being trimmed. (df_lr_local_finalize): Renamed to df_lr_finalize. (df_live_local_finalize): Renamed to df_live_finalize. From-SVN: r131670
Diffstat (limited to 'gcc/ddg.c')
-rw-r--r--gcc/ddg.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/ddg.c b/gcc/ddg.c
index 14b1874..c67b6c2 100644
--- a/gcc/ddg.c
+++ b/gcc/ddg.c
@@ -184,12 +184,13 @@ create_ddg_dep_from_intra_loop_link (ddg_ptr g, ddg_node_ptr src_node,
{
int regno = REGNO (SET_DEST (set));
struct df_ref *first_def;
- struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb);
+ struct df_ref *last_def;
first_def = df_bb_regno_first_def_find (g->bb, regno);
gcc_assert (first_def);
- if (bitmap_bit_p (bb_info->gen, first_def->id))
+ last_def = df_bb_regno_last_def_find (g->bb, regno);
+ if (first_def == last_def)
return;
}
}