[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / llvm.amdgcn.image.load.3d.a16.ll
blob45d0964ea9aa7866e2e3505855105aa3a8860025
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s
6 define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw(<8 x i32> inreg %rsrc, i16 %s, i16 %t, i16 %r) {
7 ; GFX9-LABEL: load_3d_v4f32_xyzw:
8 ; GFX9:       ; %bb.0:
9 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
10 ; GFX9-NEXT:    s_mov_b32 s0, s2
11 ; GFX9-NEXT:    s_mov_b32 s1, s3
12 ; GFX9-NEXT:    s_mov_b32 s2, s4
13 ; GFX9-NEXT:    s_mov_b32 s3, s5
14 ; GFX9-NEXT:    s_mov_b32 s4, s6
15 ; GFX9-NEXT:    s_mov_b32 s5, s7
16 ; GFX9-NEXT:    s_mov_b32 s6, s8
17 ; GFX9-NEXT:    s_mov_b32 s7, s9
18 ; GFX9-NEXT:    v_lshl_or_b32 v1, v1, 16, v0
19 ; GFX9-NEXT:    image_load v[0:3], v[1:2], s[0:7] dmask:0xf unorm a16
20 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
21 ; GFX9-NEXT:    ; return to shader part epilog
23 ; GFX10PLUS-LABEL: load_3d_v4f32_xyzw:
24 ; GFX10PLUS:       ; %bb.0:
25 ; GFX10PLUS-NEXT:    v_and_b32_e32 v0, 0xffff, v0
26 ; GFX10PLUS-NEXT:    s_mov_b32 s0, s2
27 ; GFX10PLUS-NEXT:    s_mov_b32 s1, s3
28 ; GFX10PLUS-NEXT:    s_mov_b32 s2, s4
29 ; GFX10PLUS-NEXT:    s_mov_b32 s3, s5
30 ; GFX10PLUS-NEXT:    v_lshl_or_b32 v1, v1, 16, v0
31 ; GFX10PLUS-NEXT:    s_mov_b32 s4, s6
32 ; GFX10PLUS-NEXT:    s_mov_b32 s5, s7
33 ; GFX10PLUS-NEXT:    s_mov_b32 s6, s8
34 ; GFX10PLUS-NEXT:    s_mov_b32 s7, s9
35 ; GFX10PLUS-NEXT:    image_load v[0:3], v[1:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16
36 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
37 ; GFX10PLUS-NEXT:    ; return to shader part epilog
38   %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)
39   ret <4 x float> %v
42 define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %r) {
43 ; GFX9-LABEL: load_3d_v4f32_xyzw_tfe:
44 ; GFX9:       ; %bb.0:
45 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
46 ; GFX9-NEXT:    v_mov_b32_e32 v7, 0
47 ; GFX9-NEXT:    v_mov_b32_e32 v6, v2
48 ; GFX9-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
49 ; GFX9-NEXT:    v_mov_b32_e32 v8, v7
50 ; GFX9-NEXT:    v_mov_b32_e32 v9, v7
51 ; GFX9-NEXT:    v_mov_b32_e32 v10, v7
52 ; GFX9-NEXT:    v_mov_b32_e32 v11, v7
53 ; GFX9-NEXT:    v_mov_b32_e32 v0, v7
54 ; GFX9-NEXT:    s_mov_b32 s0, s2
55 ; GFX9-NEXT:    s_mov_b32 s1, s3
56 ; GFX9-NEXT:    s_mov_b32 s2, s4
57 ; GFX9-NEXT:    s_mov_b32 s3, s5
58 ; GFX9-NEXT:    s_mov_b32 s4, s6
59 ; GFX9-NEXT:    s_mov_b32 s5, s7
60 ; GFX9-NEXT:    s_mov_b32 s6, s8
61 ; GFX9-NEXT:    s_mov_b32 s7, s9
62 ; GFX9-NEXT:    v_mov_b32_e32 v1, v8
63 ; GFX9-NEXT:    v_mov_b32_e32 v2, v9
64 ; GFX9-NEXT:    v_mov_b32_e32 v3, v10
65 ; GFX9-NEXT:    v_mov_b32_e32 v4, v11
66 ; GFX9-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm a16 tfe
67 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX9-NEXT:    global_store_dword v7, v4, s[10:11]
69 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
70 ; GFX9-NEXT:    ; return to shader part epilog
72 ; GFX10-LABEL: load_3d_v4f32_xyzw_tfe:
73 ; GFX10:       ; %bb.0:
74 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
75 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
76 ; GFX10-NEXT:    v_mov_b32_e32 v6, v2
77 ; GFX10-NEXT:    s_mov_b32 s0, s2
78 ; GFX10-NEXT:    s_mov_b32 s1, s3
79 ; GFX10-NEXT:    v_mov_b32_e32 v8, v7
80 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
81 ; GFX10-NEXT:    v_mov_b32_e32 v10, v7
82 ; GFX10-NEXT:    v_mov_b32_e32 v11, v7
83 ; GFX10-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
84 ; GFX10-NEXT:    s_mov_b32 s2, s4
85 ; GFX10-NEXT:    s_mov_b32 s3, s5
86 ; GFX10-NEXT:    s_mov_b32 s4, s6
87 ; GFX10-NEXT:    s_mov_b32 s5, s7
88 ; GFX10-NEXT:    s_mov_b32 s6, s8
89 ; GFX10-NEXT:    s_mov_b32 s7, s9
90 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
91 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
92 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
93 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
94 ; GFX10-NEXT:    v_mov_b32_e32 v4, v11
95 ; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe
96 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
97 ; GFX10-NEXT:    global_store_dword v7, v4, s[10:11]
98 ; GFX10-NEXT:    ; return to shader part epilog
100 ; GFX11-LABEL: load_3d_v4f32_xyzw_tfe:
101 ; GFX11:       ; %bb.0:
102 ; GFX11-NEXT:    v_dual_mov_b32 v6, v2 :: v_dual_mov_b32 v7, 0
103 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
104 ; GFX11-NEXT:    s_mov_b32 s0, s2
105 ; GFX11-NEXT:    s_mov_b32 s1, s3
106 ; GFX11-NEXT:    s_mov_b32 s2, s4
107 ; GFX11-NEXT:    v_mov_b32_e32 v9, v7
108 ; GFX11-NEXT:    v_mov_b32_e32 v8, v7
109 ; GFX11-NEXT:    v_mov_b32_e32 v10, v7
110 ; GFX11-NEXT:    v_mov_b32_e32 v11, v7
111 ; GFX11-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
112 ; GFX11-NEXT:    s_mov_b32 s3, s5
113 ; GFX11-NEXT:    s_mov_b32 s4, s6
114 ; GFX11-NEXT:    s_mov_b32 s5, s7
115 ; GFX11-NEXT:    s_mov_b32 s6, s8
116 ; GFX11-NEXT:    s_mov_b32 s7, s9
117 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
118 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
119 ; GFX11-NEXT:    v_mov_b32_e32 v4, v11
120 ; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe
121 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
122 ; GFX11-NEXT:    global_store_b32 v7, v4, s[10:11]
123 ; GFX11-NEXT:    ; return to shader part epilog
124   %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 1, i32 0)
125   %v.vec = extractvalue { <4 x float>, i32 } %v, 0
126   %v.err = extractvalue { <4 x float>, i32 } %v, 1
127   store i32 %v.err, ptr addrspace(1) %out, align 4
128   ret <4 x float> %v.vec
131 define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %r) {
132 ; GFX9-LABEL: load_3d_v4f32_xyzw_tfe_lwe:
133 ; GFX9:       ; %bb.0:
134 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
135 ; GFX9-NEXT:    v_mov_b32_e32 v7, 0
136 ; GFX9-NEXT:    v_mov_b32_e32 v6, v2
137 ; GFX9-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
138 ; GFX9-NEXT:    v_mov_b32_e32 v8, v7
139 ; GFX9-NEXT:    v_mov_b32_e32 v9, v7
140 ; GFX9-NEXT:    v_mov_b32_e32 v10, v7
141 ; GFX9-NEXT:    v_mov_b32_e32 v11, v7
142 ; GFX9-NEXT:    v_mov_b32_e32 v0, v7
143 ; GFX9-NEXT:    s_mov_b32 s0, s2
144 ; GFX9-NEXT:    s_mov_b32 s1, s3
145 ; GFX9-NEXT:    s_mov_b32 s2, s4
146 ; GFX9-NEXT:    s_mov_b32 s3, s5
147 ; GFX9-NEXT:    s_mov_b32 s4, s6
148 ; GFX9-NEXT:    s_mov_b32 s5, s7
149 ; GFX9-NEXT:    s_mov_b32 s6, s8
150 ; GFX9-NEXT:    s_mov_b32 s7, s9
151 ; GFX9-NEXT:    v_mov_b32_e32 v1, v8
152 ; GFX9-NEXT:    v_mov_b32_e32 v2, v9
153 ; GFX9-NEXT:    v_mov_b32_e32 v3, v10
154 ; GFX9-NEXT:    v_mov_b32_e32 v4, v11
155 ; GFX9-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm a16 tfe lwe
156 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
157 ; GFX9-NEXT:    global_store_dword v7, v4, s[10:11]
158 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
159 ; GFX9-NEXT:    ; return to shader part epilog
161 ; GFX10-LABEL: load_3d_v4f32_xyzw_tfe_lwe:
162 ; GFX10:       ; %bb.0:
163 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
164 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
165 ; GFX10-NEXT:    v_mov_b32_e32 v6, v2
166 ; GFX10-NEXT:    s_mov_b32 s0, s2
167 ; GFX10-NEXT:    s_mov_b32 s1, s3
168 ; GFX10-NEXT:    v_mov_b32_e32 v8, v7
169 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
170 ; GFX10-NEXT:    v_mov_b32_e32 v10, v7
171 ; GFX10-NEXT:    v_mov_b32_e32 v11, v7
172 ; GFX10-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
173 ; GFX10-NEXT:    s_mov_b32 s2, s4
174 ; GFX10-NEXT:    s_mov_b32 s3, s5
175 ; GFX10-NEXT:    s_mov_b32 s4, s6
176 ; GFX10-NEXT:    s_mov_b32 s5, s7
177 ; GFX10-NEXT:    s_mov_b32 s6, s8
178 ; GFX10-NEXT:    s_mov_b32 s7, s9
179 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
180 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
181 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
182 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
183 ; GFX10-NEXT:    v_mov_b32_e32 v4, v11
184 ; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe lwe
185 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
186 ; GFX10-NEXT:    global_store_dword v7, v4, s[10:11]
187 ; GFX10-NEXT:    ; return to shader part epilog
189 ; GFX11-LABEL: load_3d_v4f32_xyzw_tfe_lwe:
190 ; GFX11:       ; %bb.0:
191 ; GFX11-NEXT:    v_dual_mov_b32 v6, v2 :: v_dual_mov_b32 v7, 0
192 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
193 ; GFX11-NEXT:    s_mov_b32 s0, s2
194 ; GFX11-NEXT:    s_mov_b32 s1, s3
195 ; GFX11-NEXT:    s_mov_b32 s2, s4
196 ; GFX11-NEXT:    v_mov_b32_e32 v9, v7
197 ; GFX11-NEXT:    v_mov_b32_e32 v8, v7
198 ; GFX11-NEXT:    v_mov_b32_e32 v10, v7
199 ; GFX11-NEXT:    v_mov_b32_e32 v11, v7
200 ; GFX11-NEXT:    v_lshl_or_b32 v5, v1, 16, v0
201 ; GFX11-NEXT:    s_mov_b32 s3, s5
202 ; GFX11-NEXT:    s_mov_b32 s4, s6
203 ; GFX11-NEXT:    s_mov_b32 s5, s7
204 ; GFX11-NEXT:    s_mov_b32 s6, s8
205 ; GFX11-NEXT:    s_mov_b32 s7, s9
206 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
207 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
208 ; GFX11-NEXT:    v_mov_b32_e32 v4, v11
209 ; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe lwe
210 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
211 ; GFX11-NEXT:    global_store_b32 v7, v4, s[10:11]
212 ; GFX11-NEXT:    ; return to shader part epilog
213   %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 3, i32 0)
214   %v.vec = extractvalue { <4 x float>, i32 } %v, 0
215   %v.err = extractvalue { <4 x float>, i32 } %v, 1
216   store i32 %v.err, ptr addrspace(1) %out, align 4
217   ret <4 x float> %v.vec
220 declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 immarg, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
221 declare { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 immarg, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
223 attributes #0 = { nounwind readonly }