* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105250
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
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 \
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;
--- /dev/null
+/* { 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);
+}
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;
#include "tree-pass.h"
#include "timevar.h"
#include "flags.h"
+#include "cfgloop.h"
\f
static struct stmt_stats
{
}
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)
{
perform_tree_ssa_dce (/*aggressive=*/optimize >= 2);
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 */