diff options
-rw-r--r-- | gcc/regrename.c | 16 | ||||
-rw-r--r-- | gcc/regrename.h | 2 |
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c index 669a6ea..ebe74c5 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -695,10 +695,12 @@ merge_chains (du_head_p c1, du_head_p c2) c1->cannot_rename |= c2->cannot_rename; } -/* Analyze the current function and build chains for renaming. */ +/* Analyze the current function and build chains for renaming. + If INCLUDE_ALL_BLOCKS_P is set to true, process all blocks, + ignoring BB_DISABLE_SCHEDULE. The default value is true. */ void -regrename_analyze (bitmap bb_mask) +regrename_analyze (bitmap bb_mask, bool include_all_block_p) { class bb_rename_info *rename_info; int i; @@ -748,6 +750,14 @@ regrename_analyze (bitmap bb_mask) if (dump_file) fprintf (dump_file, "\nprocessing block %d:\n", bb1->index); + if (!include_all_block_p && (bb1->flags & BB_DISABLE_SCHEDULE) != 0) + { + if (dump_file) + fprintf (dump_file, "avoid disrupting the sms schedule of bb %d\n", + bb1->index); + continue; + } + init_rename_info (this_info, bb1); success = build_def_use (bb1); @@ -1962,7 +1972,7 @@ regrename_optimize (void) regrename_init (false); - regrename_analyze (NULL); + regrename_analyze (NULL, false); rename_chains (); diff --git a/gcc/regrename.h b/gcc/regrename.h index f2af04b..10a3aa1 100644 --- a/gcc/regrename.h +++ b/gcc/regrename.h @@ -100,7 +100,7 @@ extern vec<insn_rr_info> insn_rr; extern void regrename_init (bool); extern void regrename_finish (void); -extern void regrename_analyze (bitmap); +extern void regrename_analyze (bitmap, bool = true); extern du_head_p regrename_chain_from_id (unsigned int); extern int find_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *, int, bool); |