diff options
author | Christophe Lyon <christophe.lyon@linaro.org> | 2015-06-03 20:40:23 +0200 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@linaro.org> | 2015-06-11 15:06:56 +0200 |
commit | 5eebafbbee551edc168fb856e9300c246941a5ac (patch) | |
tree | 7c4e0c1cd9a805be6dd98d62ff880c579c4bef25 | |
parent | 011d947a15a6438b9342068bdff32cc0899f31bc (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.c | 19 |
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; |