93 lines · plain
1; RUN: opt -S -passes=rewrite-statepoints-for-gc < %s | FileCheck %s2 3 4; Ensure we're stipping attributes from the function signatures which are invalid5; after inserting safepoints with explicit memory semantics6 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) %arg13}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) %arg19}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) %arg25}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) %arg31}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) %arg37}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) %arg43}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) %arg49}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) %arg55}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) %arg61}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) %arg67}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) %arg73}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) %arg79}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) %arg85}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) %arg91}92 93