mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
GlobalISel: Improve MachineIRBuilder construction
The current relationship between LegalizerHelper and MachineIRBuilder confuses me, because the LegalizerHelper modifies the MachineIRBuilder which it does not own. Constructing a LegalizerHelper destroys the insert point, since the constructor calls setMF, which clears all the fields. Try to separate these functions, so it's possible to construct a LegalizerHelper from an existing MachineIRBuilder without losing the insert point/debug loc.
This commit is contained in:
parent
1f25ea44b1
commit
832e0c0296
@ -35,23 +35,23 @@ class GISelChangeObserver;
|
||||
/// to transfer BuilderState between different kinds of MachineIRBuilders.
|
||||
struct MachineIRBuilderState {
|
||||
/// MachineFunction under construction.
|
||||
MachineFunction *MF;
|
||||
MachineFunction *MF = nullptr;
|
||||
/// Information used to access the description of the opcodes.
|
||||
const TargetInstrInfo *TII;
|
||||
const TargetInstrInfo *TII = nullptr;
|
||||
/// Information used to verify types are consistent and to create virtual registers.
|
||||
MachineRegisterInfo *MRI;
|
||||
MachineRegisterInfo *MRI = nullptr;
|
||||
/// Debug location to be set to any instruction we create.
|
||||
DebugLoc DL;
|
||||
|
||||
/// \name Fields describing the insertion point.
|
||||
/// @{
|
||||
MachineBasicBlock *MBB;
|
||||
MachineBasicBlock *MBB = nullptr;
|
||||
MachineBasicBlock::iterator II;
|
||||
/// @}
|
||||
|
||||
GISelChangeObserver *Observer;
|
||||
GISelChangeObserver *Observer = nullptr;
|
||||
|
||||
GISelCSEInfo *CSEInfo;
|
||||
GISelCSEInfo *CSEInfo = nullptr;
|
||||
};
|
||||
|
||||
class DstOp {
|
||||
@ -238,8 +238,16 @@ public:
|
||||
/// Some constructors for easy use.
|
||||
MachineIRBuilder() = default;
|
||||
MachineIRBuilder(MachineFunction &MF) { setMF(MF); }
|
||||
MachineIRBuilder(MachineInstr &MI) : MachineIRBuilder(*MI.getMF()) {
|
||||
|
||||
MachineIRBuilder(MachineBasicBlock &MBB, MachineBasicBlock::iterator InsPt) {
|
||||
setMF(*MBB.getParent());
|
||||
setInsertPt(MBB, InsPt);
|
||||
}
|
||||
|
||||
MachineIRBuilder(MachineInstr &MI) :
|
||||
MachineIRBuilder(*MI.getParent(), MI.getIterator()) {
|
||||
setInstr(MI);
|
||||
setDebugLoc(MI.getDebugLoc());
|
||||
}
|
||||
|
||||
virtual ~MachineIRBuilder() = default;
|
||||
|
@ -169,6 +169,7 @@ Legalizer::legalizeMachineFunction(MachineFunction &MF, const LegalizerInfo &LI,
|
||||
ArrayRef<GISelChangeObserver *> AuxObservers,
|
||||
LostDebugLocObserver &LocObserver,
|
||||
MachineIRBuilder &MIRBuilder) {
|
||||
MIRBuilder.setMF(MF);
|
||||
MachineRegisterInfo &MRI = MF.getRegInfo();
|
||||
|
||||
// Populate worklists.
|
||||
|
@ -87,7 +87,6 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF,
|
||||
MachineIRBuilder &Builder)
|
||||
: MIRBuilder(Builder), MRI(MF.getRegInfo()),
|
||||
LI(*MF.getSubtarget().getLegalizerInfo()), Observer(Observer) {
|
||||
MIRBuilder.setMF(MF);
|
||||
MIRBuilder.setChangeObserver(Observer);
|
||||
}
|
||||
|
||||
@ -95,7 +94,6 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF, const LegalizerInfo &LI,
|
||||
GISelChangeObserver &Observer,
|
||||
MachineIRBuilder &B)
|
||||
: MIRBuilder(B), MRI(MF.getRegInfo()), LI(LI), Observer(Observer) {
|
||||
MIRBuilder.setMF(MF);
|
||||
MIRBuilder.setChangeObserver(Observer);
|
||||
}
|
||||
LegalizerHelper::LegalizeResult
|
||||
|
Loading…
Reference in New Issue
Block a user