diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-01-29 13:14:47 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-01-29 13:14:47 +0100 |
commit | c23cd1d60fad597684f39e56134ff918a9bab466 (patch) | |
tree | 099818190b187b032b4dfe2e1e0061d89697cfca /gcc/df-core.c | |
parent | 38bc76da3d0f12058f0fba2ee1d3dff17abb2dc7 (diff) | |
download | gcc-c23cd1d60fad597684f39e56134ff918a9bab466.zip gcc-c23cd1d60fad597684f39e56134ff918a9bab466.tar.gz gcc-c23cd1d60fad597684f39e56134ff918a9bab466.tar.bz2 |
re PR rtl-optimization/42889 ("-fcompare-debug failure (length)" with "-O1 -fgcse")
PR rtl-optimization/42889
* df.h (df_set_bb_dirty_nonlr): New prototype.
* df-core.c (df_set_bb_dirty_nonlr): New function.
* df-scan.c (df_insn_rescan): Call it instead of
df_set_bb_dirty for DEBUG_INSNs.
* gcc.dg/pr42889.c: New test.
From-SVN: r156344
Diffstat (limited to 'gcc/df-core.c')
-rw-r--r-- | gcc/df-core.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/df-core.c b/gcc/df-core.c index 5ec802d..cee00b9 100644 --- a/gcc/df-core.c +++ b/gcc/df-core.c @@ -1354,6 +1354,30 @@ df_set_bb_dirty (basic_block bb) } +/* Mark BB as needing it's transfer functions as being out of + date, except for LR problem. Used when analyzing DEBUG_INSNs, + as LR problem can trigger DCE, and DEBUG_INSNs shouldn't ever + shorten or enlarge lifetime of regs. */ + +void +df_set_bb_dirty_nonlr (basic_block bb) +{ + if (df) + { + int p; + for (p = 1; p < df->num_problems_defined; p++) + { + struct dataflow *dflow = df->problems_in_order[p]; + if (dflow == df_lr) + continue; + if (dflow->out_of_date_transfer_functions) + bitmap_set_bit (dflow->out_of_date_transfer_functions, bb->index); + dflow->solutions_dirty = true; + } + } +} + + /* Clear the dirty bits. This is called from places that delete blocks. */ static void |