diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 29425a8156d8..f06fefff7365 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-03-21 Marc Glisse + + * tree-pass.h (PROP_gimple_lvec): New. + * passes.c (dump_properties): Handle PROP_gimple_lvec. + (init_optimization_passes): Move pass_lower_vector. + * tree-vect-generic.c (gate_expand_vector_operations_ssa): Test + PROP_gimple_lvec. + (pass_lower_vector): Provide PROP_gimple_lvec. + (pass_lower_vector_ssa): Likewise. + * cfgexpand.c (pass_expand): Require PROP_gimple_lvec. + 2013-03-21 Mark Wielaard * dwarf2out.c (size_of_aranges): Skip DECL_IGNORED_P functions. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 7242b2107f4d..771b019c65b1 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -4858,7 +4858,8 @@ struct rtl_opt_pass pass_expand = 0, /* static_pass_number */ TV_EXPAND, /* tv_id */ PROP_ssa | PROP_gimple_leh | PROP_cfg - | PROP_gimple_lcx, /* properties_required */ + | PROP_gimple_lcx + | PROP_gimple_lvec, /* properties_required */ PROP_rtl, /* properties_provided */ PROP_ssa | PROP_trees, /* properties_destroyed */ TODO_verify_ssa | TODO_verify_flow diff --git a/gcc/passes.c b/gcc/passes.c index 5f9330672fce..a47e092ea23b 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1310,7 +1310,6 @@ init_optimization_passes (void) NEXT_PASS (pass_expand_omp); NEXT_PASS (pass_build_ssa); - NEXT_PASS (pass_lower_vector); NEXT_PASS (pass_early_warn_uninitialized); NEXT_PASS (pass_rebuild_cgraph_edges); NEXT_PASS (pass_inline_parameters); @@ -1554,6 +1553,7 @@ init_optimization_passes (void) NEXT_PASS (pass_tm_memopt); NEXT_PASS (pass_tm_edges); } + NEXT_PASS (pass_lower_vector); NEXT_PASS (pass_lower_complex_O0); NEXT_PASS (pass_asan_O0); NEXT_PASS (pass_tsan_O0); @@ -2771,6 +2771,8 @@ dump_properties (FILE *dump, unsigned int props) fprintf (dump, "PROP_gimple_lomp\n"); if (props & PROP_gimple_lcx) fprintf (dump, "PROP_gimple_lcx\n"); + if (props & PROP_gimple_lvec) + fprintf (dump, "PROP_gimple_lvec\n"); if (props & PROP_cfglayout) fprintf (dump, "PROP_cfglayout\n"); } diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 0c83921f7d29..0942ad7793f4 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -148,6 +148,7 @@ struct simple_ipa_opt_pass #define PROP_cfglayout (1 << 9) /* cfglayout mode on RTL */ #define PROP_gimple_lcx (1 << 10) /* lowered complex */ #define PROP_loops (1 << 11) /* preserve loop structures */ +#define PROP_gimple_lvec (1 << 12) /* lowered vector */ #define PROP_trees \ (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp) diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c index b53ccd1c875b..dbad6d97598d 100644 --- a/gcc/tree-vect-generic.c +++ b/gcc/tree-vect-generic.c @@ -1472,7 +1472,7 @@ expand_vector_operations_1 (gimple_stmt_iterator *gsi) static bool gate_expand_vector_operations_ssa (void) { - return optimize == 0; + return !(cfun->curr_properties & PROP_gimple_lvec); } static unsigned int @@ -1513,7 +1513,7 @@ struct gimple_opt_pass pass_lower_vector = 0, /* static_pass_number */ TV_NONE, /* tv_id */ PROP_cfg, /* properties_required */ - 0, /* properties_provided */ + PROP_gimple_lvec, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ TODO_update_ssa /* todo_flags_finish */ @@ -1536,7 +1536,7 @@ struct gimple_opt_pass pass_lower_vector_ssa = 0, /* static_pass_number */ TV_NONE, /* tv_id */ PROP_cfg, /* properties_required */ - 0, /* properties_provided */ + PROP_gimple_lvec, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ TODO_update_ssa /* todo_flags_finish */