1
+ ; RUN: opt -S -mtriple=amdgcn-unknown-unknown < %s | FileCheck %s
2
+
3
+ define amdgpu_ps float @atomic_swap_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
4
+ main_body:
5
+ %v = call i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
6
+ %out = bitcast i32 %v to float
7
+ ret float %out
8
+ }
9
+
10
+ define amdgpu_ps <2 x float > @atomic_swap_1d_i64 (<8 x i32 > inreg %rsrc , i64 %data , i32 %s ) {
11
+ main_body:
12
+ %v = call i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32 (i64 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
13
+ %out = bitcast i64 %v to <2 x float >
14
+ ret <2 x float > %out
15
+ }
16
+
17
+ define amdgpu_ps float @atomic_add_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
18
+ main_body:
19
+ %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
20
+ %out = bitcast i32 %v to float
21
+ ret float %out
22
+ }
23
+
24
+ define amdgpu_ps float @atomic_sub_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
25
+ main_body:
26
+ %v = call i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
27
+ %out = bitcast i32 %v to float
28
+ ret float %out
29
+ }
30
+
31
+ define amdgpu_ps float @atomic_smin_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
32
+ main_body:
33
+ %v = call i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
34
+ %out = bitcast i32 %v to float
35
+ ret float %out
36
+ }
37
+
38
+ define amdgpu_ps float @atomic_umin_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
39
+ main_body:
40
+ %v = call i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
41
+ %out = bitcast i32 %v to float
42
+ ret float %out
43
+ }
44
+
45
+ define amdgpu_ps float @atomic_smax_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
46
+ main_body:
47
+ %v = call i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
48
+ %out = bitcast i32 %v to float
49
+ ret float %out
50
+ }
51
+
52
+ define amdgpu_ps float @atomic_umax_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
53
+ main_body:
54
+ %v = call i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
55
+ %out = bitcast i32 %v to float
56
+ ret float %out
57
+ }
58
+
59
+ define amdgpu_ps float @atomic_and_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
60
+ main_body:
61
+ %v = call i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
62
+ %out = bitcast i32 %v to float
63
+ ret float %out
64
+ }
65
+
66
+ define amdgpu_ps float @atomic_or_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
67
+ main_body:
68
+ %v = call i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
69
+ %out = bitcast i32 %v to float
70
+ ret float %out
71
+ }
72
+
73
+ define amdgpu_ps float @atomic_xor_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
74
+ main_body:
75
+ %v = call i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
76
+ %out = bitcast i32 %v to float
77
+ ret float %out
78
+ }
79
+
80
+ define amdgpu_ps float @atomic_inc_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
81
+ main_body:
82
+ %v = call i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
83
+ %out = bitcast i32 %v to float
84
+ ret float %out
85
+ }
86
+
87
+ define amdgpu_ps float @atomic_dec_1d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
88
+ main_body:
89
+ %v = call i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
90
+ %out = bitcast i32 %v to float
91
+ ret float %out
92
+ }
93
+
94
+ define amdgpu_ps float @atomic_cmpswap_1d (<8 x i32 > inreg %rsrc , i32 %cmp , i32 %swap , i32 %s ) {
95
+ main_body:
96
+ %v = call i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32 (i32 %cmp , i32 %swap , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
97
+ %out = bitcast i32 %v to float
98
+ ret float %out
99
+ }
100
+
101
+ define amdgpu_ps <2 x float > @atomic_cmpswap_1d_64 (<8 x i32 > inreg %rsrc , i64 %cmp , i64 %swap , i32 %s ) {
102
+ main_body:
103
+ %v = call i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32 (i64 %cmp , i64 %swap , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 0 )
104
+ %out = bitcast i64 %v to <2 x float >
105
+ ret <2 x float > %out
106
+ }
107
+
108
+ define amdgpu_ps float @atomic_add_2d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t ) {
109
+ main_body:
110
+ %v = call i32 @llvm.amdgcn.image.atomic.add.2d.i32.i32 (i32 %data , i32 %s , i32 %t , <8 x i32 > %rsrc , i32 0 , i32 0 )
111
+ %out = bitcast i32 %v to float
112
+ ret float %out
113
+ }
114
+
115
+ define amdgpu_ps float @atomic_add_3d (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t , i32 %r ) {
116
+ main_body:
117
+ %v = call i32 @llvm.amdgcn.image.atomic.add.3d.i32.i32 (i32 %data , i32 %s , i32 %t , i32 %r , <8 x i32 > %rsrc , i32 0 , i32 0 )
118
+ %out = bitcast i32 %v to float
119
+ ret float %out
120
+ }
121
+
122
+ define amdgpu_ps float @atomic_add_cube (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t , i32 %face ) {
123
+ main_body:
124
+ %v = call i32 @llvm.amdgcn.image.atomic.add.cube.i32.i32 (i32 %data , i32 %s , i32 %t , i32 %face , <8 x i32 > %rsrc , i32 0 , i32 0 )
125
+ %out = bitcast i32 %v to float
126
+ ret float %out
127
+ }
128
+
129
+ define amdgpu_ps float @atomic_add_1darray (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %slice ) {
130
+ main_body:
131
+ %v = call i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i32 (i32 %data , i32 %s , i32 %slice , <8 x i32 > %rsrc , i32 0 , i32 0 )
132
+ %out = bitcast i32 %v to float
133
+ ret float %out
134
+ }
135
+
136
+ define amdgpu_ps float @atomic_add_2darray (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t , i32 %slice ) {
137
+ main_body:
138
+ %v = call i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i32 (i32 %data , i32 %s , i32 %t , i32 %slice , <8 x i32 > %rsrc , i32 0 , i32 0 )
139
+ %out = bitcast i32 %v to float
140
+ ret float %out
141
+ }
142
+
143
+ define amdgpu_ps float @atomic_add_2dmsaa (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t , i32 %fragid ) {
144
+ main_body:
145
+ %v = call i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i32 (i32 %data , i32 %s , i32 %t , i32 %fragid , <8 x i32 > %rsrc , i32 0 , i32 0 )
146
+ %out = bitcast i32 %v to float
147
+ ret float %out
148
+ }
149
+
150
+ define amdgpu_ps float @atomic_add_2darraymsaa (<8 x i32 > inreg %rsrc , i32 %data , i32 %s , i32 %t , i32 %slice , i32 %fragid ) {
151
+ main_body:
152
+ %v = call i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i32 (i32 %data , i32 %s , i32 %t , i32 %slice , i32 %fragid , <8 x i32 > %rsrc , i32 0 , i32 0 )
153
+ %out = bitcast i32 %v to float
154
+ ret float %out
155
+ }
156
+
157
+ define amdgpu_ps float @atomic_add_1d_slc (<8 x i32 > inreg %rsrc , i32 %data , i32 %s ) {
158
+ main_body:
159
+ %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32 (i32 %data , i32 %s , <8 x i32 > %rsrc , i32 0 , i32 2 )
160
+ %out = bitcast i32 %v to float
161
+ ret float %out
162
+ }
163
+
164
+ declare i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
165
+ declare i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
166
+ declare i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
167
+ declare i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
168
+ declare i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
169
+ declare i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
170
+ declare i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
171
+ declare i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
172
+ declare i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
173
+ declare i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
174
+ declare i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
175
+ declare i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32 (i32 , i32 , <8 x i32 >, i32 , i32 ) #0
176
+ declare i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32 (i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
177
+
178
+ declare i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32 (i64 , i32 , <8 x i32 >, i32 , i32 ) #0
179
+ declare i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32 (i64 , i64 , i32 , <8 x i32 >, i32 , i32 ) #0
180
+
181
+ declare i32 @llvm.amdgcn.image.atomic.add.2d.i32.i32 (i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
182
+ declare i32 @llvm.amdgcn.image.atomic.add.3d.i32.i32 (i32 , i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
183
+ declare i32 @llvm.amdgcn.image.atomic.add.cube.i32.i32 (i32 , i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
184
+ declare i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i32 (i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
185
+ declare i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i32 (i32 , i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
186
+ declare i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i32 (i32 , i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
187
+ declare i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i32 (i32 , i32 , i32 , i32 , i32 , <8 x i32 >, i32 , i32 ) #0
188
+
189
+ ;.
190
+ ; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nounwind willreturn }
191
+ ;.
0 commit comments