aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2015-06-03 20:40:23 +0200
committerChristophe Lyon <christophe.lyon@linaro.org>2015-06-11 15:06:56 +0200
commit5eebafbbee551edc168fb856e9300c246941a5ac (patch)
tree7c4e0c1cd9a805be6dd98d62ff880c579c4bef25
parent011d947a15a6438b9342068bdff32cc0899f31bc (diff)
2015-06-03 Christophe Lyon <christophe.lyon@linaro.org>
gcc/ Backport from trunk r222260. 2015-04-21 Thomas Preud'homme <thomas.preudhomme@arm.com> * df-core.c (df_finish_pass): Iterate over df->problems_by_index[] and use df_remove_problem rather than manually removing problems, leaving holes in df->problems_in_order[]. Change-Id: Iaf079ee6e0b7875dfd44321bea65cbb6c56c701b
-rw-r--r--gcc/df-core.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/gcc/df-core.c b/gcc/df-core.c
index 82f136436bb..67040a10d39 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -642,7 +642,6 @@ void
df_finish_pass (bool verify ATTRIBUTE_UNUSED)
{
int i;
- int removed = 0;
#ifdef ENABLE_DF_CHECKING
int saved_flags;
@@ -658,21 +657,15 @@ df_finish_pass (bool verify ATTRIBUTE_UNUSED)
saved_flags = df->changeable_flags;
#endif
- for (i = 0; i < df->num_problems_defined; i++)
+ /* We iterate over problems by index as each problem removed will
+ lead to problems_in_order to be reordered. */
+ for (i = 0; i < DF_LAST_PROBLEM_PLUS1; i++)
{
- struct dataflow *dflow = df->problems_in_order[i];
- struct df_problem *problem = dflow->problem;
+ struct dataflow *dflow = df->problems_by_index[i];
- if (dflow->optional_p)
- {
- gcc_assert (problem->remove_problem_fun);
- (problem->remove_problem_fun) ();
- df->problems_in_order[i] = NULL;
- df->problems_by_index[problem->id] = NULL;
- removed++;
- }
+ if (dflow && dflow->optional_p)
+ df_remove_problem (dflow);
}
- df->num_problems_defined -= removed;
/* Clear all of the flags. */
df->changeable_flags = 0;