aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2009-02-13 17:08:33 +0000
committerNick Lewycky <nicholas@mxc.ca>2009-02-13 17:08:33 +0000
commit02b6a6a75f29f59a4ea267608c6d3f6b1ebbf0d5 (patch)
treebc02cda5264f6cd405a0a375c5872a2c55f849cb
parent4c49841f34baa3d0114ab8391403bee8b1a136e8 (diff)
Mark strto* as readonly when the endptr is null.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64460 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/SimplifyLibCalls.cpp4
-rw-r--r--test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll9
2 files changed, 8 insertions, 5 deletions
diff --git a/lib/Transforms/Scalar/SimplifyLibCalls.cpp b/lib/Transforms/Scalar/SimplifyLibCalls.cpp
index fed239eae3..c199f301a9 100644
--- a/lib/Transforms/Scalar/SimplifyLibCalls.cpp
+++ b/lib/Transforms/Scalar/SimplifyLibCalls.cpp
@@ -733,8 +733,10 @@ struct VISIBILITY_HIDDEN StrToOpt : public LibCallOptimization {
return 0;
Value *EndPtr = CI->getOperand(2);
- if (isa<ConstantPointerNull>(EndPtr))
+ if (isa<ConstantPointerNull>(EndPtr)) {
+ CI->setOnlyReadsMemory();
CI->addAttribute(1, Attribute::NoCapture);
+ }
return 0;
}
diff --git a/test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll b/test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll
index 3d51d78ece..4aeff1c048 100644
--- a/test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll
+++ b/test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll
@@ -1,13 +1,14 @@
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis > %t
; RUN: grep nocapture %t | count 2
; RUN: grep null %t | grep nocapture | count 1
+; RUN: grep null %t | grep call | grep readonly | count 1
-; Test that we do add nocapture to the declaration, and to the second call only.
+; Test that we add nocapture to the declaration, and to the second call only.
-declare float @strtof(i8* %s, i8** %endptr, i32 %base)
+declare float @strtol(i8* %s, i8** %endptr, i32 %base)
define void @foo(i8* %x, i8** %endptr) {
- call float @strtof(i8* %x, i8** %endptr, i32 0)
- call float @strtof(i8* %x, i8** null, i32 0)
+ call float @strtol(i8* %x, i8** %endptr, i32 10)
+ call float @strtol(i8* %x, i8** null, i32 10)
ret void
}