+2019-08-20 Matthew Beliveau <mbelivea@redhat.com>
+
+ * tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to
+ catch more redundant zero initialization cases.
+ (dse_dom_walker::dse_optimize_stmt): Likewise.
+
2019-08-20 Richard Biener <rguenther@suse.de>
PR lto/91307
+2019-08-20 Matthew Beliveau <mbelivea@redhat.com>
+
+ * gcc.dg/tree-ssa/redundant-assign-zero-1.c: New test.
+ * gcc.dg/tree-ssa/redundant-assign-zero-2.c: New test.
+
2019-08-20 Richard Biener <rguenther@suse.de>
PR tree-optimization/37242
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)))))
+ && (gimple_assign_single_p (use_stmt)
+ && initializer_zerop (gimple_assign_rhs1 (use_stmt))))
|| (gimple_call_builtin_p (use_stmt, BUILT_IN_NORMAL)
&& (fndecl = gimple_call_fndecl (use_stmt)) != NULL
&& (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMSET
{
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.
-
- 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
- && !gimple_clobber_p (stmt))
+ /* Check if this statement stores zero to a memory location,
+ and if there is a subsequent store of zero to the same
+ memory location. If so, remove the subsequent store. */
+ if (gimple_assign_single_p (stmt)
+ && initializer_zerop (gimple_assign_rhs1 (stmt)))
dse_optimize_redundant_stores (stmt);
/* Self-assignments are zombies. */