[PATCH] D28637: [PPC] Inline expansion of memcmp

Zaara Syeda via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 12 19:57:47 PST 2017


syzaara created this revision.
syzaara added reviewers: kbarton, nemanjai, lei, sfertile, jtony.
syzaara added a subscriber: llvm-commits.

Currently on PowerPC, llvm does not expand calls to memcmp as it does for memcpy, memmove. When memcmp size and alignment info of the two sources being compared is known at compile time, we can do an inline expansion rather than calling the library routine. To start, only the expansion for multiples of 8 bytes is added. This expansion loads 8 bytes from the two sources to compare, xors to see if there was a difference, and then does an early exit if a difference was found. Otherwise, continues to the next 8 bytes.

The expansion is implemented at the IR level in CodeGenPrepare.cpp where other intrinsic calls are also expanded in bool CodeGenPrepare::optimizeCallInst(CallInst *CI, bool& ModifiedDT). It is only enabled by default for PowerPC, and other targets may enable it by returning true for expandMemCmp()


https://reviews.llvm.org/D28637

Files:
  include/llvm/Analysis/TargetTransformInfo.h
  include/llvm/Analysis/TargetTransformInfoImpl.h
  include/llvm/Target/TargetLowering.h
  lib/Analysis/TargetTransformInfo.cpp
  lib/CodeGen/CodeGenPrepare.cpp
  lib/CodeGen/TargetLoweringBase.cpp
  lib/Target/PowerPC/PPCISelLowering.cpp
  lib/Target/PowerPC/PPCTargetTransformInfo.cpp
  lib/Target/PowerPC/PPCTargetTransformInfo.h
  test/CodeGen/PowerPC/memcmp.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28637.84217.patch
Type: text/x-patch
Size: 14617 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170113/68f0ca2a/attachment.bin>


More information about the llvm-commits mailing list