On Tue, Aug 13, 2019 at 10:18 AM Richard Sandiford <richard.sandif...@arm.com> wrote: > > Thanks for doing this. > > Matthew Beliveau <mbeli...@redhat.com> writes: > > diff --git gcc/tree-ssa-dse.c gcc/tree-ssa-dse.c > > index 5b7c4fc6d1a..dcaeb8edbfe 100644 > > --- gcc/tree-ssa-dse.c > > +++ gcc/tree-ssa-dse.c > > @@ -628,11 +628,8 @@ dse_optimize_redundant_stores (gimple *stmt) > > tree fndecl; > > if ((is_gimple_assign (use_stmt) > > && gimple_vdef (use_stmt) > > - && ((gimple_assign_rhs_code (use_stmt) == CONSTRUCTOR > > - && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (use_stmt)) == 0 > > - && !gimple_clobber_p (stmt)) > > - || (gimple_assign_rhs_code (use_stmt) == INTEGER_CST > > - && integer_zerop (gimple_assign_rhs1 (use_stmt))))) > > + && initializer_zerop (gimple_op (use_stmt, 1), NULL) > > + && !gimple_clobber_p (stmt)) > > || (gimple_call_builtin_p (use_stmt, BUILT_IN_NORMAL) > > && (fndecl = gimple_call_fndecl (use_stmt)) != NULL > > && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMSET > > @@ -1027,15 +1024,13 @@ dse_dom_walker::dse_optimize_stmt > > (gimple_stmt_iterator *gsi) > > { > > bool by_clobber_p = false; > > > > - /* First see if this store is a CONSTRUCTOR and if there > > - are subsequent CONSTRUCTOR stores which are totally > > - subsumed by this statement. If so remove the subsequent > > - CONSTRUCTOR store. > > + /* Check if this store initalizes zero, or some aggregate of zeros, > > + and check if there are subsequent stores which are subsumed by this > > + statement. If so, remove the subsequent store. > > > > This will tend to make fewer calls into memset with longer > > arguments. */ > > - if (gimple_assign_rhs_code (stmt) == CONSTRUCTOR > > - && CONSTRUCTOR_NELTS (gimple_assign_rhs1 (stmt)) == 0 > > + if (initializer_zerop (gimple_op (stmt, 1), NULL) > > && !gimple_clobber_p (stmt)) > > dse_optimize_redundant_stores (stmt); > > > > In addition to Jeff's comment, the original choice of gimple_assign_rhs1 > is the preferred way to write this (applies to both hunks).
And the !gimple_clobber_p test is now redundant. > Richard