From 02b6a6a75f29f59a4ea267608c6d3f6b1ebbf0d5 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Fri, 13 Feb 2009 17:08:33 +0000 Subject: [PATCH] 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 --- lib/Transforms/Scalar/SimplifyLibCalls.cpp | 4 +++- test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll | 9 +++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/Transforms/Scalar/SimplifyLibCalls.cpp b/lib/Transforms/Scalar/SimplifyLibCalls.cpp index fed239eae36..c199f301a99 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(EndPtr)) + if (isa(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 3d51d78ecea..4aeff1c048d 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 } -- 2.34.1