summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Laevsky <igmyrj@gmail.com>2017-12-18 10:31:58 +0000
committerIgor Laevsky <igmyrj@gmail.com>2017-12-18 10:31:58 +0000
commit7bd3fb15e11d4ad8f7b0df8085fb947093267d61 (patch)
treecd407ab5daca0332e829797d86d12b9cd11e33eb
parentfd967f2f7a05422113df204a282b1a2f8d39888c (diff)
downloadbcm5719-llvm-7bd3fb15e11d4ad8f7b0df8085fb947093267d61.tar.gz
bcm5719-llvm-7bd3fb15e11d4ad8f7b0df8085fb947093267d61.zip
[TargetLibraryInfo] Discard library functions with incorrectly sized integers
Differential Revision: https://reviews.llvm.org/D41184 llvm-svn: 320964
-rw-r--r--llvm/lib/Analysis/TargetLibraryInfo.cpp6
-rw-r--r--llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll16
2 files changed, 19 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp
index 609b9961deb..d18246ac594 100644
--- a/llvm/lib/Analysis/TargetLibraryInfo.cpp
+++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp
@@ -608,7 +608,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType()->isPointerTy() &&
FTy.getParamType(0) == FTy.getReturnType() &&
FTy.getParamType(1) == FTy.getReturnType() &&
- FTy.getParamType(2)->isIntegerTy());
+ IsSizeTTy(FTy.getParamType(2)));
case LibFunc_strcpy_chk:
case LibFunc_stpcpy_chk:
@@ -633,7 +633,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType() == FTy.getParamType(0) &&
FTy.getParamType(0) == FTy.getParamType(1) &&
FTy.getParamType(0) == PCharTy &&
- FTy.getParamType(2)->isIntegerTy());
+ IsSizeTTy(FTy.getParamType(2)));
case LibFunc_strxfrm:
return (NumParams == 3 && FTy.getParamType(0)->isPointerTy() &&
@@ -648,7 +648,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType()->isIntegerTy(32) &&
FTy.getParamType(0)->isPointerTy() &&
FTy.getParamType(0) == FTy.getParamType(1) &&
- FTy.getParamType(2)->isIntegerTy());
+ IsSizeTTy(FTy.getParamType(2)));
case LibFunc_strspn:
case LibFunc_strcspn:
diff --git a/llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll b/llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll
new file mode 100644
index 00000000000..5c7c49a9708
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll
@@ -0,0 +1,16 @@
+; Test that the strncpy simplification doesn't crash if datalayout specifies
+; 64 bit pointers while length is a 32 bit argument
+;
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+target datalayout = "e-p:64:64:64"
+
+declare i32 @strncmp(i8*, i8*, i32)
+
+define i32 @test6(i8* %str1, i8* %str2) {
+; CHECK-LABEL: @test6(
+; CHECK: call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
+
+ %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
+ ret i32 %temp1
+}
OpenPOWER on IntegriCloud