On Mon, Aug 20, 2012 at 6:49 AM, Andrew Pinski <andrew.pin...@caviumnetworks.com> wrote: > 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.
valid_gimple_rhs_p checks what it says. But what we want to know is whether the rhs is valid for a SCCVN NARY. Those are not the same. Richard. > 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.