diff options
author | Kai Nacke <kai.nacke@redstar.de> | 2014-02-04 05:55:16 +0000 |
---|---|---|
committer | Kai Nacke <kai.nacke@redstar.de> | 2014-02-04 05:55:16 +0000 |
commit | 6840e895c1e77c5862c1d3f46747ae7f654476d4 (patch) | |
tree | ff4b5e582ef1ea3ba98415d60ffbc9d1246b80a1 /lib | |
parent | eabe14bd96c35fbb9b11288e9ee1785a64117896 (diff) | |
download | llvm-6840e895c1e77c5862c1d3f46747ae7f654476d4.tar.gz llvm-6840e895c1e77c5862c1d3f46747ae7f654476d4.tar.bz2 llvm-6840e895c1e77c5862c1d3f46747ae7f654476d4.tar.xz |
Add strchr(p, 0) -> p + strlen(p) to SimplifyLibCalls
Add the missing transformation strchr(p, 0) -> p + strlen(p) to SimplifyLibCalls
and remove the ToDo comment.
Reviewer: Duncan P.N. Exan Smith
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Utils/SimplifyLibCalls.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Transforms/Utils/SimplifyLibCalls.cpp b/lib/Transforms/Utils/SimplifyLibCalls.cpp index 36d24624f9..1ef8115945 100644 --- a/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -493,8 +493,11 @@ struct StrChrOpt : public LibCallOptimization { // Otherwise, the character is a constant, see if the first argument is // a string literal. If so, we can constant fold. StringRef Str; - if (!getConstantStringInfo(SrcStr, Str)) + if (!getConstantStringInfo(SrcStr, Str)) { + if (TD && CharC->isZero()) // strchr(p, 0) -> p + strlen(p) + return B.CreateGEP(SrcStr, EmitStrLen(SrcStr, B, TD, TLI), "strchr"); return 0; + } // Compute the offset, make sure to handle the case when we're searching for // zero (a weird way to spell strlen). @@ -2297,8 +2300,6 @@ void LibCallSimplifier::replaceAllUsesWith(Instruction *I, Value *With) const { // * sqrt(Nroot(x)) -> pow(x,1/(2*N)) // * sqrt(pow(x,y)) -> pow(|x|,y*0.5) // -// strchr: -// * strchr(p, 0) -> strlen(p) // tan, tanf, tanl: // * tan(atan(x)) -> x // |