GlobalISel: Add TargetLowering member to LegalizerHelper

This commit is contained in:
Matt Arsenault 2020-07-31 11:41:05 -04:00
parent e5d08fcbac
commit adbcc8e733
2 changed files with 8 additions and 6 deletions

View File

@ -32,6 +32,7 @@ class LegalizerInfo;
class Legalizer; class Legalizer;
class MachineRegisterInfo; class MachineRegisterInfo;
class GISelChangeObserver; class GISelChangeObserver;
class TargetLowering;
class LegalizerHelper { class LegalizerHelper {
public: public:
@ -45,6 +46,7 @@ public:
private: private:
MachineRegisterInfo &MRI; MachineRegisterInfo &MRI;
const LegalizerInfo &LI; const LegalizerInfo &LI;
const TargetLowering &TLI;
public: public:
enum LegalizeResult { enum LegalizeResult {
@ -62,6 +64,7 @@ public:
/// Expose LegalizerInfo so the clients can re-use. /// Expose LegalizerInfo so the clients can re-use.
const LegalizerInfo &getLegalizerInfo() const { return LI; } const LegalizerInfo &getLegalizerInfo() const { return LI; }
const TargetLowering &getTargetLowering() const { return TLI; }
LegalizerHelper(MachineFunction &MF, GISelChangeObserver &Observer, LegalizerHelper(MachineFunction &MF, GISelChangeObserver &Observer,
MachineIRBuilder &B); MachineIRBuilder &B);

View File

@ -90,14 +90,16 @@ LegalizerHelper::LegalizerHelper(MachineFunction &MF,
GISelChangeObserver &Observer, GISelChangeObserver &Observer,
MachineIRBuilder &Builder) MachineIRBuilder &Builder)
: MIRBuilder(Builder), Observer(Observer), MRI(MF.getRegInfo()), : MIRBuilder(Builder), Observer(Observer), MRI(MF.getRegInfo()),
LI(*MF.getSubtarget().getLegalizerInfo()) { LI(*MF.getSubtarget().getLegalizerInfo()),
TLI(*MF.getSubtarget().getTargetLowering()) {
MIRBuilder.setChangeObserver(Observer); MIRBuilder.setChangeObserver(Observer);
} }
LegalizerHelper::LegalizerHelper(MachineFunction &MF, const LegalizerInfo &LI, LegalizerHelper::LegalizerHelper(MachineFunction &MF, const LegalizerInfo &LI,
GISelChangeObserver &Observer, GISelChangeObserver &Observer,
MachineIRBuilder &B) MachineIRBuilder &B)
: MIRBuilder(B), Observer(Observer), MRI(MF.getRegInfo()), LI(LI) { : MIRBuilder(B), Observer(Observer), MRI(MF.getRegInfo()), LI(LI),
TLI(*MF.getSubtarget().getTargetLowering()) {
MIRBuilder.setChangeObserver(Observer); MIRBuilder.setChangeObserver(Observer);
} }
LegalizerHelper::LegalizeResult LegalizerHelper::LegalizeResult
@ -5714,7 +5716,6 @@ LegalizerHelper::lowerDynStackAlloc(MachineInstr &MI) {
LLT PtrTy = MRI.getType(Dst); LLT PtrTy = MRI.getType(Dst);
LLT IntPtrTy = LLT::scalar(PtrTy.getSizeInBits()); LLT IntPtrTy = LLT::scalar(PtrTy.getSizeInBits());
const auto &TLI = *MF.getSubtarget().getTargetLowering();
Register SPReg = TLI.getStackPointerRegisterToSaveRestore(); Register SPReg = TLI.getStackPointerRegisterToSaveRestore();
auto SPTmp = MIRBuilder.buildCopy(PtrTy, SPReg); auto SPTmp = MIRBuilder.buildCopy(PtrTy, SPReg);
SPTmp = MIRBuilder.buildCast(IntPtrTy, SPTmp); SPTmp = MIRBuilder.buildCast(IntPtrTy, SPTmp);
@ -6118,8 +6119,6 @@ LegalizerHelper::lowerBitreverse(MachineInstr &MI) {
LegalizerHelper::LegalizeResult LegalizerHelper::LegalizeResult
LegalizerHelper::lowerReadWriteRegister(MachineInstr &MI) { LegalizerHelper::lowerReadWriteRegister(MachineInstr &MI) {
MachineFunction &MF = MIRBuilder.getMF(); MachineFunction &MF = MIRBuilder.getMF();
const TargetSubtargetInfo &STI = MF.getSubtarget();
const TargetLowering *TLI = STI.getTargetLowering();
bool IsRead = MI.getOpcode() == TargetOpcode::G_READ_REGISTER; bool IsRead = MI.getOpcode() == TargetOpcode::G_READ_REGISTER;
int NameOpIdx = IsRead ? 1 : 0; int NameOpIdx = IsRead ? 1 : 0;
@ -6130,7 +6129,7 @@ LegalizerHelper::lowerReadWriteRegister(MachineInstr &MI) {
const MDString *RegStr = cast<MDString>( const MDString *RegStr = cast<MDString>(
cast<MDNode>(MI.getOperand(NameOpIdx).getMetadata())->getOperand(0)); cast<MDNode>(MI.getOperand(NameOpIdx).getMetadata())->getOperand(0));
Register PhysReg = TLI->getRegisterByName(RegStr->getString().data(), Ty, MF); Register PhysReg = TLI.getRegisterByName(RegStr->getString().data(), Ty, MF);
if (!PhysReg.isValid()) if (!PhysReg.isValid())
return UnableToLegalize; return UnableToLegalize;