11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 
22; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefixes=SI %s 
33; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=VI %s 
4- ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s 
5- ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s 
4+ ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11-TRUE16 %s 
5+ ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11-FAKE16 %s 
6+ ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12-TRUE16 %s 
7+ ; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12-FAKE16 %s 
68
79declare  half  @llvm.sqrt.f16 (half  %a )
810declare  <2  x half > @llvm.sqrt.v2f16 (<2  x half > %a )
@@ -81,6 +83,42 @@ define amdgpu_kernel void @sqrt_f16(
8183; GFX11-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0 
8284; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 0 
8385; GFX11-FAKE16-NEXT:    s_endpgm 
86+ ; 
87+ ; GFX12-TRUE16-LABEL: sqrt_f16: 
88+ ; GFX12-TRUE16:       ; %bb.0: ; %entry 
89+ ; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24 
90+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s6, -1 
91+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000 
92+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s10, s6 
93+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s11, s7 
94+ ; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0 
95+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s8, s2 
96+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s9, s3 
97+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s4, s0 
98+ ; GFX12-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], null 
99+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s5, s1 
100+ ; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0 
101+ ; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l 
102+ ; GFX12-TRUE16-NEXT:    buffer_store_b16 v0, off, s[4:7], null 
103+ ; GFX12-TRUE16-NEXT:    s_endpgm 
104+ ; 
105+ ; GFX12-FAKE16-LABEL: sqrt_f16: 
106+ ; GFX12-FAKE16:       ; %bb.0: ; %entry 
107+ ; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24 
108+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s6, -1 
109+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000 
110+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s10, s6 
111+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s11, s7 
112+ ; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0 
113+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s8, s2 
114+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s9, s3 
115+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s4, s0 
116+ ; GFX12-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], null 
117+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s5, s1 
118+ ; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0 
119+ ; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0 
120+ ; GFX12-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], null 
121+ ; GFX12-FAKE16-NEXT:    s_endpgm 
84122    ptr  addrspace (1 ) %r ,
85123    ptr  addrspace (1 ) %a ) {
86124entry:
@@ -189,6 +227,50 @@ define amdgpu_kernel void @sqrt_v2f16(
189227; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1 
190228; GFX11-FAKE16-NEXT:    buffer_store_b32 v0, off, s[4:7], 0 
191229; GFX11-FAKE16-NEXT:    s_endpgm 
230+ ; 
231+ ; GFX12-TRUE16-LABEL: sqrt_v2f16: 
232+ ; GFX12-TRUE16:       ; %bb.0: ; %entry 
233+ ; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24 
234+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s6, -1 
235+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000 
236+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s10, s6 
237+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s11, s7 
238+ ; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0 
239+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s8, s2 
240+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s9, s3 
241+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s4, s0 
242+ ; GFX12-TRUE16-NEXT:    buffer_load_b32 v0, off, s[8:11], null 
243+ ; GFX12-TRUE16-NEXT:    s_mov_b32 s5, s1 
244+ ; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0 
245+ ; GFX12-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0 
246+ ; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l 
247+ ; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1) 
248+ ; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.h, v1.l 
249+ ; GFX12-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h 
250+ ; GFX12-TRUE16-NEXT:    buffer_store_b32 v0, off, s[4:7], null 
251+ ; GFX12-TRUE16-NEXT:    s_endpgm 
252+ ; 
253+ ; GFX12-FAKE16-LABEL: sqrt_v2f16: 
254+ ; GFX12-FAKE16:       ; %bb.0: ; %entry 
255+ ; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24 
256+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s6, -1 
257+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000 
258+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s10, s6 
259+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s11, s7 
260+ ; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0 
261+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s8, s2 
262+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s9, s3 
263+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s4, s0 
264+ ; GFX12-FAKE16-NEXT:    buffer_load_b32 v0, off, s[8:11], null 
265+ ; GFX12-FAKE16-NEXT:    s_mov_b32 s5, s1 
266+ ; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0 
267+ ; GFX12-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0 
268+ ; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0 
269+ ; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1) 
270+ ; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v1, v1 
271+ ; GFX12-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1 
272+ ; GFX12-FAKE16-NEXT:    buffer_store_b32 v0, off, s[4:7], null 
273+ ; GFX12-FAKE16-NEXT:    s_endpgm 
192274    ptr  addrspace (1 ) %r ,
193275    ptr  addrspace (1 ) %a ) {
194276entry:
@@ -197,5 +279,3 @@ entry:
197279  store  <2  x half > %r.val , ptr  addrspace (1 ) %r 
198280  ret  void 
199281}
200- ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 
201- ; GFX11: {{.*}} 
0 commit comments