Skip to content

Commit 378ec8b

Browse files
committed
added imm case
1 parent 5209296 commit 378ec8b

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9116,17 +9116,19 @@ void SIInstrInfo::movePackToVALU(SIInstrWorklist &Worklist,
91169116
const DebugLoc &DL = Inst.getDebugLoc();
91179117

91189118
if (ST.useRealTrue16Insts()) {
9119-
Register SrcReg0 = Src0.getReg();
9120-
Register SrcReg1 = Src1.getReg();
9121-
9122-
if (!RI.isVGPR(MRI, SrcReg0)) {
9119+
Register SrcReg0, SrcReg1;
9120+
if (!Src0.isReg() || (Src0.isReg() && !RI.isVGPR(MRI, Src0.getReg()))) {
91239121
SrcReg0 = MRI.createVirtualRegister(&AMDGPU::VGPR_32RegClass);
91249122
BuildMI(*MBB, Inst, DL, get(AMDGPU::V_MOV_B32_e32), SrcReg0).add(Src0);
9125-
}
9126-
if (!RI.isVGPR(MRI, SrcReg1)) {
9123+
} else
9124+
SrcReg0 = Src0.getReg();
9125+
9126+
if (!Src1.isReg() || (Src1.isReg() && !RI.isVGPR(MRI, Src1.getReg()))) {
91279127
SrcReg1 = MRI.createVirtualRegister(&AMDGPU::VGPR_32RegClass);
91289128
BuildMI(*MBB, Inst, DL, get(AMDGPU::V_MOV_B32_e32), SrcReg1).add(Src1);
9129-
}
9129+
} else
9130+
SrcReg1 = Src1.getReg();
9131+
91309132
bool isSrc0Reg16 = MRI.constrainRegClass(SrcReg0, &AMDGPU::VGPR_16RegClass);
91319133
bool isSrc1Reg16 = MRI.constrainRegClass(SrcReg1, &AMDGPU::VGPR_16RegClass);
91329134

llvm/test/CodeGen/AMDGPU/fix-sgpr-copies-f16-true16.mir

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,16 @@ body: |
338338
%2:sreg_32 = S_FMAC_F16 %1:sreg_32, %1:sreg_32, %1:sreg_32, implicit $mode
339339
%3:sreg_32 = S_PACK_LL_B32_B16 %2:sreg_32, %1:sreg_32, implicit-def dead $scc
340340
...
341+
342+
---
343+
name: s_pack_ll_b32_b16_use_imm
344+
body: |
345+
bb.0:
346+
; GCN-LABEL: name: s_pack_ll_b32_b16_use_imm
347+
; GCN: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
348+
; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1, implicit $exec
349+
; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vgpr_32 = REG_SEQUENCE [[V_MOV_B32_e32_]].lo16, %subreg.lo16, [[DEF]].lo16, %subreg.hi16
350+
%0:vgpr_32 = IMPLICIT_DEF
351+
%1:sreg_32 = COPY %0:vgpr_32
352+
%2:sreg_32 = S_PACK_LL_B32_B16 1, %1:sreg_32, implicit-def dead $scc
353+
...

0 commit comments

Comments
 (0)