1; RUN: opt -S -rewrite-statepoints-for-gc  < %s | FileCheck %s
2; RUN: opt -S -passes=rewrite-statepoints-for-gc  < %s | FileCheck %s
3
4
5; Ensure we're stipping attributes from the function signatures which are invalid
6; after inserting safepoints with explicit memory semantics
7
8declare void @f()
9
10define i8 addrspace(1)* @deref_arg(i8 addrspace(1)* dereferenceable(16) %arg) gc "statepoint-example" {
11; CHECK: define i8 addrspace(1)* @deref_arg(i8 addrspace(1)* %arg)
12  call void @f()
13  ret i8 addrspace(1)* %arg
14}
15
16define dereferenceable(16) i8 addrspace(1)* @deref_ret(i8 addrspace(1)* %arg) gc "statepoint-example" {
17; CHECK: define i8 addrspace(1)* @deref_ret(i8 addrspace(1)* %arg)
18  call void @f()
19  ret i8 addrspace(1)* %arg
20}
21
22define i8 addrspace(1)* @deref_or_null_arg(i8 addrspace(1)* dereferenceable_or_null(16) %arg) gc "statepoint-example" {
23; CHECK: define i8 addrspace(1)* @deref_or_null_arg(i8 addrspace(1)* %arg)
24  call void @f()
25  ret i8 addrspace(1)* %arg
26}
27
28define dereferenceable_or_null(16) i8 addrspace(1)* @deref_or_null_ret(i8 addrspace(1)* %arg) gc "statepoint-example" {
29; CHECK: define i8 addrspace(1)* @deref_or_null_ret(i8 addrspace(1)* %arg)
30  call void @f()
31  ret i8 addrspace(1)* %arg
32}
33
34define i8 addrspace(1)* @noalias_arg(i8 addrspace(1)* noalias %arg) gc "statepoint-example" {
35; CHECK: define i8 addrspace(1)* @noalias_arg(i8 addrspace(1)* %arg)
36  call void @f()
37  ret i8 addrspace(1)* %arg
38}
39
40define noalias i8 addrspace(1)* @noalias_ret(i8 addrspace(1)* %arg) gc "statepoint-example" {
41; CHECK: define i8 addrspace(1)* @noalias_ret(i8 addrspace(1)* %arg)
42  call void @f()
43  ret i8 addrspace(1)* %arg
44}
45
46define i8 addrspace(1)* @nofree(i8 addrspace(1)* nofree %arg) nofree gc "statepoint-example" {
47; CHECK: define i8 addrspace(1)* @nofree(i8 addrspace(1)* %arg) gc "statepoint-example" {
48  call void @f()
49  ret i8 addrspace(1)* %arg
50}
51
52define i8 addrspace(1)* @nosync(i8 addrspace(1)* %arg) nosync gc "statepoint-example" {
53; CHECK: define i8 addrspace(1)* @nosync(i8 addrspace(1)* %arg) gc "statepoint-example" {
54  call void @f()
55  ret i8 addrspace(1)* %arg
56}
57
58