static void replaceFrameIndexes(MachineFunction &MF, SmallVector<std::pair<int,int64_t>, 16> &FR) { MachineFrameInfo *MFI = MF.getFrameInfo(); MBlazeFunctionInfo *MBlazeFI = MF.getInfo<MBlazeFunctionInfo>(); const SmallVector<std::pair<int,int64_t>, 16>::iterator FRB = FR.begin(); const SmallVector<std::pair<int,int64_t>, 16>::iterator FRE = FR.end(); SmallVector<std::pair<int,int64_t>, 16>::iterator FRI = FRB; for (; FRI != FRE; ++FRI) { MFI->RemoveStackObject(FRI->first); int NFI = MFI->CreateFixedObject(4, FRI->second, true); MBlazeFI->recordReplacement(FRI->first, NFI); for (MachineFunction::iterator MB=MF.begin(), ME=MF.end(); MB!=ME; ++MB) { MachineBasicBlock::iterator MBB = MB->begin(); const MachineBasicBlock::iterator MBE = MB->end(); for (; MBB != MBE; ++MBB) { MachineInstr::mop_iterator MIB = MBB->operands_begin(); const MachineInstr::mop_iterator MIE = MBB->operands_end(); for (MachineInstr::mop_iterator MII = MIB; MII != MIE; ++MII) { if (!MII->isFI() || MII->getIndex() != FRI->first) continue; DEBUG(dbgs() << "FOUND FI#" << MII->getIndex() << "\n"); MII->setIndex(NFI); } } } } }
void SIMachineFunctionInfo::removeSGPRToVGPRFrameIndices(MachineFrameInfo &MFI) { for (auto &R : SGPRToVGPRSpills) MFI.RemoveStackObject(R.first); }