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