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