@@ -90,6 +90,7 @@ class SIFoldOperands : public MachineFunctionPass {
90
90
SmallVectorImpl<FoldCandidate> &FoldList,
91
91
SmallVectorImpl<MachineInstr *> &CopiesToReplace) const ;
92
92
93
+ bool tryFoldCndMask (MachineInstr &MI) const ;
93
94
void foldInstOperand (MachineInstr &MI, MachineOperand &OpToFold) const ;
94
95
95
96
const MachineOperand *isClamp (const MachineInstr &MI) const ;
@@ -1146,39 +1147,38 @@ static bool tryConstantFoldOp(MachineRegisterInfo &MRI,
1146
1147
}
1147
1148
1148
1149
// Try to fold an instruction into a simpler one
1149
- static bool tryFoldCndMask (const SIInstrInfo *TII,
1150
- MachineInstr *MI) {
1151
- unsigned Opc = MI->getOpcode ();
1150
+ bool SIFoldOperands::tryFoldCndMask (MachineInstr &MI) const {
1151
+ unsigned Opc = MI.getOpcode ();
1152
1152
if (Opc != AMDGPU::V_CNDMASK_B32_e32 && Opc != AMDGPU::V_CNDMASK_B32_e64 &&
1153
1153
Opc != AMDGPU::V_CNDMASK_B64_PSEUDO)
1154
1154
return false ;
1155
1155
1156
- MachineOperand *Src0 = TII->getNamedOperand (* MI, AMDGPU::OpName::src0);
1157
- MachineOperand *Src1 = TII->getNamedOperand (* MI, AMDGPU::OpName::src1);
1156
+ MachineOperand *Src0 = TII->getNamedOperand (MI, AMDGPU::OpName::src0);
1157
+ MachineOperand *Src1 = TII->getNamedOperand (MI, AMDGPU::OpName::src1);
1158
1158
if (!Src1->isIdenticalTo (*Src0))
1159
1159
return false ;
1160
1160
1161
1161
int Src1ModIdx =
1162
1162
AMDGPU::getNamedOperandIdx (Opc, AMDGPU::OpName::src1_modifiers);
1163
1163
int Src0ModIdx =
1164
1164
AMDGPU::getNamedOperandIdx (Opc, AMDGPU::OpName::src0_modifiers);
1165
- if ((Src1ModIdx != -1 && MI-> getOperand (Src1ModIdx).getImm () != 0 ) ||
1166
- (Src0ModIdx != -1 && MI-> getOperand (Src0ModIdx).getImm () != 0 ))
1165
+ if ((Src1ModIdx != -1 && MI. getOperand (Src1ModIdx).getImm () != 0 ) ||
1166
+ (Src0ModIdx != -1 && MI. getOperand (Src0ModIdx).getImm () != 0 ))
1167
1167
return false ;
1168
1168
1169
- LLVM_DEBUG (dbgs () << " Folded " << * MI << " into " );
1169
+ LLVM_DEBUG (dbgs () << " Folded " << MI << " into " );
1170
1170
auto &NewDesc =
1171
1171
TII->get (Src0->isReg () ? (unsigned )AMDGPU::COPY : getMovOpc (false ));
1172
1172
int Src2Idx = AMDGPU::getNamedOperandIdx (Opc, AMDGPU::OpName::src2);
1173
1173
if (Src2Idx != -1 )
1174
- MI-> RemoveOperand (Src2Idx);
1175
- MI-> RemoveOperand (AMDGPU::getNamedOperandIdx (Opc, AMDGPU::OpName::src1));
1174
+ MI. RemoveOperand (Src2Idx);
1175
+ MI. RemoveOperand (AMDGPU::getNamedOperandIdx (Opc, AMDGPU::OpName::src1));
1176
1176
if (Src1ModIdx != -1 )
1177
- MI-> RemoveOperand (Src1ModIdx);
1177
+ MI. RemoveOperand (Src1ModIdx);
1178
1178
if (Src0ModIdx != -1 )
1179
- MI-> RemoveOperand (Src0ModIdx);
1180
- mutateCopyOp (* MI, NewDesc);
1181
- LLVM_DEBUG (dbgs () << * MI);
1179
+ MI. RemoveOperand (Src0ModIdx);
1180
+ mutateCopyOp (MI, NewDesc);
1181
+ LLVM_DEBUG (dbgs () << MI);
1182
1182
return true ;
1183
1183
}
1184
1184
@@ -1300,7 +1300,7 @@ void SIFoldOperands::foldInstOperand(MachineInstr &MI,
1300
1300
LLVM_DEBUG (dbgs () << " Folded source from " << MI << " into OpNo "
1301
1301
<< static_cast <int >(Fold.UseOpNo ) << " of "
1302
1302
<< *Fold.UseMI );
1303
- if (tryFoldCndMask (TII, Fold.UseMI ))
1303
+ if (tryFoldCndMask (* Fold.UseMI ))
1304
1304
Folded.insert (Fold.UseMI );
1305
1305
} else if (Fold.isCommuted ()) {
1306
1306
// Restoring instruction's original operand order if fold has failed.
@@ -1723,7 +1723,7 @@ bool SIFoldOperands::runOnMachineFunction(MachineFunction &MF) {
1723
1723
for (MachineBasicBlock *MBB : depth_first (&MF)) {
1724
1724
MachineOperand *CurrentKnownM0Val = nullptr ;
1725
1725
for (auto &MI : make_early_inc_range (*MBB)) {
1726
- tryFoldCndMask (TII, & MI);
1726
+ tryFoldCndMask (MI);
1727
1727
1728
1728
if (MI.isRegSequence () && tryFoldRegSequence (MI))
1729
1729
continue ;
0 commit comments