diff options
Diffstat (limited to 'gcc/passes.c')
-rw-r--r-- | gcc/passes.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/passes.c b/gcc/passes.c index 6a35b17..b03eae3 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -494,6 +494,12 @@ init_optimization_passes (void) NEXT_PASS (pass_merge_phi); NEXT_PASS (pass_dominator); + /* The only copy propagation opportunities left after DOM + should be due to degenerate PHI nodes. So rather than + run the full copy propagator, just discover and copy + propagate away the degenerate PHI nodes. */ + NEXT_PASS (pass_phi_only_copy_prop); + NEXT_PASS (pass_phiopt); NEXT_PASS (pass_may_alias); NEXT_PASS (pass_tail_recursion); @@ -508,7 +514,13 @@ init_optimization_passes (void) NEXT_PASS (pass_may_alias); NEXT_PASS (pass_rename_ssa_copies); NEXT_PASS (pass_dominator); - NEXT_PASS (pass_copy_prop); + + /* The only copy propagation opportunities left after DOM + should be due to degenerate PHI nodes. So rather than + run the full copy propagator, just discover and copy + propagate away the degenerate PHI nodes. */ + NEXT_PASS (pass_phi_only_copy_prop); + NEXT_PASS (pass_dce); NEXT_PASS (pass_dse); NEXT_PASS (pass_may_alias); @@ -529,7 +541,13 @@ init_optimization_passes (void) NEXT_PASS (pass_sink_code); NEXT_PASS (pass_tree_loop); NEXT_PASS (pass_dominator); - NEXT_PASS (pass_copy_prop); + + /* The only copy propagation opportunities left after DOM + should be due to degenerate PHI nodes. So rather than + run the full copy propagator, just discover and copy + propagate away the degenerate PHI nodes. */ + NEXT_PASS (pass_phi_only_copy_prop); + NEXT_PASS (pass_cd_dce); /* FIXME: If DCE is not run before checking for uninitialized uses, |