On Tue, Jul 24, 2012 at 5:50 PM, Andrew Pinski <andrew.pin...@caviumnetworks.com> wrote: > Hi, > Before tuples was introduced, VN used to lookup the simplified > expression to see if it was available already and use that instead of > the non simplified one. This patch adds the support back to VN to do > exactly that. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
I think this should be done for all RHS and SSA name LHS, not only for UNARY/BINARY/TERNARY - because even for SINGLE rhs we can end up simplifying (for REALPART_EXPR for example which we handle as nary, too). I think we constrain try_to_simplify enough so that + /* First try to lookup the simplified expression. */ + if (simplified && valid_gimple_rhs_p (simplified)) + { + tree result = vn_nary_op_lookup (simplified, NULL); + if (result) + { + changed = set_ssa_val_to (lhs, result); + goto done; + } + changed = set_ssa_val_to (lhs, lhs); + vn_nary_op_insert (simplified, lhs); + } switch (get_gimple_rhs_class (code)) { case GIMPLE_UNARY_RHS: case GIMPLE_BINARY_RHS: ... should work. As you also insert the simplified variant I think we really (finally) want to have a valid_nary_op routine rather than relying on valid_gimple_rhs_p which is way too generic. Thanks, Richard. > Thanks, > Andrew Pinski > > ChangeLog: > > * tree-ssa-sccvn.c (visit_use): Look up the simplified > expression before visting the original one. > > * gcc.dg/tree-ssa/ssa-fre-9.c: Update the number of > eliminatations that happen.