@@ -687,7 +687,8 @@ static void indirectCopyToAGPR(const SIInstrInfo &TII,
687687 if (!SafeToPropagate)
688688 break ;
689689
690- DefOp.setIsKill (false );
690+ for (auto I = Def; I != MI; ++I)
691+ I->clearRegisterKills (DefOp.getReg (), &RI);
691692 }
692693
693694 MachineInstrBuilder Builder =
@@ -1625,41 +1626,6 @@ static unsigned getVGPRSpillSaveOpcode(unsigned Size) {
16251626 }
16261627}
16271628
1628- static unsigned getAGPRSpillSaveOpcode (unsigned Size) {
1629- switch (Size) {
1630- case 4 :
1631- return AMDGPU::SI_SPILL_A32_SAVE;
1632- case 8 :
1633- return AMDGPU::SI_SPILL_A64_SAVE;
1634- case 12 :
1635- return AMDGPU::SI_SPILL_A96_SAVE;
1636- case 16 :
1637- return AMDGPU::SI_SPILL_A128_SAVE;
1638- case 20 :
1639- return AMDGPU::SI_SPILL_A160_SAVE;
1640- case 24 :
1641- return AMDGPU::SI_SPILL_A192_SAVE;
1642- case 28 :
1643- return AMDGPU::SI_SPILL_A224_SAVE;
1644- case 32 :
1645- return AMDGPU::SI_SPILL_A256_SAVE;
1646- case 36 :
1647- return AMDGPU::SI_SPILL_A288_SAVE;
1648- case 40 :
1649- return AMDGPU::SI_SPILL_A320_SAVE;
1650- case 44 :
1651- return AMDGPU::SI_SPILL_A352_SAVE;
1652- case 48 :
1653- return AMDGPU::SI_SPILL_A384_SAVE;
1654- case 64 :
1655- return AMDGPU::SI_SPILL_A512_SAVE;
1656- case 128 :
1657- return AMDGPU::SI_SPILL_A1024_SAVE;
1658- default :
1659- llvm_unreachable (" unknown register size" );
1660- }
1661- }
1662-
16631629static unsigned getAVSpillSaveOpcode (unsigned Size) {
16641630 switch (Size) {
16651631 case 4 :
@@ -1707,22 +1673,20 @@ static unsigned getWWMRegSpillSaveOpcode(unsigned Size,
17071673 return AMDGPU::SI_SPILL_WWM_V32_SAVE;
17081674}
17091675
1710- static unsigned getVectorRegSpillSaveOpcode (Register Reg,
1711- const TargetRegisterClass *RC,
1712- unsigned Size,
1713- const SIRegisterInfo &TRI,
1714- const SIMachineFunctionInfo &MFI) {
1715- bool IsVectorSuperClass = TRI.isVectorSuperClass (RC);
1676+ unsigned SIInstrInfo::getVectorRegSpillSaveOpcode (
1677+ Register Reg, const TargetRegisterClass *RC, unsigned Size,
1678+ const SIMachineFunctionInfo &MFI) const {
1679+ bool IsVectorSuperClass = RI.isVectorSuperClass (RC);
17161680
17171681 // Choose the right opcode if spilling a WWM register.
17181682 if (MFI.checkFlag (Reg, AMDGPU::VirtRegFlag::WWM_REG))
17191683 return getWWMRegSpillSaveOpcode (Size, IsVectorSuperClass);
17201684
1721- if (IsVectorSuperClass)
1685+ // TODO: Check if AGPRs are available
1686+ if (ST.hasMAIInsts ())
17221687 return getAVSpillSaveOpcode (Size);
17231688
1724- return TRI.isAGPRClass (RC) ? getAGPRSpillSaveOpcode (Size)
1725- : getVGPRSpillSaveOpcode (Size);
1689+ return getVGPRSpillSaveOpcode (Size);
17261690}
17271691
17281692void SIInstrInfo::storeRegToStackSlot (
@@ -1770,8 +1734,8 @@ void SIInstrInfo::storeRegToStackSlot(
17701734 return ;
17711735 }
17721736
1773- unsigned Opcode = getVectorRegSpillSaveOpcode (VReg ? VReg : SrcReg, RC,
1774- SpillSize, RI , *MFI);
1737+ unsigned Opcode =
1738+ getVectorRegSpillSaveOpcode (VReg ? VReg : SrcReg, RC, SpillSize , *MFI);
17751739 MFI->setHasSpilledVGPRs ();
17761740
17771741 BuildMI (MBB, MI, DL, get (Opcode))
@@ -1854,41 +1818,6 @@ static unsigned getVGPRSpillRestoreOpcode(unsigned Size) {
18541818 }
18551819}
18561820
1857- static unsigned getAGPRSpillRestoreOpcode (unsigned Size) {
1858- switch (Size) {
1859- case 4 :
1860- return AMDGPU::SI_SPILL_A32_RESTORE;
1861- case 8 :
1862- return AMDGPU::SI_SPILL_A64_RESTORE;
1863- case 12 :
1864- return AMDGPU::SI_SPILL_A96_RESTORE;
1865- case 16 :
1866- return AMDGPU::SI_SPILL_A128_RESTORE;
1867- case 20 :
1868- return AMDGPU::SI_SPILL_A160_RESTORE;
1869- case 24 :
1870- return AMDGPU::SI_SPILL_A192_RESTORE;
1871- case 28 :
1872- return AMDGPU::SI_SPILL_A224_RESTORE;
1873- case 32 :
1874- return AMDGPU::SI_SPILL_A256_RESTORE;
1875- case 36 :
1876- return AMDGPU::SI_SPILL_A288_RESTORE;
1877- case 40 :
1878- return AMDGPU::SI_SPILL_A320_RESTORE;
1879- case 44 :
1880- return AMDGPU::SI_SPILL_A352_RESTORE;
1881- case 48 :
1882- return AMDGPU::SI_SPILL_A384_RESTORE;
1883- case 64 :
1884- return AMDGPU::SI_SPILL_A512_RESTORE;
1885- case 128 :
1886- return AMDGPU::SI_SPILL_A1024_RESTORE;
1887- default :
1888- llvm_unreachable (" unknown register size" );
1889- }
1890- }
1891-
18921821static unsigned getAVSpillRestoreOpcode (unsigned Size) {
18931822 switch (Size) {
18941823 case 4 :
@@ -1930,27 +1859,27 @@ static unsigned getWWMRegSpillRestoreOpcode(unsigned Size,
19301859 if (Size != 4 )
19311860 llvm_unreachable (" unknown wwm register spill size" );
19321861
1933- if (IsVectorSuperClass)
1862+ if (IsVectorSuperClass) // TODO: Always use this if there are AGPRs
19341863 return AMDGPU::SI_SPILL_WWM_AV32_RESTORE;
19351864
19361865 return AMDGPU::SI_SPILL_WWM_V32_RESTORE;
19371866}
19381867
1939- static unsigned
1940- getVectorRegSpillRestoreOpcode (Register Reg, const TargetRegisterClass *RC,
1941- unsigned Size, const SIRegisterInfo &TRI,
1942- const SIMachineFunctionInfo &MFI) {
1943- bool IsVectorSuperClass = TRI.isVectorSuperClass (RC);
1868+ unsigned SIInstrInfo::getVectorRegSpillRestoreOpcode (
1869+ Register Reg, const TargetRegisterClass *RC, unsigned Size,
1870+ const SIMachineFunctionInfo &MFI) const {
1871+ bool IsVectorSuperClass = RI.isVectorSuperClass (RC);
19441872
19451873 // Choose the right opcode if restoring a WWM register.
19461874 if (MFI.checkFlag (Reg, AMDGPU::VirtRegFlag::WWM_REG))
19471875 return getWWMRegSpillRestoreOpcode (Size, IsVectorSuperClass);
19481876
1949- if (IsVectorSuperClass)
1877+ // TODO: Check if AGPRs are available
1878+ if (ST.hasMAIInsts ())
19501879 return getAVSpillRestoreOpcode (Size);
19511880
1952- return TRI .isAGPRClass (RC) ? getAGPRSpillRestoreOpcode (Size)
1953- : getVGPRSpillRestoreOpcode (Size);
1881+ assert (!RI .isAGPRClass (RC));
1882+ return getVGPRSpillRestoreOpcode (Size);
19541883}
19551884
19561885void SIInstrInfo::loadRegFromStackSlot (MachineBasicBlock &MBB,
@@ -1998,7 +1927,7 @@ void SIInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
19981927 }
19991928
20001929 unsigned Opcode = getVectorRegSpillRestoreOpcode (VReg ? VReg : DestReg, RC,
2001- SpillSize, RI, *MFI);
1930+ SpillSize, *MFI);
20021931 BuildMI (MBB, MI, DL, get (Opcode), DestReg)
20031932 .addFrameIndex (FrameIndex) // vaddr
20041933 .addReg (MFI->getStackPtrOffsetReg ()) // scratch_offset
0 commit comments