Skip to content

Commit d51e06c

Browse files
authored
[AMDGPU][True16] Fix the VGPR register class for 16-bit values. (#76170)
1 parent 7a48039 commit d51e06c

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2661,7 +2661,7 @@ SIRegisterInfo::getVGPRClassForBitWidth(unsigned BitWidth) const {
26612661
if (BitWidth == 1)
26622662
return &AMDGPU::VReg_1RegClass;
26632663
if (BitWidth == 16)
2664-
return &AMDGPU::VGPR_LO16RegClass;
2664+
return &AMDGPU::VGPR_16RegClass;
26652665
if (BitWidth == 32)
26662666
return &AMDGPU::VGPR_32RegClass;
26672667
return ST.needsAlignedVGPRs() ? getAlignedVGPRClassForBitWidth(BitWidth)

llvm/test/CodeGen/AMDGPU/fadd.f16.ll

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ define amdgpu_kernel void @fadd_f16(
100100
; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0)
101101
; GFX11-GISEL-NEXT: buffer_load_u16 v1, off, s[0:3], 0 glc dlc
102102
; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0)
103-
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l
103+
; GFX11-GISEL-NEXT: v_mov_b16_e32 v0.h, v1.l
104+
; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)
105+
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v0.h
104106
; GFX11-GISEL-NEXT: buffer_store_b16 v0, off, s[4:7], 0
105107
; GFX11-GISEL-NEXT: s_nop 0
106108
; GFX11-GISEL-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
@@ -257,13 +259,14 @@ define amdgpu_kernel void @fadd_f16_imm_a(
257259
; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[0:1], 0x24
258260
; GFX11-GISEL-NEXT: s_mov_b32 s6, -1
259261
; GFX11-GISEL-NEXT: s_mov_b32 s7, 0x31016000
260-
; GFX11-GISEL-NEXT: v_mov_b16_e32 v1.l, 0x3c00
261262
; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)
262263
; GFX11-GISEL-NEXT: s_mov_b64 s[4:5], s[2:3]
263264
; GFX11-GISEL-NEXT: s_mov_b64 s[2:3], s[6:7]
264265
; GFX11-GISEL-NEXT: buffer_load_u16 v0, off, s[4:7], 0
265266
; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0)
266-
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l
267+
; GFX11-GISEL-NEXT: v_mov_b16_e32 v0.h, 0x3c00
268+
; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)
269+
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v0.h
267270
; GFX11-GISEL-NEXT: buffer_store_b16 v0, off, s[0:3], 0
268271
; GFX11-GISEL-NEXT: s_nop 0
269272
; GFX11-GISEL-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
@@ -400,13 +403,14 @@ define amdgpu_kernel void @fadd_f16_imm_b(
400403
; GFX11-GISEL-NEXT: s_load_b128 s[0:3], s[0:1], 0x24
401404
; GFX11-GISEL-NEXT: s_mov_b32 s6, -1
402405
; GFX11-GISEL-NEXT: s_mov_b32 s7, 0x31016000
403-
; GFX11-GISEL-NEXT: v_mov_b16_e32 v1.l, 0x4000
404406
; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)
405407
; GFX11-GISEL-NEXT: s_mov_b64 s[4:5], s[2:3]
406408
; GFX11-GISEL-NEXT: s_mov_b64 s[2:3], s[6:7]
407409
; GFX11-GISEL-NEXT: buffer_load_u16 v0, off, s[4:7], 0
408410
; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0)
409-
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l
411+
; GFX11-GISEL-NEXT: v_mov_b16_e32 v0.h, 0x4000
412+
; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)
413+
; GFX11-GISEL-NEXT: v_add_f16_e32 v0.l, v0.l, v0.h
410414
; GFX11-GISEL-NEXT: buffer_store_b16 v0, off, s[0:3], 0
411415
; GFX11-GISEL-NEXT: s_nop 0
412416
; GFX11-GISEL-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)

0 commit comments

Comments
 (0)