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