xref: /llvm-project/llvm/test/CodeGen/AMDGPU/indirect-call-set-from-other-function.ll (revision 7dbd6cd2946ec3a9b4ad2dfd7ead177baac15bd7)
153d33d3bSShilei Tian; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals
253d33d3bSShilei Tian; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-attributor %s -o - | FileCheck %s
353d33d3bSShilei Tian
453d33d3bSShilei Tian@g_fn = addrspace(1) global ptr null
553d33d3bSShilei Tian
653d33d3bSShilei Tian;.
753d33d3bSShilei Tian; CHECK: @g_fn = addrspace(1) global ptr null
853d33d3bSShilei Tian;.
953d33d3bSShilei Tiandefine void @set_fn(ptr %fn) {
1053d33d3bSShilei Tian; CHECK-LABEL: define {{[^@]+}}@set_fn
1153d33d3bSShilei Tian; CHECK-SAME: (ptr [[FN:%.*]]) #[[ATTR0:[0-9]+]] {
1253d33d3bSShilei Tian; CHECK-NEXT:  entry:
1353d33d3bSShilei Tian; CHECK-NEXT:    store ptr [[FN]], ptr addrspace(1) @g_fn, align 8
1453d33d3bSShilei Tian; CHECK-NEXT:    ret void
1553d33d3bSShilei Tian;
1653d33d3bSShilei Tianentry:
1753d33d3bSShilei Tian  store ptr %fn, ptr addrspace(1) @g_fn
1853d33d3bSShilei Tian  ret void
1953d33d3bSShilei Tian}
2053d33d3bSShilei Tian
2153d33d3bSShilei Tiandefine void @get_fn(ptr %fn) {
2253d33d3bSShilei Tian; CHECK-LABEL: define {{[^@]+}}@get_fn
2353d33d3bSShilei Tian; CHECK-SAME: (ptr [[FN:%.*]]) #[[ATTR0]] {
2453d33d3bSShilei Tian; CHECK-NEXT:  entry:
2553d33d3bSShilei Tian; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr addrspace(1) @g_fn, align 8
2653d33d3bSShilei Tian; CHECK-NEXT:    store ptr [[LOAD]], ptr [[FN]], align 8
2753d33d3bSShilei Tian; CHECK-NEXT:    ret void
2853d33d3bSShilei Tian;
2953d33d3bSShilei Tianentry:
3053d33d3bSShilei Tian  %load = load ptr, ptr addrspace(1) @g_fn
3153d33d3bSShilei Tian  store ptr %load, ptr %fn
3253d33d3bSShilei Tian  ret void
3353d33d3bSShilei Tian}
3453d33d3bSShilei Tian
3553d33d3bSShilei Tiandefine void @foo() {
3653d33d3bSShilei Tian; CHECK-LABEL: define {{[^@]+}}@foo
3753d33d3bSShilei Tian; CHECK-SAME: () #[[ATTR1:[0-9]+]] {
3853d33d3bSShilei Tian; CHECK-NEXT:  entry:
3953d33d3bSShilei Tian; CHECK-NEXT:    [[FN:%.*]] = alloca ptr, align 8, addrspace(5)
4053d33d3bSShilei Tian; CHECK-NEXT:    store ptr null, ptr addrspace(5) [[FN]], align 8
4153d33d3bSShilei Tian; CHECK-NEXT:    [[FN_CAST:%.*]] = addrspacecast ptr addrspace(5) [[FN]] to ptr
4253d33d3bSShilei Tian; CHECK-NEXT:    call void @get_fn(ptr [[FN_CAST]])
4353d33d3bSShilei Tian; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr addrspace(5) [[FN]], align 8
4453d33d3bSShilei Tian; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne ptr [[LOAD]], null
4553d33d3bSShilei Tian; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
4653d33d3bSShilei Tian; CHECK:       if.then:
4753d33d3bSShilei Tian; CHECK-NEXT:    [[LOAD_1:%.*]] = load ptr, ptr addrspace(5) [[FN]], align 8
4853d33d3bSShilei Tian; CHECK-NEXT:    call void [[LOAD_1]]()
4953d33d3bSShilei Tian; CHECK-NEXT:    br label [[IF_END]]
5053d33d3bSShilei Tian; CHECK:       if.end:
5153d33d3bSShilei Tian; CHECK-NEXT:    ret void
5253d33d3bSShilei Tian;
5353d33d3bSShilei Tianentry:
5453d33d3bSShilei Tian  %fn = alloca ptr, addrspace(5)
5553d33d3bSShilei Tian  store ptr null, ptr addrspace(5) %fn
5653d33d3bSShilei Tian  %fn.cast = addrspacecast ptr addrspace(5) %fn to ptr
5753d33d3bSShilei Tian  call void @get_fn(ptr %fn.cast)
5853d33d3bSShilei Tian  %load = load ptr, ptr addrspace(5) %fn
5953d33d3bSShilei Tian  %tobool = icmp ne ptr %load, null
6053d33d3bSShilei Tian  br i1 %tobool, label %if.then, label %if.end
6153d33d3bSShilei Tian
6253d33d3bSShilei Tianif.then:
6353d33d3bSShilei Tian  %load.1 = load ptr, ptr addrspace(5) %fn
6453d33d3bSShilei Tian  call void %load.1()
6553d33d3bSShilei Tian  br label %if.end
6653d33d3bSShilei Tian
6753d33d3bSShilei Tianif.end:
6853d33d3bSShilei Tian  ret void
6953d33d3bSShilei Tian}
7053d33d3bSShilei Tian;.
71*7dbd6cd2SShilei Tian; CHECK: attributes #[[ATTR0]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }
72*7dbd6cd2SShilei Tian; CHECK: attributes #[[ATTR1]] = { "uniform-work-group-size"="false" }
7353d33d3bSShilei Tian;.
74