mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Added a support for inserting new MBBs into the numbering.
Unlike insertMachineInstrInMaps this does not guarantee live intervals will remain correct. The caller will need to manually update intervals to account for the changes made to the CFG. llvm-svn: 107958
This commit is contained in:
parent
e0dcc33889
commit
67f0ebc5c6
@ -23,6 +23,7 @@
|
||||
#define LLVM_CODEGEN_SLOTINDEXES_H
|
||||
|
||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/ADT/PointerIntPair.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
@ -762,6 +763,47 @@ namespace llvm {
|
||||
mi2iMap.insert(std::make_pair(newMI, replaceBaseIndex));
|
||||
}
|
||||
|
||||
/// Add the given MachineBasicBlock into the maps.
|
||||
void insertMBBInMaps(MachineBasicBlock *mbb) {
|
||||
MachineFunction::iterator nextMBB =
|
||||
llvm::next(MachineFunction::iterator(mbb));
|
||||
IndexListEntry *startEntry = createEntry(0, 0);
|
||||
IndexListEntry *terminatorEntry = createEntry(0, 0);
|
||||
IndexListEntry *nextEntry = 0;
|
||||
|
||||
if (nextMBB == mbb->getParent()->end()) {
|
||||
nextEntry = getTail();
|
||||
} else {
|
||||
nextEntry = &getMBBStartIdx(nextMBB).entry();
|
||||
}
|
||||
|
||||
insert(nextEntry, startEntry);
|
||||
insert(nextEntry, terminatorEntry);
|
||||
|
||||
SlotIndex startIdx(startEntry, SlotIndex::LOAD);
|
||||
SlotIndex terminatorIdx(terminatorEntry, SlotIndex::PHI_BIT);
|
||||
SlotIndex endIdx(nextEntry, SlotIndex::LOAD);
|
||||
|
||||
terminatorGaps.insert(
|
||||
std::make_pair(mbb, terminatorIdx));
|
||||
|
||||
mbb2IdxMap.insert(
|
||||
std::make_pair(mbb, std::make_pair(startIdx, endIdx)));
|
||||
|
||||
idx2MBBMap.push_back(IdxMBBPair(startIdx, mbb));
|
||||
|
||||
if (MachineFunction::iterator(mbb) != mbb->getParent()->begin()) {
|
||||
// Have to update the end index of the previous block.
|
||||
MachineBasicBlock *priorMBB =
|
||||
llvm::prior(MachineFunction::iterator(mbb));
|
||||
mbb2IdxMap[priorMBB].second = startIdx;
|
||||
}
|
||||
|
||||
renumberIndexes();
|
||||
std::sort(idx2MBBMap.begin(), idx2MBBMap.end(), Idx2MBBCompare());
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user