aboutsummaryrefslogtreecommitdiff
path: root/gcc/regstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/regstat.c')
-rw-r--r--gcc/regstat.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/gcc/regstat.c b/gcc/regstat.c
index 9f8e41f35af..7b7790f807f 100644
--- a/gcc/regstat.c
+++ b/gcc/regstat.c
@@ -62,11 +62,27 @@ regstat_init_n_sets_and_refs (void)
regstat_n_sets_and_refs = xmalloc (max_regno * sizeof (struct regstat_n_sets_and_refs_t));
- for (i = 0; i < max_regno; i++)
- {
- SET_REG_N_SETS (i, DF_REG_DEF_COUNT (i));
- SET_REG_N_REFS (i, DF_REG_USE_COUNT (i) + REG_N_SETS (i));
- }
+ if (MAY_HAVE_DEBUG_INSNS)
+ for (i = 0; i < max_regno; i++)
+ {
+ int use_count;
+ struct df_ref *use;
+
+ use_count = DF_REG_USE_COUNT (i);
+ for (use = DF_REG_USE_CHAIN (i); use; use = DF_REF_NEXT_REG (use))
+ if (DF_REF_INSN (use) && DEBUG_INSN_P (DF_REF_INSN (use)))
+ use_count--;
+
+
+ SET_REG_N_SETS (i, DF_REG_DEF_COUNT (i));
+ SET_REG_N_REFS (i, use_count + REG_N_SETS (i));
+ }
+ else
+ for (i = 0; i < max_regno; i++)
+ {
+ SET_REG_N_SETS (i, DF_REG_DEF_COUNT (i));
+ SET_REG_N_REFS (i, DF_REG_USE_COUNT (i) + REG_N_SETS (i));
+ }
timevar_pop (TV_REG_STATS);
}
@@ -150,7 +166,7 @@ regstat_bb_compute_ri (unsigned int bb_index,
struct df_mw_hardreg **mws_rec;
rtx link;
- if (!INSN_P (insn))
+ if (!INSN_P (insn) || DEBUG_INSN_P (insn))
continue;
/* Increment the live_length for all of the registers that