mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Add the MachineInstrSpan class.
MachineInstrSpan is initialized with a MachineBasicBlock::iterator, and is intended to track which instructions are inserted before/after that instruction from the time the MachineInstrSpan is created. It provides a begin()/end() interface to walk the range of instructions inserted around the initial instruction (including that initial instruction). It also provides a getInitial() interface to return the initial iterator. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188436 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
03fe68e0a9
commit
3bbd96e90b
@ -733,6 +733,31 @@ template <> struct GraphTraits<Inverse<const MachineBasicBlock*> > {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/// MachineInstrSpan provides an interface to get an iteration range
|
||||
/// containing the instruction it was initialized with, along with all
|
||||
/// those instructions inserted prior to or following that instruction
|
||||
/// at some point after the MachineInstrSpan is constructed.
|
||||
class MachineInstrSpan {
|
||||
MachineBasicBlock &MBB;
|
||||
MachineBasicBlock::iterator I, B, E;
|
||||
public:
|
||||
MachineInstrSpan(MachineBasicBlock::iterator I)
|
||||
: MBB(*I->getParent()),
|
||||
I(I),
|
||||
B(I == MBB.begin() ? MBB.end() : llvm::prior(I)),
|
||||
E(llvm::next(I)) {}
|
||||
|
||||
MachineBasicBlock::iterator begin() {
|
||||
return B == MBB.end() ? MBB.begin() : llvm::next(B);
|
||||
}
|
||||
MachineBasicBlock::iterator end() { return E; }
|
||||
bool empty() { return begin() == end(); }
|
||||
|
||||
MachineBasicBlock::iterator getInitial() { return I; }
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user