Lines Matching defs:RSI
69 bool operator==(const RegSeqInfo &RSI) const {
70 return RSI.Instr == Instr;
90 bool tryMergeUsingCommonSlot(RegSeqInfo &RSI, RegSeqInfo &CompatibleRSI,
92 bool tryMergeUsingFreeSlot(RegSeqInfo &RSI, RegSeqInfo &CompatibleRSI,
97 void trackRSI(const RegSeqInfo &RSI);
180 RegSeqInfo *RSI, const RegSeqInfo *BaseRSI,
182 Register Reg = RSI->Instr->getOperand(0).getReg();
183 MachineBasicBlock::iterator Pos = RSI->Instr;
190 for (const auto &It : RSI->RegToChan) {
222 RSI->Instr->eraseFromParent();
224 // Update RSI
225 RSI->Instr = NewMI;
226 RSI->RegToChan = UpdatedRegToChan;
227 RSI->UndefReg = UpdatedUndef;
266 bool R600VectorRegMerger::tryMergeUsingCommonSlot(RegSeqInfo &RSI,
269 for (MachineInstr::mop_iterator MOp = RSI.Instr->operands_begin(),
270 MOE = RSI.Instr->operands_end(); MOp != MOE; ++MOp) {
277 if (RSI == CompatibleRSI)
279 if (tryMergeVector(&CompatibleRSI, &RSI, RemapChan))
286 bool R600VectorRegMerger::tryMergeUsingFreeSlot(RegSeqInfo &RSI,
289 unsigned NeededUndefs = 4 - RSI.UndefReg.size();
295 tryMergeVector(&CompatibleRSI, &RSI, RemapChan);
299 void R600VectorRegMerger::trackRSI(const RegSeqInfo &RSI) {
301 It = RSI.RegToChan.begin(), E = RSI.RegToChan.end(); It != E; ++It) {
302 PreviousRegSeqByReg[(*It).first].push_back(RSI.Instr);
304 PreviousRegSeqByUndefCount[RSI.UndefReg.size()].push_back(RSI.Instr);
305 PreviousRegSeq[RSI.Instr] = RSI;
336 RegSeqInfo RSI(*MRI, &MI);
351 if (tryMergeUsingCommonSlot(RSI, CandidateRSI, RemapChan)) {
354 MII = RebuildVector(&RSI, &CandidateRSI, RemapChan);
355 trackRSI(RSI);
360 if (tryMergeUsingFreeSlot(RSI, CandidateRSI, RemapChan)) {
362 MII = RebuildVector(&RSI, &CandidateRSI, RemapChan);
363 trackRSI(RSI);
367 trackRSI(RSI);