On Wed, Jul 25, 2012 at 4:39 AM, Richard Guenther <richard.guent...@gmail.com> wrote: > 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.
I don't see valid_gimple_rhs_p being that generic as it checks to make sure the operands of the gimple are valid. Maybe I am missing something here though. Thanks, Andrew Pinski > > 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.