[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / uniform-work-group-multistep.ll
blobfe7d1d942e62b3cc68ac5213dc4b8a29032387dd
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-annotate-kernel-features < %s | FileCheck -check-prefixes=CHECK,AKF_CHECK %s
3 ; RUN: opt -S -mtriple=amdgcn-unknown-unknown -amdgpu-attributor < %s | FileCheck -check-prefixes=CHECK,ATTRIBUTOR_CHECK %s
5 ;.
6 ; CHECK: @[[G1:[a-zA-Z0-9_$"\\.-]+]] = global i32* null
7 ; CHECK: @[[G2:[a-zA-Z0-9_$"\\.-]+]] = global i32 0
8 ;.
9 define weak void @weak() {
10 ; AKF_CHECK-LABEL: define {{[^@]+}}@weak
11 ; AKF_CHECK-SAME: () #[[ATTR0:[0-9]+]] {
12 ; AKF_CHECK-NEXT:    call void @internal1()
13 ; AKF_CHECK-NEXT:    ret void
15 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@weak
16 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR0:[0-9]+]] {
17 ; ATTRIBUTOR_CHECK-NEXT:    call void @internal1() #[[ATTR5:[0-9]+]]
18 ; ATTRIBUTOR_CHECK-NEXT:    ret void
20   call void @internal1()
21   ret void
24 @G1 = global i32* null
26 define internal void @internal1() {
27 ; AKF_CHECK-LABEL: define {{[^@]+}}@internal1
28 ; AKF_CHECK-SAME: () #[[ATTR0]] {
29 ; AKF_CHECK-NEXT:    [[TMP1:%.*]] = load i32*, i32** @G1, align 8
30 ; AKF_CHECK-NEXT:    store i32 0, i32* [[TMP1]], align 4
31 ; AKF_CHECK-NEXT:    ret void
33 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@internal1
34 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR1:[0-9]+]] {
35 ; ATTRIBUTOR_CHECK-NEXT:    [[TMP1:%.*]] = load i32*, i32** @G1, align 8
36 ; ATTRIBUTOR_CHECK-NEXT:    store i32 0, i32* [[TMP1]], align 4
37 ; ATTRIBUTOR_CHECK-NEXT:    ret void
39   %1 = load i32*, i32** @G1
40   store i32 0, i32* %1
41   ret void
44 define amdgpu_kernel void @kernel1() #0 {
45 ; AKF_CHECK-LABEL: define {{[^@]+}}@kernel1
46 ; AKF_CHECK-SAME: () #[[ATTR1:[0-9]+]] {
47 ; AKF_CHECK-NEXT:    call void @weak()
48 ; AKF_CHECK-NEXT:    ret void
50 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@kernel1
51 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR2:[0-9]+]] {
52 ; ATTRIBUTOR_CHECK-NEXT:    call void @weak()
53 ; ATTRIBUTOR_CHECK-NEXT:    ret void
55   call void @weak()
56   ret void
59 @G2 = global i32 0
61 define internal void @internal3() {
62 ; AKF_CHECK-LABEL: define {{[^@]+}}@internal3
63 ; AKF_CHECK-SAME: () #[[ATTR2:[0-9]+]] {
64 ; AKF_CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* @G2, align 4
65 ; AKF_CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0
66 ; AKF_CHECK-NEXT:    br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
67 ; AKF_CHECK:       3:
68 ; AKF_CHECK-NEXT:    call void @internal4()
69 ; AKF_CHECK-NEXT:    call void @internal3()
70 ; AKF_CHECK-NEXT:    br label [[TMP4]]
71 ; AKF_CHECK:       4:
72 ; AKF_CHECK-NEXT:    ret void
74 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@internal3
75 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR3:[0-9]+]] {
76 ; ATTRIBUTOR_CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* @G2, align 4
77 ; ATTRIBUTOR_CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0
78 ; ATTRIBUTOR_CHECK-NEXT:    br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
79 ; ATTRIBUTOR_CHECK:       3:
80 ; ATTRIBUTOR_CHECK-NEXT:    call void @internal4() #[[ATTR6:[0-9]+]]
81 ; ATTRIBUTOR_CHECK-NEXT:    call void @internal3() #[[ATTR7:[0-9]+]]
82 ; ATTRIBUTOR_CHECK-NEXT:    br label [[TMP4]]
83 ; ATTRIBUTOR_CHECK:       4:
84 ; ATTRIBUTOR_CHECK-NEXT:    ret void
86   %1 = load i32, i32* @G2, align 4
87   %2 = icmp eq i32 %1, 0
88   br i1 %2, label %3, label %4
90   call void @internal4()
91   call void @internal3()
92   br label %4
94   ret void
97 define internal void @internal4() {
98 ; AKF_CHECK-LABEL: define {{[^@]+}}@internal4
99 ; AKF_CHECK-SAME: () #[[ATTR2]] {
100 ; AKF_CHECK-NEXT:    store i32 1, i32* @G2, align 4
101 ; AKF_CHECK-NEXT:    ret void
103 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@internal4
104 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR4:[0-9]+]] {
105 ; ATTRIBUTOR_CHECK-NEXT:    store i32 1, i32* @G2, align 4
106 ; ATTRIBUTOR_CHECK-NEXT:    ret void
108   store i32 1, i32* @G2, align 4
109   ret void
112 define internal void @internal2() {
113 ; AKF_CHECK-LABEL: define {{[^@]+}}@internal2
114 ; AKF_CHECK-SAME: () #[[ATTR2]] {
115 ; AKF_CHECK-NEXT:    call void @internal3()
116 ; AKF_CHECK-NEXT:    ret void
118 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@internal2
119 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR3]] {
120 ; ATTRIBUTOR_CHECK-NEXT:    call void @internal3() #[[ATTR7]]
121 ; ATTRIBUTOR_CHECK-NEXT:    ret void
123   call void @internal3()
124   ret void
127 define amdgpu_kernel void @kernel2() #0 {
128 ; AKF_CHECK-LABEL: define {{[^@]+}}@kernel2
129 ; AKF_CHECK-SAME: () #[[ATTR1]] {
130 ; AKF_CHECK-NEXT:    call void @internal2()
131 ; AKF_CHECK-NEXT:    ret void
133 ; ATTRIBUTOR_CHECK-LABEL: define {{[^@]+}}@kernel2
134 ; ATTRIBUTOR_CHECK-SAME: () #[[ATTR2]] {
135 ; ATTRIBUTOR_CHECK-NEXT:    call void @internal2() #[[ATTR5]]
136 ; ATTRIBUTOR_CHECK-NEXT:    ret void
138   call void @internal2()
139   ret void
142 attributes #0 = { "uniform-work-group-size"="true" }
145 ; AKF_CHECK: attributes #[[ATTR0]] = { "uniform-work-group-size"="false" }
146 ; AKF_CHECK: attributes #[[ATTR1]] = { "amdgpu-calls" "uniform-work-group-size"="true" }
147 ; AKF_CHECK: attributes #[[ATTR2]] = { "uniform-work-group-size"="true" }
149 ; ATTRIBUTOR_CHECK: attributes #[[ATTR0]] = { "uniform-work-group-size"="false" }
150 ; ATTRIBUTOR_CHECK: attributes #[[ATTR1]] = { nofree nosync nounwind willreturn "uniform-work-group-size"="false" }
151 ; ATTRIBUTOR_CHECK: attributes #[[ATTR2]] = { "amdgpu-calls" "uniform-work-group-size"="true" }
152 ; ATTRIBUTOR_CHECK: attributes #[[ATTR3]] = { nofree nosync nounwind "uniform-work-group-size"="true" }
153 ; ATTRIBUTOR_CHECK: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn writeonly "uniform-work-group-size"="true" }
154 ; ATTRIBUTOR_CHECK: attributes #[[ATTR5]] = { nounwind }
155 ; ATTRIBUTOR_CHECK: attributes #[[ATTR6]] = { nofree nosync nounwind willreturn writeonly }
156 ; ATTRIBUTOR_CHECK: attributes #[[ATTR7]] = { nofree nosync nounwind }