[InstCombine] Fold memchr and strchr equality with first argument
authorMartin Sebor <msebor@redhat.com>
Thu, 30 Jun 2022 19:54:34 +0000 (13:54 -0600)
committerMartin Sebor <msebor@redhat.com>
Thu, 7 Jul 2022 21:14:23 +0000 (15:14 -0600)
commit516915beb5ee5012a9a8b162fc29664a8c247ec3
treecb7344e2e579bf9461b6084996de7a4c9859c872
parente3611f82fc717535a78330b5fe7b09b124678490
[InstCombine] Fold memchr and strchr equality with first argument

Enhance memchr and strchr handling to simplify calls to the functions
used in equality expressions with the first argument to at most two
integer comparisons:

- memchr(A, C, N) == A to N && *A == C for either a dereferenceable
  A or a nonzero N,
- strchr(S, C) == S to *S == C for any S and C, and
- strchr(S, '\0') == 0 to true for any S

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D128939
llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
llvm/test/Transforms/InstCombine/memchr-11.ll
llvm/test/Transforms/InstCombine/strchr-4.ll