@@ -742,23 +742,27 @@ static void expandSGPRCopy(const SIInstrInfo &TII, MachineBasicBlock &MBB,
742
742
743
743
for (unsigned Idx = 0 ; Idx < BaseIndices.size (); ++Idx) {
744
744
int16_t SubIdx = BaseIndices[Idx];
745
- Register Reg = RI.getSubReg (DestReg, SubIdx);
745
+ Register DestSubReg = RI.getSubReg (DestReg, SubIdx);
746
+ Register SrcSubReg = RI.getSubReg (SrcReg, SubIdx);
747
+ assert (DestSubReg && SrcSubReg && " Failed to find subregs!" );
746
748
unsigned Opcode = AMDGPU::S_MOV_B32;
747
749
748
750
// Is SGPR aligned? If so try to combine with next.
749
- Register Src = RI.getSubReg (SrcReg, SubIdx);
750
- bool AlignedDest = ((Reg - AMDGPU::SGPR0) % 2 ) == 0 ;
751
- bool AlignedSrc = ((Src - AMDGPU::SGPR0) % 2 ) == 0 ;
751
+ bool AlignedDest = ((DestSubReg - AMDGPU::SGPR0) % 2 ) == 0 ;
752
+ bool AlignedSrc = ((SrcSubReg - AMDGPU::SGPR0) % 2 ) == 0 ;
752
753
if (AlignedDest && AlignedSrc && (Idx + 1 < BaseIndices.size ())) {
753
754
// Can use SGPR64 copy
754
755
unsigned Channel = RI.getChannelFromSubReg (SubIdx);
755
756
SubIdx = RI.getSubRegFromChannel (Channel, 2 );
757
+ DestSubReg = RI.getSubReg (DestReg, SubIdx);
758
+ SrcSubReg = RI.getSubReg (SrcReg, SubIdx);
759
+ assert (DestSubReg && SrcSubReg && " Failed to find subregs!" );
756
760
Opcode = AMDGPU::S_MOV_B64;
757
761
Idx++;
758
762
}
759
763
760
- LastMI = BuildMI (MBB, I, DL, TII.get (Opcode), RI. getSubReg (DestReg, SubIdx) )
761
- .addReg (RI. getSubReg (SrcReg, SubIdx) )
764
+ LastMI = BuildMI (MBB, I, DL, TII.get (Opcode), DestSubReg )
765
+ .addReg (SrcSubReg )
762
766
.addReg (SrcReg, RegState::Implicit);
763
767
764
768
if (!FirstMI)
@@ -1098,37 +1102,36 @@ void SIInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
1098
1102
SubIdx = SubIndices[Idx];
1099
1103
else
1100
1104
SubIdx = SubIndices[SubIndices.size () - Idx - 1 ];
1105
+ Register DestSubReg = RI.getSubReg (DestReg, SubIdx);
1106
+ Register SrcSubReg = RI.getSubReg (SrcReg, SubIdx);
1107
+ assert (DestSubReg && SrcSubReg && " Failed to find subregs!" );
1101
1108
1102
1109
bool IsFirstSubreg = Idx == 0 ;
1103
1110
bool UseKill = CanKillSuperReg && Idx == SubIndices.size () - 1 ;
1104
1111
1105
1112
if (Opcode == AMDGPU::INSTRUCTION_LIST_END) {
1106
1113
Register ImpDefSuper = IsFirstSubreg ? Register (DestReg) : Register ();
1107
1114
Register ImpUseSuper = SrcReg;
1108
- indirectCopyToAGPR (*this , MBB, MI, DL, RI.getSubReg (DestReg, SubIdx),
1109
- RI.getSubReg (SrcReg, SubIdx), UseKill, *RS, Overlap,
1110
- ImpDefSuper, ImpUseSuper);
1115
+ indirectCopyToAGPR (*this , MBB, MI, DL, DestSubReg, SrcSubReg, UseKill,
1116
+ *RS, Overlap, ImpDefSuper, ImpUseSuper);
1111
1117
} else if (Opcode == AMDGPU::V_PK_MOV_B32) {
1112
- Register DstSubReg = RI.getSubReg (DestReg, SubIdx);
1113
- Register SrcSubReg = RI.getSubReg (SrcReg, SubIdx);
1114
1118
MachineInstrBuilder MIB =
1115
- BuildMI (MBB, MI, DL, get (AMDGPU::V_PK_MOV_B32), DstSubReg )
1116
- .addImm (SISrcMods::OP_SEL_1)
1117
- .addReg (SrcSubReg)
1118
- .addImm (SISrcMods::OP_SEL_0 | SISrcMods::OP_SEL_1)
1119
- .addReg (SrcSubReg)
1120
- .addImm (0 ) // op_sel_lo
1121
- .addImm (0 ) // op_sel_hi
1122
- .addImm (0 ) // neg_lo
1123
- .addImm (0 ) // neg_hi
1124
- .addImm (0 ) // clamp
1125
- .addReg (SrcReg, getKillRegState (UseKill) | RegState::Implicit);
1119
+ BuildMI (MBB, MI, DL, get (AMDGPU::V_PK_MOV_B32), DestSubReg )
1120
+ .addImm (SISrcMods::OP_SEL_1)
1121
+ .addReg (SrcSubReg)
1122
+ .addImm (SISrcMods::OP_SEL_0 | SISrcMods::OP_SEL_1)
1123
+ .addReg (SrcSubReg)
1124
+ .addImm (0 ) // op_sel_lo
1125
+ .addImm (0 ) // op_sel_hi
1126
+ .addImm (0 ) // neg_lo
1127
+ .addImm (0 ) // neg_hi
1128
+ .addImm (0 ) // clamp
1129
+ .addReg (SrcReg, getKillRegState (UseKill) | RegState::Implicit);
1126
1130
if (IsFirstSubreg)
1127
1131
MIB.addReg (DestReg, RegState::Define | RegState::Implicit);
1128
1132
} else {
1129
1133
MachineInstrBuilder Builder =
1130
- BuildMI (MBB, MI, DL, get (Opcode), RI.getSubReg (DestReg, SubIdx))
1131
- .addReg (RI.getSubReg (SrcReg, SubIdx));
1134
+ BuildMI (MBB, MI, DL, get (Opcode), DestSubReg).addReg (SrcSubReg);
1132
1135
if (IsFirstSubreg)
1133
1136
Builder.addReg (DestReg, RegState::Define | RegState::Implicit);
1134
1137
0 commit comments