diff options
Diffstat (limited to 'gcc/tree-optimize.c')
-rw-r--r-- | gcc/tree-optimize.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index 6af4b029389..24296a529c0 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -282,6 +282,7 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_rename_ssa_copies); NEXT_PASS (pass_early_warn_uninitialized); NEXT_PASS (pass_dce); + NEXT_PASS (pass_return); NEXT_PASS (pass_dominator); NEXT_PASS (pass_redundant_phi); NEXT_PASS (DUP_PASS (pass_dce)); @@ -293,6 +294,7 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_del_pta); NEXT_PASS (pass_profile); NEXT_PASS (pass_lower_complex); + NEXT_PASS (DUP_PASS (pass_return)); NEXT_PASS (pass_sra); NEXT_PASS (DUP_PASS (pass_rename_ssa_copies)); NEXT_PASS (DUP_PASS (pass_dominator)); @@ -301,12 +303,13 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_dse); NEXT_PASS (DUP_PASS (pass_forwprop)); NEXT_PASS (DUP_PASS (pass_phiopt)); - NEXT_PASS (pass_loop); NEXT_PASS (pass_ccp); NEXT_PASS (DUP_PASS (pass_redundant_phi)); NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_split_crit_edges); NEXT_PASS (pass_pre); + NEXT_PASS (pass_scev); + NEXT_PASS (pass_loop); NEXT_PASS (DUP_PASS (pass_dominator)); NEXT_PASS (DUP_PASS (pass_redundant_phi)); NEXT_PASS (pass_cd_dce); @@ -322,6 +325,19 @@ init_tree_optimization_passes (void) NEXT_PASS (pass_del_cfg); *p = NULL; + p = &pass_scev.sub; + NEXT_PASS (pass_scev_init); + NEXT_PASS (pass_scev_anal); + NEXT_PASS (pass_scev_depend); + NEXT_PASS (pass_scev_elim_checks); + NEXT_PASS (pass_scev_iv_canon); + NEXT_PASS (pass_scev_linear_transform); + NEXT_PASS (pass_ddg); + NEXT_PASS (pass_scev_vectorize); + NEXT_PASS (pass_delete_ddg); + NEXT_PASS (pass_scev_done); + *p = NULL; + #undef NEXT_PASS #undef DUP_PASS @@ -339,9 +355,8 @@ execute_todo (unsigned int flags) { if (flags & TODO_rename_vars) { - if (bitmap_first_set_bit (vars_to_rename) >= 0) - rewrite_into_ssa (); - BITMAP_XFREE (vars_to_rename); + rewrite_into_ssa (false); + bitmap_clear (vars_to_rename); } if ((flags & TODO_dump_func) && dump_file) @@ -397,10 +412,6 @@ execute_one_pass (struct tree_opt_pass *pass) if (pass->tv_id) timevar_push (pass->tv_id); - /* If the pass is requesting ssa variable renaming, allocate the bitmap. */ - if (pass->todo_flags_finish & TODO_rename_vars) - vars_to_rename = BITMAP_XMALLOC (); - /* Do it! */ if (pass->execute) pass->execute (); @@ -522,6 +533,9 @@ tree_rest_of_compilation (tree fndecl, bool nested_p) } } + if (!vars_to_rename) + vars_to_rename = BITMAP_XMALLOC (); + /* Perform all tree transforms and optimizations. */ execute_pass_list (all_passes); |