diff options
author | Sanjay Patel <spatel@rotateright.com> | 2017-08-21 19:13:14 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2017-08-21 19:13:14 +0000 |
commit | 82ec872990f0058c2c5938ecbc649e99a70bef9c (patch) | |
tree | a350301d100fae6e3e0b1f53a88bdf12e6360d8e /llvm/lib/Support/BinaryStreamRef.cpp | |
parent | d986545df620fb8933835aa0c1d85256d82a23c2 (diff) | |
download | bcm5719-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