diff options
| author | Volkan Keles <vkeles@apple.com> | 2017-03-10 18:34:57 +0000 |
|---|---|---|
| committer | Volkan Keles <vkeles@apple.com> | 2017-03-10 18:34:57 +0000 |
| commit | 685fbda217eeb1f74770f9f44c48e0fcc6daf915 (patch) | |
| tree | 268f2bc4b4d216dcb2865a5e761647efc64b81e2 /llvm | |
| parent | a063a41ed075d8de83fda7b2e00b1701048b792a (diff) | |
| download | bcm5719-llvm-685fbda217eeb1f74770f9f44c48e0fcc6daf915.tar.gz bcm5719-llvm-685fbda217eeb1f74770f9f44c48e0fcc6daf915.zip | |
[GlobalISel] Make LegalizerInfo accessible in LegalizerHelper
Summary:
We don’t actually use LegalizerInfo in Legalizer pass, it’s just passed
as an argument.
In order to check if an instruction is legal or not, we need to get LegalizerInfo
by calling `MI.getParent()->getParent()->getSubtarget().getLegalizerInfo()`.
Instead, make LegalizerInfo accessible in LegalizerHelper.
Reviewers: qcolombet, aditya_nandakumar, dsanders, ab, t.p.northover, kristof.beyls
Reviewed By: qcolombet
Subscribers: dberris, llvm-commits, rovka
Differential Revision: https://reviews.llvm.org/D30838
llvm-svn: 297491
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/Legalizer.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 16 |
3 files changed, 11 insertions, 15 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h b/llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h index 56c444ca46b..ec8e141893e 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h @@ -55,11 +55,9 @@ public: /// /// Considered as an opaque blob, the legal code will use and define the same /// registers as \p MI. - LegalizeResult legalizeInstrStep(MachineInstr &MI, - const LegalizerInfo &LegalizerInfo); + LegalizeResult legalizeInstrStep(MachineInstr &MI); - LegalizeResult legalizeInstr(MachineInstr &MI, - const LegalizerInfo &LegalizerInfo); + LegalizeResult legalizeInstr(MachineInstr &MI); /// Legalize an instruction by emiting a runtime library call instead. LegalizeResult libcall(MachineInstr &MI); @@ -97,6 +95,7 @@ private: MachineIRBuilder MIRBuilder; MachineRegisterInfo &MRI; + const LegalizerInfo &LI; }; } // End namespace llvm. diff --git a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp index a849346ce99..849363caf09 100644 --- a/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp +++ b/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp @@ -151,7 +151,6 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) { DEBUG(dbgs() << "Legalize Machine IR for: " << MF.getName() << '\n'); init(MF); const TargetPassConfig &TPC = getAnalysis<TargetPassConfig>(); - const LegalizerInfo &LegalizerInfo = *MF.getSubtarget().getLegalizerInfo(); MachineOptimizationRemarkEmitter MORE(MF, /*MBFI=*/nullptr); LegalizerHelper Helper(MF); @@ -173,7 +172,7 @@ bool Legalizer::runOnMachineFunction(MachineFunction &MF) { if (!isPreISelGenericOpcode(MI->getOpcode())) continue; - auto Res = Helper.legalizeInstr(*MI, LegalizerInfo); + auto Res = Helper.legalizeInstr(*MI); // Error out if we couldn't legalize this instruction. We may want to fall // back to DAG ISel instead in the future. diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index da7e9595eed..bab92e25a5b 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -29,14 +29,13 @@ using namespace llvm; LegalizerHelper::LegalizerHelper(MachineFunction &MF) - : MRI(MF.getRegInfo()) { + : MRI(MF.getRegInfo()), LI(*MF.getSubtarget().getLegalizerInfo()) { MIRBuilder.setMF(MF); } LegalizerHelper::LegalizeResult -LegalizerHelper::legalizeInstrStep(MachineInstr &MI, - const LegalizerInfo &LegalizerInfo) { - auto Action = LegalizerInfo.getAction(MI, MRI); +LegalizerHelper::legalizeInstrStep(MachineInstr &MI) { + auto Action = LI.getAction(MI, MRI); switch (std::get<0>(Action)) { case LegalizerInfo::Legal: return AlreadyLegal; @@ -51,16 +50,15 @@ LegalizerHelper::legalizeInstrStep(MachineInstr &MI, case LegalizerInfo::FewerElements: return fewerElementsVector(MI, std::get<1>(Action), std::get<2>(Action)); case LegalizerInfo::Custom: - return LegalizerInfo.legalizeCustom(MI, MRI, MIRBuilder) ? Legalized - : UnableToLegalize; + return LI.legalizeCustom(MI, MRI, MIRBuilder) ? Legalized + : UnableToLegalize; default: return UnableToLegalize; } } LegalizerHelper::LegalizeResult -LegalizerHelper::legalizeInstr(MachineInstr &MI, - const LegalizerInfo &LegalizerInfo) { +LegalizerHelper::legalizeInstr(MachineInstr &MI) { SmallVector<MachineInstr *, 4> WorkList; MIRBuilder.recordInsertions( [&](MachineInstr *MI) { WorkList.push_back(MI); }); @@ -70,7 +68,7 @@ LegalizerHelper::legalizeInstr(MachineInstr &MI, LegalizeResult Res; unsigned Idx = 0; do { - Res = legalizeInstrStep(*WorkList[Idx], LegalizerInfo); + Res = legalizeInstrStep(*WorkList[Idx]); if (Res == UnableToLegalize) { MIRBuilder.stopRecordingInsertions(); return UnableToLegalize; |

