Extend 'readonly' and 'readnone' to work on function arguments as well as

functions. Make the function attributes pass add it to known library functions
and when it can deduce it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185735 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky
2013-07-06 00:29:58 +00:00
parent 202eb7b18e
commit dc89737bcd
22 changed files with 547 additions and 86 deletions

View File

@@ -1,14 +1,23 @@
; RUN: opt < %s -functionattrs -S | not grep "nocapture *%%q"
; RUN: opt < %s -functionattrs -S | grep "nocapture *%%p"
; RUN: opt < %s -functionattrs -S | FileCheck %s
; CHECK: define i32* @a(i32** nocapture readonly %p)
define i32* @a(i32** %p) {
%tmp = load i32** %p
ret i32* %tmp
}
; CHECK: define i32* @b(i32* %q)
define i32* @b(i32 *%q) {
%mem = alloca i32*
store i32* %q, i32** %mem
%tmp = call i32* @a(i32** %mem)
ret i32* %tmp
}
; CHECK: define i32* @c(i32* readnone %r)
@g = global i32 0
define i32* @c(i32 *%r) {
%a = icmp eq i32* %r, null
store i32 1, i32* @g
ret i32* %r
}