[llvm] [AMDGPU] Save and restore SCC using only 32-bit SGPR. (PR #68367)
Pierre van Houtryve via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 10 05:31:42 PDT 2023
================
@@ -1084,13 +1083,19 @@ void SIFixSGPRCopies::fixSCCCopies(MachineFunction &MF) {
Register SrcReg = MI.getOperand(1).getReg();
Register DstReg = MI.getOperand(0).getReg();
if (SrcReg == AMDGPU::SCC) {
- Register SCCCopy = MRI->createVirtualRegister(
- TRI->getRegClass(AMDGPU::SReg_1_XEXECRegClassID));
+ const TargetRegisterClass *DstRC =
+ TRI->getRegClassForOperandReg(*MRI, MI.getOperand(0));
+ assert((TRI->getRegSizeInBits(*DstRC) == 64 ||
+ TRI->getRegSizeInBits(*DstRC) == 32) &&
+ "Expected SCC dst to be 64 or 32 bits");
+ bool IsDst32Bit = TRI->getRegSizeInBits(*DstRC) == 32;
+ Register SCCCopy =
+ IsDst32Bit ? MRI->createVirtualRegister(&AMDGPU::SReg_32RegClass)
+ : MRI->createVirtualRegister(&AMDGPU::SReg_64RegClass);
----------------
Pierre-vh wrote:
I think you can just do
```
MRI->createVirtualRegister(IsDst32Bit ? &AMDGPU::SReg_32RegClass : &AMDGPU::SReg_64RegClass)
```
https://github.com/llvm/llvm-project/pull/68367
More information about the llvm-commits
mailing list