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). Richard