On Wed, Jan 25, 2012 at 6:36 AM, Andrew Pinski <pins...@gmail.com> wrote:
> value_replacement in PHIOPT currently works only when there is one
> PHI (which is non virtual).
> http://gcc.gnu.org/ml/gcc-patches/2012-01/msg01195.html improves the
> situation but we can improve it even more as replacing a PHI argument
> with a SSA_NAME is almost always a benefit.
> This patch improves the situation even more for value replacement
> (though it does not fix all the cases I wanted to fix but that would
> require much more rewrite of phiopt that I was willing to take on
> right now, see the bug report for the two testcases where we miss
> still). We improve the situation by just going through all the PHIs
> and seeing if we want to do value replacement and only remove the
> middle basic block if it is empty or we used the only assignment in
> the PHI (for if(p)a=&p->a;else a= 0; case).
> OK for 4.8? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
> Note I have two improvements when both this and
> http://gcc.gnu.org/ml/gcc-patches/2012-01/msg01195.html are applied;
> remove the xfail and instead of gimple_seq_singleton_p use the new
> single_non_singleton_phi_for_edges (I will test that patch after both
> are applied). Currently these patches are independent and I want to
> keep it that way.
> Andrew Pinski
> * tree-ssa-phiopt.c: Include tree-pretty-print.h for print_generic_expr.
> (tree_ssa_phiopt_worker): Go through all the PHIs for
> value_replacement instead of just the singleton one.
> (value_replacement): Change return type to int. Return 0 instead of false.
> Allow the middle basic block to contain more than just the defining statement.
> Handle non empty middle basic blocks.
> * Makefile.in (tree-ssa-phiopt.o): Add tree-pretty-print.h
> * gcc.dg/tree-ssa/phi-opt-8.c: New testcase.
> * gcc.dg/tree-ssa/phi-opt-9.c: New testcase.