diff options
author | Chris Lattner <sabre@nondot.org> | 2009-06-19 04:17:36 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-06-19 04:17:36 +0000 |
commit | 849832c0fb47f4e111840e0031b9129d41ffb389 (patch) | |
tree | f2b648db29f164ed6365a3a316baa7de17063eb9 | |
parent | 10382fb71d8306f320ecbeb7049d25354c0e5457 (diff) | |
download | external_llvm-849832c0fb47f4e111840e0031b9129d41ffb389.zip external_llvm-849832c0fb47f4e111840e0031b9129d41ffb389.tar.gz external_llvm-849832c0fb47f4e111840e0031b9129d41ffb389.tar.bz2 |
part of PR4405: disable a contentious optimization for
strcmp -> memcmp when the lengths of the strings are unknown.
Patch by Nick Lewycky!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73751 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/SimplifyLibCalls.cpp | 8 | ||||
-rw-r--r-- | test/Transforms/SimplifyLibCalls/2008-12-20-StrcmpMemcmp.ll | 10 |
2 files changed, 3 insertions, 15 deletions
diff --git a/lib/Transforms/Scalar/SimplifyLibCalls.cpp b/lib/Transforms/Scalar/SimplifyLibCalls.cpp index 7d0c35e..bbcb792 100644 --- a/lib/Transforms/Scalar/SimplifyLibCalls.cpp +++ b/lib/Transforms/Scalar/SimplifyLibCalls.cpp @@ -709,12 +709,10 @@ struct VISIBILITY_HIDDEN StrCmpOpt : public LibCallOptimization { // strcmp(P, "x") -> memcmp(P, "x", 2) uint64_t Len1 = GetStringLength(Str1P); uint64_t Len2 = GetStringLength(Str2P); - if (Len1 || Len2) { - // Choose the smallest Len excluding 0 which means 'unknown'. - if (!Len1 || (Len2 && Len2 < Len1)) - Len1 = Len2; + if (Len1 && Len2) { return EmitMemCmp(Str1P, Str2P, - ConstantInt::get(TD->getIntPtrType(), Len1), B); + ConstantInt::get(TD->getIntPtrType(), + std::min(Len1, Len2)), B); } return 0; diff --git a/test/Transforms/SimplifyLibCalls/2008-12-20-StrcmpMemcmp.ll b/test/Transforms/SimplifyLibCalls/2008-12-20-StrcmpMemcmp.ll deleted file mode 100644 index d35da8d..0000000 --- a/test/Transforms/SimplifyLibCalls/2008-12-20-StrcmpMemcmp.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | grep call.*memcmp - -@.str = internal constant [2 x i8] c"x\00" - -declare i32 @strcmp(i8* %dest, i8* %src) - -define i32 @foo(i8* %x, i8* %y) { - %A = call i32 @strcmp(i8* %x, i8* getelementptr ([2 x i8]* @.str, i32 0, i32 0)) - ret i32 %A -} |