From: rguenth Date: Thu, 23 May 2013 12:23:59 +0000 (+0000) Subject: 2013-05-23 Richard Biener X-Git-Tag: upstream/4.9.2~5930 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6979886b98fc36ed277a387711e0eedf4eab0cd2;p=platform%2Fupstream%2Flinaro-gcc.git 2013-05-23 Richard Biener PR tree-optimization/57380 * tree-ssa-phiprop.c (propagate_with_phi): Do not require at least one invariant or re-used load. * passes.c (init_optimization_passes): Move pass_phiprop before pass_forwprop. * g++.dg/tree-ssa/pr57380.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199246 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdfa20c..0c46d03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-05-23 Richard Biener + + PR tree-optimization/57380 + * tree-ssa-phiprop.c (propagate_with_phi): Do not require at + least one invariant or re-used load. + * passes.c (init_optimization_passes): Move pass_phiprop before + pass_forwprop. + 2013-05-23 James Greenhalgh * config/aarch64/aarch64-simd.md diff --git a/gcc/passes.c b/gcc/passes.c index 0f1d214..02f2022 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1402,12 +1402,12 @@ init_optimization_passes (void) NEXT_PASS (pass_ccp); /* After CCP we rewrite no longer addressed locals into SSA form if possible. */ + NEXT_PASS (pass_phiprop); NEXT_PASS (pass_forwprop); /* pass_build_alias is a dummy pass that ensures that we execute TODO_rebuild_alias at this point. */ NEXT_PASS (pass_build_alias); NEXT_PASS (pass_return_slot); - NEXT_PASS (pass_phiprop); NEXT_PASS (pass_fre); NEXT_PASS (pass_copy_prop); NEXT_PASS (pass_merge_phi); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index db6e9fa..0a22b4a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2013-05-23 Richard Biener + PR tree-optimization/57380 + * g++.dg/tree-ssa/pr57380.C: New testcase. + +2013-05-23 Richard Biener + PR middle-end/57381 * gcc.dg/torture/pr57381.c: New testcase. diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr57380.C b/gcc/testsuite/g++.dg/tree-ssa/pr57380.C new file mode 100644 index 0000000..0a2b2ad --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr57380.C @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1" } */ + +struct my_array { + int data[4]; +}; + +const int& my_max(const int& a, const int& b) { + return a < b ? b : a; +} + +int f(my_array a, my_array b) { + int res = 0; + for (int i = 0; i < 4; ++i) { + res += my_max(a.data[i], b.data[i]); + } + return res; +} + +/* { dg-final { scan-tree-dump "MAX_EXPR" "phiopt1" } } */ +/* { dg-final { cleanup-tree-dump "phiopt1" } } */ diff --git a/gcc/tree-ssa-phiprop.c b/gcc/tree-ssa-phiprop.c index 6555ae3..96d7ba6 100644 --- a/gcc/tree-ssa-phiprop.c +++ b/gcc/tree-ssa-phiprop.c @@ -247,7 +247,6 @@ propagate_with_phi (basic_block bb, gimple phi, struct phiprop_d *phivn, ssa_op_iter i; bool phi_inserted; tree type = NULL_TREE; - bool one_invariant = false; if (!POINTER_TYPE_P (TREE_TYPE (ptr)) || !is_gimple_reg_type (TREE_TYPE (TREE_TYPE (ptr)))) @@ -282,17 +281,8 @@ propagate_with_phi (basic_block bb, gimple phi, struct phiprop_d *phivn, if (!type && TREE_CODE (arg) == SSA_NAME) type = TREE_TYPE (phivn[SSA_NAME_VERSION (arg)].value); - if (TREE_CODE (arg) == ADDR_EXPR - && is_gimple_min_invariant (arg)) - one_invariant = true; } - /* If we neither have an address of a decl nor can reuse a previously - inserted load, do not hoist anything. */ - if (!one_invariant - && !type) - return false; - /* Find a dereferencing use. First follow (single use) ssa copy chains for ptr. */ while (single_imm_use (ptr, &use, &use_stmt)