[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)
commit7349765ddb019fadba62f471dd9cbe475e2d5c09
tree58ee308fc6a33d68f76d21d4680cc65ab3a292b7
parent586a785efcf7be3e899d30a978daed09975c8559
[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235232 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/MemCpyOptimizer.cpp
test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll [new file with mode: 0644]