88
99#include " SIFrameLowering.h"
1010#include " AMDGPU.h"
11+ #include " AMDGPULaneMaskUtils.h"
1112#include " GCNSubtarget.h"
1213#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
1314#include " SIMachineFunctionInfo.h"
@@ -984,6 +985,7 @@ void SIFrameLowering::emitCSRSpillStores(
984985 const SIInstrInfo *TII = ST.getInstrInfo ();
985986 const SIRegisterInfo &TRI = TII->getRegisterInfo ();
986987 MachineRegisterInfo &MRI = MF.getRegInfo ();
988+ const AMDGPU::LaneMaskConstants &LMC = AMDGPU::LaneMaskConstants::get (ST);
987989
988990 // Spill Whole-Wave Mode VGPRs. Save only the inactive lanes of the scratch
989991 // registers. However, save all lanes of callee-saved VGPRs. Due to this, we
@@ -1015,8 +1017,7 @@ void SIFrameLowering::emitCSRSpillStores(
10151017 StoreWWMRegisters (WWMScratchRegs);
10161018
10171019 auto EnableAllLanes = [&]() {
1018- unsigned MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
1019- BuildMI (MBB, MBBI, DL, TII->get (MovOpc), TRI.getExec ()).addImm (-1 );
1020+ BuildMI (MBB, MBBI, DL, TII->get (LMC.MovOpc ), LMC.ExecReg ).addImm (-1 );
10201021 };
10211022
10221023 if (!WWMCalleeSavedRegs.empty ()) {
@@ -1043,8 +1044,7 @@ void SIFrameLowering::emitCSRSpillStores(
10431044 TII->getWholeWaveFunctionSetup (MF)->eraseFromParent ();
10441045 } else if (ScratchExecCopy) {
10451046 // FIXME: Split block and make terminator.
1046- unsigned ExecMov = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
1047- BuildMI (MBB, MBBI, DL, TII->get (ExecMov), TRI.getExec ())
1047+ BuildMI (MBB, MBBI, DL, TII->get (LMC.MovOpc ), LMC.ExecReg )
10481048 .addReg (ScratchExecCopy, RegState::Kill);
10491049 LiveUnits.addReg (ScratchExecCopy);
10501050 }
@@ -1092,6 +1092,7 @@ void SIFrameLowering::emitCSRSpillRestores(
10921092 const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
10931093 const SIInstrInfo *TII = ST.getInstrInfo ();
10941094 const SIRegisterInfo &TRI = TII->getRegisterInfo ();
1095+ const AMDGPU::LaneMaskConstants &LMC = AMDGPU::LaneMaskConstants::get (ST);
10951096 Register FramePtrReg = FuncInfo->getFrameOffsetReg ();
10961097
10971098 for (const auto &Spill : FuncInfo->getPrologEpilogSGPRSpills ()) {
@@ -1147,16 +1148,14 @@ void SIFrameLowering::emitCSRSpillRestores(
11471148 Register OrigExec = Return.getOperand (0 ).getReg ();
11481149
11491150 if (!WWMScratchRegs.empty ()) {
1150- unsigned XorOpc = ST.isWave32 () ? AMDGPU::S_XOR_B32 : AMDGPU::S_XOR_B64;
1151- BuildMI (MBB, MBBI, DL, TII->get (XorOpc), TRI.getExec ())
1151+ BuildMI (MBB, MBBI, DL, TII->get (LMC.XorOpc ), LMC.ExecReg )
11521152 .addReg (OrigExec)
11531153 .addImm (-1 );
11541154 RestoreWWMRegisters (WWMScratchRegs);
11551155 }
11561156
11571157 // Restore original EXEC.
1158- unsigned MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
1159- BuildMI (MBB, MBBI, DL, TII->get (MovOpc), TRI.getExec ()).addReg (OrigExec);
1158+ BuildMI (MBB, MBBI, DL, TII->get (LMC.MovOpc ), LMC.ExecReg ).addReg (OrigExec);
11601159
11611160 // Drop the first operand and update the opcode.
11621161 Return.removeOperand (0 );
@@ -1173,8 +1172,7 @@ void SIFrameLowering::emitCSRSpillRestores(
11731172 RestoreWWMRegisters (WWMScratchRegs);
11741173 if (!WWMCalleeSavedRegs.empty ()) {
11751174 if (ScratchExecCopy) {
1176- unsigned MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
1177- BuildMI (MBB, MBBI, DL, TII->get (MovOpc), TRI.getExec ()).addImm (-1 );
1175+ BuildMI (MBB, MBBI, DL, TII->get (LMC.MovOpc ), LMC.ExecReg ).addImm (-1 );
11781176 } else {
11791177 ScratchExecCopy = buildScratchExecCopy (LiveUnits, MF, MBB, MBBI, DL,
11801178 /* IsProlog*/ false ,
@@ -1185,8 +1183,7 @@ void SIFrameLowering::emitCSRSpillRestores(
11851183 RestoreWWMRegisters (WWMCalleeSavedRegs);
11861184 if (ScratchExecCopy) {
11871185 // FIXME: Split block and make terminator.
1188- unsigned ExecMov = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
1189- BuildMI (MBB, MBBI, DL, TII->get (ExecMov), TRI.getExec ())
1186+ BuildMI (MBB, MBBI, DL, TII->get (LMC.MovOpc ), LMC.ExecReg )
11901187 .addReg (ScratchExecCopy, RegState::Kill);
11911188 }
11921189}
0 commit comments