From 0141b8474529603b4e153196809db05175997bc3 Mon Sep 17 00:00:00 2001 From: Quentin Colombet Date: Wed, 8 Jun 2016 16:45:04 +0000 Subject: [PATCH] [RegBankSelect] Use RegisterBankInfo applyMapping method. The RegBankSelect pass can now rely on the target to do the remapping of the instructions. llvm-svn: 272169 --- lib/CodeGen/GlobalISel/RegBankSelect.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/CodeGen/GlobalISel/RegBankSelect.cpp b/lib/CodeGen/GlobalISel/RegBankSelect.cpp index 37af5066768..5d5a5689d0e 100644 --- a/lib/CodeGen/GlobalISel/RegBankSelect.cpp +++ b/lib/CodeGen/GlobalISel/RegBankSelect.cpp @@ -115,8 +115,6 @@ void RegBankSelect::repairReg( // the source of the repairing. unsigned Src = MO.getReg(); unsigned Dst = *NewVRegs.begin(); - if (ValMapping.BreakDown.size() == 1) - MO.setReg(Dst); // If we repair a definition, swap the source and destination for // the repairing. @@ -460,13 +458,10 @@ RegBankSelect::MappingCost RegBankSelect::computeMapping( void RegBankSelect::applyMapping( MachineInstr &MI, const RegisterBankInfo::InstructionMapping &InstrMapping, SmallVectorImpl &RepairPts) { - assert(InstrMapping.getID() == RegisterBankInfo::DefaultMappingID && - "Rewriting of MI not implemented yet"); - // First, place the repairing code. - bool NeedRewrite = false; // OpdMapper will hold all the information needed for the rewritting. RegisterBankInfo::OperandsMapper OpdMapper(MI, InstrMapping, *MRI); + // First, place the repairing code. for (RepairingPlacement &RepairPt : RepairPts) { assert(RepairPt.canMaterialize() && RepairPt.getKind() != RepairingPlacement::Impossible && @@ -479,7 +474,6 @@ void RegBankSelect::applyMapping( InstrMapping.getOperandMapping(OpIdx); unsigned BreakDownSize = ValMapping.BreakDown.size(); unsigned Reg = MO.getReg(); - NeedRewrite = BreakDownSize != 1; switch (RepairPt.getKind()) { case RepairingPlacement::Reassign: @@ -496,8 +490,7 @@ void RegBankSelect::applyMapping( } } // Second, rewrite the instruction. - (void)NeedRewrite; - assert(!NeedRewrite && "Not implemented yet"); + RBI->applyMapping(OpdMapper); } void RegBankSelect::assignInstr(MachineInstr &MI) { @@ -544,8 +537,12 @@ bool RegBankSelect::runOnMachineFunction(MachineFunction &MF) { // Set a sensible insertion point so that subsequent calls to // MIRBuilder. MIRBuilder.setMBB(*MBB); - for (MachineInstr &MI : *MBB) - assignInstr(MI); + for (MachineBasicBlock::iterator MII = MBB->begin(), End = MBB->end(); + MII != End;) { + // MI might be invalidated by the assignment, so move the + // iterator before hand. + assignInstr(*MII++); + } } OptMode = SaveOptMode; return false;