1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals 2; RUN: opt -S -mtriple=amdgcn-unknown-unknown -amdgpu-attributor < %s | FileCheck %s 3 4;. 5; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = global i32* null 6; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = global i32 0 7;. 8define weak void @weak() { 9; CHECK-LABEL: define {{[^@]+}}@weak 10; CHECK-SAME: () #[[ATTR0:[0-9]+]] { 11; CHECK-NEXT: call void @internal1() 12; CHECK-NEXT: ret void 13; 14 call void @internal1() 15 ret void 16} 17 18@G1 = global i32* null 19 20define internal void @internal1() { 21; CHECK-LABEL: define {{[^@]+}}@internal1 22; CHECK-SAME: () #[[ATTR0]] { 23; CHECK-NEXT: [[TMP1:%.*]] = load i32*, i32** @G1, align 8 24; CHECK-NEXT: store i32 0, i32* [[TMP1]], align 4 25; CHECK-NEXT: ret void 26; 27 %1 = load i32*, i32** @G1 28 store i32 0, i32* %1 29 ret void 30} 31 32define amdgpu_kernel void @kernel1() #0 { 33; CHECK-LABEL: define {{[^@]+}}@kernel1 34; CHECK-SAME: () #[[ATTR1:[0-9]+]] { 35; CHECK-NEXT: call void @weak() 36; CHECK-NEXT: ret void 37; 38 call void @weak() 39 ret void 40} 41 42@G2 = global i32 0 43 44define internal void @internal3() { 45; CHECK-LABEL: define {{[^@]+}}@internal3 46; CHECK-SAME: () #[[ATTR1]] { 47; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @G2, align 4 48; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 49; CHECK-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]] 50; CHECK: 3: 51; CHECK-NEXT: call void @internal4() 52; CHECK-NEXT: call void @internal3() 53; CHECK-NEXT: br label [[TMP4]] 54; CHECK: 4: 55; CHECK-NEXT: ret void 56; 57 %1 = load i32, i32* @G2, align 4 58 %2 = icmp eq i32 %1, 0 59 br i1 %2, label %3, label %4 603: 61 call void @internal4() 62 call void @internal3() 63 br label %4 644: 65 ret void 66} 67 68define internal void @internal4() { 69; CHECK-LABEL: define {{[^@]+}}@internal4 70; CHECK-SAME: () #[[ATTR1]] { 71; CHECK-NEXT: store i32 1, i32* @G2, align 4 72; CHECK-NEXT: ret void 73; 74 store i32 1, i32* @G2, align 4 75 ret void 76} 77 78define internal void @internal2() { 79; CHECK-LABEL: define {{[^@]+}}@internal2 80; CHECK-SAME: () #[[ATTR1]] { 81; CHECK-NEXT: call void @internal3() 82; CHECK-NEXT: ret void 83; 84 call void @internal3() 85 ret void 86} 87 88define amdgpu_kernel void @kernel2() #0 { 89; CHECK-LABEL: define {{[^@]+}}@kernel2 90; CHECK-SAME: () #[[ATTR1]] { 91; CHECK-NEXT: call void @internal2() 92; CHECK-NEXT: ret void 93; 94 call void @internal2() 95 ret void 96} 97 98attributes #0 = { "uniform-work-group-size"="true" } 99;. 100; CHECK: attributes #[[ATTR0]] = { "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "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" } 101; CHECK: attributes #[[ATTR1]] = { "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "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"="true" } 102;. 103