[MemCpyOpt] Optimize double-storing by memset+memcpy.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Fri, 17 Apr 2015 22:20:57 +0000 (22:20 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Fri, 17 Apr 2015 22:20:57 +0000 (22:20 +0000)
commit83f78a459a28705a2df8181d68cbfeaf4a30c0e0
treea6a88e4905113d7d24eae675bbee33e689ceff9e
parent635b509dee6aa29a1524fa76aacf418a44448c77
[MemCpyOpt] Optimize double-storing by memset+memcpy.

A common idiom in some code is to do the following:

  memset(dst, 0, dst_size);
  memcpy(dst, src, src_size);

Some of the memset is redundant; instead, we can do:

  memcpy(dst, src, src_size);
  memset(dst + src_size, 0,
         dst_size <= src_size ? 0 : dst_size - src_size);

Original patch by: Joel Jones
Differential Revision: http://reviews.llvm.org/D498

llvm-svn: 235232
llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp
llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll [new file with mode: 0644]