summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/BinaryStreamRef.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2017-08-21 19:13:14 +0000
committerSanjay Patel <spatel@rotateright.com>2017-08-21 19:13:14 +0000
commit82ec872990f0058c2c5938ecbc649e99a70bef9c (patch)
treea350301d100fae6e3e0b1f53a88bdf12e6360d8e /llvm/lib/Support/BinaryStreamRef.cpp
parentd986545df620fb8933835aa0c1d85256d82a23c2 (diff)
downloadbcm5719-llvm-82ec872990f0058c2c5938ecbc649e99a70bef9c.tar.gz
bcm5719-llvm-82ec872990f0058c2c5938ecbc649e99a70bef9c.zip
[LibCallSimplifier] try harder to fold memcmp with constant arguments (2nd try)
The 1st try was reverted because it could inf-loop by creating a dead instruction. Fixed that to not happen and added a test case to verify. Original commit message: Try to fold: memcmp(X, C, ConstantLength) == 0 --> load X == *C Without this change, we're unnecessarily checking the alignment of the constant data, so we miss the transform in the first 2 tests in the patch. I noted this shortcoming of LibCallSimpifier in one of the recent CGP memcmp expansion patches. This doesn't help the example in: https://bugs.llvm.org/show_bug.cgi?id=34032#c13 ...directly, but it's worth short-circuiting more of these simple cases since we're already trying to do that. The benefit of transforming to load+cmp is that existing IR analysis/transforms may further simplify that code. For example, if the load of the variable is common to multiple memcmp calls, CSE can remove the duplicate instructions. Differential Revision: https://reviews.llvm.org/D36922 llvm-svn: 311366
Diffstat (limited to 'llvm/lib/Support/BinaryStreamRef.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud