1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals 2; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-annotate-kernel-features %s | FileCheck -allow-unused-prefixes -check-prefixes=CHECK,AKF_CHECK %s 3; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -amdgpu-attributor %s | FileCheck -allow-unused-prefixes -check-prefixes=CHECK,ATTRIBUTOR_CHECK %s 4 5@x = global i32 0 6;. 7; CHECK: @[[X:[a-zA-Z0-9_$"\\.-]+]] = global i32 0 8;. 9define void @func1() { 10; CHECK-LABEL: define {{[^@]+}}@func1 11; CHECK-SAME: () #[[ATTR0:[0-9]+]] { 12; CHECK-NEXT: store i32 0, i32* @x, align 4 13; CHECK-NEXT: ret void 14; 15 store i32 0, i32* @x 16 ret void 17} 18 19define void @func4() { 20; CHECK-LABEL: define {{[^@]+}}@func4 21; CHECK-SAME: () #[[ATTR0]] { 22; CHECK-NEXT: store i32 0, i32* @x, align 4 23; CHECK-NEXT: ret void 24; 25 store i32 0, i32* @x 26 ret void 27} 28 29define void @func2() #0 { 30; AKF_CHECK-LABEL: define {{[^@]+}}@func2 31; AKF_CHECK-SAME: () #[[ATTR0]] { 32; AKF_CHECK-NEXT: call void @func4() 33; AKF_CHECK-NEXT: call void @func1() 34; AKF_CHECK-NEXT: ret void 35; 36; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@func2 37; ATTRIBUTOR_CHECK-SAME: () #[[ATTR0]] { 38; ATTRIBUTOR_CHECK-NEXT: call void @func4() #[[ATTR2:[0-9]+]] 39; ATTRIBUTOR_CHECK-NEXT: call void @func1() #[[ATTR2]] 40; ATTRIBUTOR_CHECK-NEXT: ret void 41; 42 call void @func4() 43 call void @func1() 44 ret void 45} 46 47define void @func3() { 48; AKF_CHECK-LABEL: define {{[^@]+}}@func3 49; AKF_CHECK-SAME: () #[[ATTR0]] { 50; AKF_CHECK-NEXT: call void @func1() 51; AKF_CHECK-NEXT: ret void 52; 53; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@func3 54; ATTRIBUTOR_CHECK-SAME: () #[[ATTR0]] { 55; ATTRIBUTOR_CHECK-NEXT: call void @func1() #[[ATTR2]] 56; ATTRIBUTOR_CHECK-NEXT: ret void 57; 58 call void @func1() 59 ret void 60} 61 62define amdgpu_kernel void @kernel3() #0 { 63; AKF_CHECK-LABEL: define {{[^@]+}}@kernel3 64; AKF_CHECK-SAME: () #[[ATTR1:[0-9]+]] { 65; AKF_CHECK-NEXT: call void @func2() 66; AKF_CHECK-NEXT: call void @func3() 67; AKF_CHECK-NEXT: ret void 68; 69; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@kernel3 70; ATTRIBUTOR_CHECK-SAME: () #[[ATTR1:[0-9]+]] { 71; ATTRIBUTOR_CHECK-NEXT: call void @func2() #[[ATTR2]] 72; ATTRIBUTOR_CHECK-NEXT: call void @func3() #[[ATTR2]] 73; ATTRIBUTOR_CHECK-NEXT: ret void 74; 75 call void @func2() 76 call void @func3() 77 ret void 78} 79 80attributes #0 = { "uniform-work-group-size"="false" } 81;. 82; AKF_CHECK: attributes #[[ATTR0]] = { "uniform-work-group-size"="false" } 83; AKF_CHECK: attributes #[[ATTR1]] = { "amdgpu-calls" "uniform-work-group-size"="false" } 84;. 85; ATTRIBUTOR_CHECK: attributes #[[ATTR0]] = { nounwind writeonly "uniform-work-group-size"="false" } 86; ATTRIBUTOR_CHECK: attributes #[[ATTR1]] = { "amdgpu-calls" "uniform-work-group-size"="false" } 87; ATTRIBUTOR_CHECK: attributes #[[ATTR2]] = { nounwind writeonly } 88;. 89