- // FIXME: Need the equivalent of MachineRegisterInfo for frameindex operands.
- for (MachineFunction::iterator MBB = MF.begin(), E = MF.end();
- MBB != E; ++MBB) {
- for (MachineBasicBlock::iterator MII = MBB->begin(), EE = MBB->end();
- MII != EE; ++MII) {
- MachineInstr &MI = *MII;
- for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
- MachineOperand &MO = MI.getOperand(i);
- if (!MO.isFI())
- continue;
- int FI = MO.getIndex();
- if (FI < 0)
- continue;
- int NewFI = SlotMapping[FI];
- if (NewFI == -1)
- continue;
- MO.setIndex(NewFI);
-
- // Update the MachineMemOperand for the new memory location.
- // FIXME: We need a better method of managing these too.
- SmallVector<MachineMemOperand, 2> MMOs(MI.memoperands_begin(),
- MI.memoperands_end());
- MI.clearMemOperands(MF);
- const Value *OldSV = PseudoSourceValue::getFixedStack(FI);
- for (unsigned i = 0, e = MMOs.size(); i != e; ++i) {
- if (MMOs[i].getValue() == OldSV) {
- MachineMemOperand MMO(PseudoSourceValue::getFixedStack(NewFI),
- MMOs[i].getFlags(), MMOs[i].getOffset(),
- MMOs[i].getSize(), MMOs[i].getAlignment());
- MI.addMemOperand(MF, MMO);
- } else
- MI.addMemOperand(MF, MMOs[i]);
- }
- }
- }
+ SmallVector<SmallSet<unsigned, 4>, 4> NewDefs(MF.getNumBlockIDs());
+ for (unsigned SS = 0, SE = SSRefs.size(); SS != SE; ++SS) {
+ int NewFI = SlotMapping[SS];
+ if (NewFI == -1 || (NewFI == (int)SS))
+ continue;
+
+ SmallVector<MachineInstr*, 8> &RefMIs = SSRefs[SS];
+ for (unsigned i = 0, e = RefMIs.size(); i != e; ++i)
+ RewriteInstruction(RefMIs[i], SS, NewFI, MF);