class LegalizerHelper {
public:
+ /// Expose MIRBuilder so clients can set their own RecordInsertInstruction
+ /// functions
+ MachineIRBuilder &MIRBuilder;
+
+private:
+ MachineRegisterInfo &MRI;
+ const LegalizerInfo &LI;
+ /// To keep track of changes made by the LegalizerHelper.
+ GISelChangeObserver &Observer;
+
+public:
enum LegalizeResult {
/// Instruction was already legal and no change was made to the
/// MachineFunction.
UnableToLegalize,
};
+ /// Expose LegalizerInfo so the clients can re-use.
+ const LegalizerInfo &getLegalizerInfo() const { return LI; }
+
LegalizerHelper(MachineFunction &MF, GISelChangeObserver &Observer,
MachineIRBuilder &B);
LegalizerHelper(MachineFunction &MF, const LegalizerInfo &LI,
LegalizeResult moreElementsVector(MachineInstr &MI, unsigned TypeIdx,
LLT MoreTy);
- /// Expose MIRBuilder so clients can set their own RecordInsertInstruction
- /// functions
- MachineIRBuilder &MIRBuilder;
-
- /// Expose LegalizerInfo so the clients can re-use.
- const LegalizerInfo &getLegalizerInfo() const { return LI; }
-
/// Cast the given value to an LLT::scalar with an equivalent size. Returns
/// the register to use if an instruction was inserted. Returns the original
/// register if no coercion was necessary.
LegalizeResult lowerBswap(MachineInstr &MI);
LegalizeResult lowerBitreverse(MachineInstr &MI);
LegalizeResult lowerReadWriteRegister(MachineInstr &MI);
-
-private:
- MachineRegisterInfo &MRI;
- const LegalizerInfo &LI;
- /// To keep track of changes made by the LegalizerHelper.
- GISelChangeObserver &Observer;
};
/// Helper function that creates a libcall to the given \p Name using the given