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