aboutsummaryrefslogtreecommitdiff
path: root/gcc/df-core.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-01-29 13:14:47 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-01-29 13:14:47 +0100
commitc23cd1d60fad597684f39e56134ff918a9bab466 (patch)
tree099818190b187b032b4dfe2e1e0061d89697cfca /gcc/df-core.c
parent38bc76da3d0f12058f0fba2ee1d3dff17abb2dc7 (diff)
downloadgcc-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.c24
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