re PR tree-optimization/24300 (segfault in operand_equal_p with -ftree-vectorize)

PR tree-opt/24300
        * Makefile.in (tree-ssa-dce.o): Depend on CFGLOOP_H.
        * tree-ssa-dce.c: Include cfgloop.h.
        (tree_ssa_dce_loop, pass_dce_loop): New.
        * tree-pass.h (pass_dce_loop): Declare it.
        * passes.c (init_optimization_passes): Use it.

From-SVN: r105250
This commit is contained in:
Richard Henderson 2005-10-11 12:18:24 -07:00 committed by Richard Henderson
parent 5e8b5b0868
commit 4989673889
6 changed files with 75 additions and 7 deletions

View File

@ -1,3 +1,12 @@
2005-10-11 Richard Henderson <rth@redhat.com>
PR tree-opt/24300
* Makefile.in (tree-ssa-dce.o): Depend on CFGLOOP_H.
* tree-ssa-dce.c: Include cfgloop.h.
(tree_ssa_dce_loop, pass_dce_loop): New.
* tree-pass.h (pass_dce_loop): Declare it.
* passes.c (init_optimization_passes): Use it.
2005-10-11 Eric Botcazou <ebotcazou@libertysurf.fr>
PR middle-end/24263

View File

@ -2230,7 +2230,7 @@ mode-switching.o : mode-switching.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
tree-ssa-dce.o : tree-ssa-dce.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
$(RTL_H) $(TM_P_H) $(TREE_FLOW_H) $(DIAGNOSTIC_H) $(TIMEVAR_H) $(TM_H) \
coretypes.h $(TREE_DUMP_H) tree-pass.h $(FLAGS_H) $(BASIC_BLOCK_H) \
$(GGC_H) hard-reg-set.h $(OBSTACK_H) $(TREE_GIMPLE_H)
$(GGC_H) hard-reg-set.h $(OBSTACK_H) $(TREE_GIMPLE_H) $(CFGLOOP_H)
tree-ssa-ccp.o : tree-ssa-ccp.c $(TREE_FLOW_H) $(CONFIG_H) \
$(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(EXPR_H) $(GGC_H) output.h \
$(DIAGNOSTIC_H) function.h $(TIMEVAR_H) $(TM_H) coretypes.h \

View File

@ -595,12 +595,7 @@ init_optimization_passes (void)
p = &pass_vectorize.sub;
NEXT_PASS (pass_lower_vector_ssa);
/* ??? The loop optimizers are not GC safe. See PR 21805.
Turn off GC while registering this pass. */
pass_dce.todo_flags_finish &= ~TODO_ggc_collect;
NEXT_PASS (pass_dce);
pass_dce.todo_flags_finish |= TODO_ggc_collect;
gcc_assert (p != &pass_dce.next);
NEXT_PASS (pass_dce_loop);
*p = NULL;
p = &pass_loop2.sub;

View File

@ -0,0 +1,35 @@
/* { dg-do compile } */
static int *** foo (int);
void
bar ()
{
int ***p = foo (2);
}
extern int *nd;
extern int ***tc;
extern int *ap;
extern int *as;
extern float ss;
static int ***
foo (int Fc)
{
int i, j, s, p, n, t;
n = 0;
for (s = 0; s < 4; s++)
n += nd[s];
for (i = 0; i < n; i++)
{
p = ap[i];
s = as[i];
for (j = 0; j < Fc; j++)
tc[p][s][j] = i * ss + j;
}
return (tc);
}

View File

@ -243,6 +243,7 @@ extern struct tree_opt_pass pass_build_ssa;
extern struct tree_opt_pass pass_del_ssa;
extern struct tree_opt_pass pass_dominator;
extern struct tree_opt_pass pass_dce;
extern struct tree_opt_pass pass_dce_loop;
extern struct tree_opt_pass pass_cd_dce;
extern struct tree_opt_pass pass_merge_phi;
extern struct tree_opt_pass pass_may_alias;

View File

@ -64,6 +64,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "tree-pass.h"
#include "timevar.h"
#include "flags.h"
#include "cfgloop.h"
static struct stmt_stats
{
@ -941,6 +942,13 @@ tree_ssa_dce (void)
perform_tree_ssa_dce (/*aggressive=*/false);
}
static void
tree_ssa_dce_loop (void)
{
perform_tree_ssa_dce (/*aggressive=*/false);
free_numbers_of_iterations_estimates (current_loops);
}
static void
tree_ssa_cd_dce (void)
{
@ -974,6 +982,26 @@ struct tree_opt_pass pass_dce =
0 /* letter */
};
struct tree_opt_pass pass_dce_loop =
{
"dceloop", /* name */
gate_dce, /* gate */
tree_ssa_dce_loop, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
TV_TREE_DCE, /* tv_id */
PROP_cfg | PROP_ssa | PROP_alias, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func
| TODO_update_ssa_no_phi
| TODO_cleanup_cfg
| TODO_verify_ssa, /* todo_flags_finish */
0 /* letter */
};
struct tree_opt_pass pass_cd_dce =
{
"cddce", /* name */