mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-04 06:26:28 +00:00
Make adding nocapture a bit stronger. FreeInst is nocapture. Also,
functions that don't write can't leak a pointer except through the return value, so a void readonly function is implicitly nocapture. Test these, and add a test that verifies that f1 calling f2 with an otherwise dead pointer gets both of them marked nocapture. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61552 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | not grep {nocapture *%%q}
|
||||
; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | grep {nocapture *%%p} | count 3
|
||||
; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | grep {nocapture *%%p} | count 8
|
||||
@g = global i32* null ; <i32**> [#uses=1]
|
||||
|
||||
define i32* @c1(i32* %q) {
|
||||
@@ -62,3 +62,25 @@ define void @nc3(void ()* %p) {
|
||||
call void %p()
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @external(i8*) readonly
|
||||
define void @nc4(i8* %p) {
|
||||
call void @external(i8* %p)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @nc5(void (i8*)* %f, i8* %p) {
|
||||
call void %f(i8* %p) readonly
|
||||
call void %f(i8* nocapture %p)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @nc6(i8* %p) {
|
||||
call void @nc7(i8* %p)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @nc7(i8* %p) {
|
||||
call void @nc6(i8* %p)
|
||||
ret void
|
||||
}
|
||||
|
Reference in New Issue
Block a user