struct A { char c[4]; } a, b; void f1 (void) { __builtin_memcpy (&a.c[0], "a", 1); a = b; } void f2 (void) { __builtin_memcpy (&a.c[0], "a", 1); __builtin_memcpy (&a.c[0], "cdef", 4); } isn't optimized by tree DSE. RTL DSE can handle it, but only on some targets (there are issues with calls to builtins if they were expanded as calls and args aren't in registers etc.).
Confirmed, mine.
Author: rguenth Date: Wed Oct 13 13:03:31 2010 New Revision: 165422 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=165422 Log: 2010-10-13 Richard Guenther <rguenther@suse.de> PR tree-optimization/45970 * tree-ssa-alias.h (stmt_kills_ref_p): Declare. * tree-ssa-alias.c (stmt_kills_ref_p_1): New function. (stmt_kills_ref_p): Likewise. * tree-ssa-dse.c (dse_optimize_stmt): Use it. * gcc.dg/tree-ssa/ssa-dse-13.c: New testcase. Added: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-13.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-ssa-alias.c trunk/gcc/tree-ssa-alias.h trunk/gcc/tree-ssa-dse.c
Fixed on trunk.