1; RUN: opt -S -passes=rewrite-statepoints-for-gc < %s | FileCheck %s 2 3 4; Ensure we're stipping attributes from the function signatures which are invalid 5; after inserting safepoints with explicit memory semantics 6 7declare void @f() 8 9define ptr addrspace(1) @deref_arg(ptr addrspace(1) dereferenceable(16) %arg) gc "statepoint-example" { 10; CHECK: define ptr addrspace(1) @deref_arg(ptr addrspace(1) %arg) 11 call void @f() 12 ret ptr addrspace(1) %arg 13} 14 15define dereferenceable(16) ptr addrspace(1) @deref_ret(ptr addrspace(1) %arg) gc "statepoint-example" { 16; CHECK: define ptr addrspace(1) @deref_ret(ptr addrspace(1) %arg) 17 call void @f() 18 ret ptr addrspace(1) %arg 19} 20 21define ptr addrspace(1) @deref_or_null_arg(ptr addrspace(1) dereferenceable_or_null(16) %arg) gc "statepoint-example" { 22; CHECK: define ptr addrspace(1) @deref_or_null_arg(ptr addrspace(1) %arg) 23 call void @f() 24 ret ptr addrspace(1) %arg 25} 26 27define dereferenceable_or_null(16) ptr addrspace(1) @deref_or_null_ret(ptr addrspace(1) %arg) gc "statepoint-example" { 28; CHECK: define ptr addrspace(1) @deref_or_null_ret(ptr addrspace(1) %arg) 29 call void @f() 30 ret ptr addrspace(1) %arg 31} 32 33define ptr addrspace(1) @noalias_arg(ptr addrspace(1) noalias %arg) gc "statepoint-example" { 34; CHECK: define ptr addrspace(1) @noalias_arg(ptr addrspace(1) %arg) 35 call void @f() 36 ret ptr addrspace(1) %arg 37} 38 39define noalias ptr addrspace(1) @noalias_ret(ptr addrspace(1) %arg) gc "statepoint-example" { 40; CHECK: define ptr addrspace(1) @noalias_ret(ptr addrspace(1) %arg) 41 call void @f() 42 ret ptr addrspace(1) %arg 43} 44 45define ptr addrspace(1) @nofree(ptr addrspace(1) nofree %arg) nofree gc "statepoint-example" { 46; CHECK: define ptr addrspace(1) @nofree(ptr addrspace(1) %arg) gc "statepoint-example" { 47 call void @f() 48 ret ptr addrspace(1) %arg 49} 50 51define ptr addrspace(1) @nosync(ptr addrspace(1) %arg) nosync gc "statepoint-example" { 52; CHECK: define ptr addrspace(1) @nosync(ptr addrspace(1) %arg) gc "statepoint-example" { 53 call void @f() 54 ret ptr addrspace(1) %arg 55} 56 57define ptr addrspace(1) @readnone(ptr addrspace(1) readnone %arg) readnone gc "statepoint-example" { 58; CHECK: define ptr addrspace(1) @readnone(ptr addrspace(1) %arg) gc "statepoint-example" { 59 call void @f() 60 ret ptr addrspace(1) %arg 61} 62 63define ptr addrspace(1) @readonly(ptr addrspace(1) readonly %arg) readonly gc "statepoint-example" { 64; CHECK: define ptr addrspace(1) @readonly(ptr addrspace(1) %arg) gc "statepoint-example" { 65 call void @f() 66 ret ptr addrspace(1) %arg 67} 68 69define ptr addrspace(1) @writeonly(ptr addrspace(1) writeonly %arg) writeonly gc "statepoint-example" { 70; CHECK: define ptr addrspace(1) @writeonly(ptr addrspace(1) %arg) gc "statepoint-example" { 71 call void @f() 72 ret ptr addrspace(1) %arg 73} 74 75define ptr addrspace(1) @argmemonly(ptr addrspace(1) %arg) argmemonly gc "statepoint-example" { 76; CHECK: define ptr addrspace(1) @argmemonly(ptr addrspace(1) %arg) gc "statepoint-example" { 77 call void @f() 78 ret ptr addrspace(1) %arg 79} 80 81define ptr addrspace(1) @inaccessiblememonly(ptr addrspace(1) %arg) inaccessiblememonly gc "statepoint-example" { 82; CHECK: define ptr addrspace(1) @inaccessiblememonly(ptr addrspace(1) %arg) gc "statepoint-example" { 83 call void @f() 84 ret ptr addrspace(1) %arg 85} 86 87define ptr addrspace(1) @inaccessiblemem_or_argmemonly(ptr addrspace(1) %arg) inaccessiblemem_or_argmemonly gc "statepoint-example" { 88; CHECK: define ptr addrspace(1) @inaccessiblemem_or_argmemonly(ptr addrspace(1) %arg) gc "statepoint-example" { 89 call void @f() 90 ret ptr addrspace(1) %arg 91} 92 93