mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-01 00:25:01 +00:00
Mark strto* as readonly when the endptr is null.
llvm-svn: 64460
This commit is contained in:
parent
7ec551cfad
commit
0a8e13fd8b
@ -733,8 +733,10 @@ struct VISIBILITY_HIDDEN StrToOpt : public LibCallOptimization {
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Value *EndPtr = CI->getOperand(2);
|
Value *EndPtr = CI->getOperand(2);
|
||||||
if (isa<ConstantPointerNull>(EndPtr))
|
if (isa<ConstantPointerNull>(EndPtr)) {
|
||||||
|
CI->setOnlyReadsMemory();
|
||||||
CI->addAttribute(1, Attribute::NoCapture);
|
CI->addAttribute(1, Attribute::NoCapture);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis > %t
|
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis > %t
|
||||||
; RUN: grep nocapture %t | count 2
|
; RUN: grep nocapture %t | count 2
|
||||||
; RUN: grep null %t | grep nocapture | count 1
|
; 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) {
|
define void @foo(i8* %x, i8** %endptr) {
|
||||||
call float @strtof(i8* %x, i8** %endptr, i32 0)
|
call float @strtol(i8* %x, i8** %endptr, i32 10)
|
||||||
call float @strtof(i8* %x, i8** null, i32 0)
|
call float @strtol(i8* %x, i8** null, i32 10)
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user