forked from OSchip/llvm-project
[GlobalISel] Remove the GISelAccessor API.
Its sole purpose was to avoid spreading around ifdefs related to building global-isel. Since r309990, GlobalISel is not optional anymore, thus, we can get rid of this mechanism all together. NFC. llvm-svn: 310115
This commit is contained in:
parent
c7652e22d7
commit
c046208c52
|
@ -633,5 +633,3 @@ Additionally:
|
|||
|
||||
* ``TargetPassConfig`` --- create the passes constituting the pipeline,
|
||||
including additional passes not included in the :ref:`pipeline`.
|
||||
* ``GISelAccessor`` --- setup the various subtarget-provided classes, with a
|
||||
graceful fallback to no-op when GlobalISel isn't enabled.
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
//===-- GISelAccessor.h - GISel Accessor ------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
/// This file declares the API to access the various APIs related
|
||||
/// to GlobalISel.
|
||||
//
|
||||
//===----------------------------------------------------------------------===/
|
||||
|
||||
#ifndef LLVM_CODEGEN_GLOBALISEL_GISELACCESSOR_H
|
||||
#define LLVM_CODEGEN_GLOBALISEL_GISELACCESSOR_H
|
||||
|
||||
namespace llvm {
|
||||
class CallLowering;
|
||||
class InstructionSelector;
|
||||
class LegalizerInfo;
|
||||
class RegisterBankInfo;
|
||||
|
||||
/// The goal of this helper class is to gather the accessor to all
|
||||
/// the APIs related to GlobalISel.
|
||||
/// It should be derived to feature an actual accessor to the GISel APIs.
|
||||
/// The reason why this is not simply done into the subtarget is to avoid
|
||||
/// spreading ifdefs around.
|
||||
struct GISelAccessor {
|
||||
virtual ~GISelAccessor() {}
|
||||
virtual const CallLowering *getCallLowering() const { return nullptr;}
|
||||
virtual const InstructionSelector *getInstructionSelector() const {
|
||||
return nullptr;
|
||||
}
|
||||
virtual const LegalizerInfo *getLegalizerInfo() const { return nullptr; }
|
||||
virtual const RegisterBankInfo *getRegBankInfo() const { return nullptr;}
|
||||
};
|
||||
} // End namespace llvm;
|
||||
#endif
|
|
@ -21,7 +21,6 @@
|
|||
#include "AArch64CallLowering.h"
|
||||
#include "AArch64LegalizerInfo.h"
|
||||
#include "AArch64RegisterBankInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
|
||||
#include "llvm/CodeGen/GlobalISel/Legalizer.h"
|
||||
|
@ -141,76 +140,42 @@ void AArch64Subtarget::initializeProperties() {
|
|||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct AArch64GISelActualAccessor : public GISelAccessor {
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
|
||||
const CallLowering *getCallLowering() const override {
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *getInstructionSelector() const override {
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *getLegalizerInfo() const override {
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *getRegBankInfo() const override {
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
AArch64Subtarget::AArch64Subtarget(const Triple &TT, const std::string &CPU,
|
||||
const std::string &FS,
|
||||
const TargetMachine &TM, bool LittleEndian)
|
||||
: AArch64GenSubtargetInfo(TT, CPU, FS),
|
||||
ReserveX18(TT.isOSDarwin() || TT.isOSWindows()),
|
||||
IsLittle(LittleEndian), TargetTriple(TT), FrameLowering(),
|
||||
ReserveX18(TT.isOSDarwin() || TT.isOSWindows()), IsLittle(LittleEndian),
|
||||
TargetTriple(TT), FrameLowering(),
|
||||
InstrInfo(initializeSubtargetDependencies(FS, CPU)), TSInfo(),
|
||||
TLInfo(TM, *this), GISel() {
|
||||
AArch64GISelActualAccessor *AArch64GISel = new AArch64GISelActualAccessor();
|
||||
AArch64GISel->CallLoweringInfo.reset(
|
||||
new AArch64CallLowering(*getTargetLowering()));
|
||||
AArch64GISel->Legalizer.reset(new AArch64LegalizerInfo());
|
||||
TLInfo(TM, *this) {
|
||||
CallLoweringInfo.reset(new AArch64CallLowering(*getTargetLowering()));
|
||||
Legalizer.reset(new AArch64LegalizerInfo());
|
||||
|
||||
auto *RBI = new AArch64RegisterBankInfo(*getRegisterInfo());
|
||||
|
||||
// FIXME: At this point, we can't rely on Subtarget having RBI.
|
||||
// It's awkward to mix passing RBI and the Subtarget; should we pass
|
||||
// TII/TRI as well?
|
||||
AArch64GISel->InstSelector.reset(createAArch64InstructionSelector(
|
||||
InstSelector.reset(createAArch64InstructionSelector(
|
||||
*static_cast<const AArch64TargetMachine *>(&TM), *this, *RBI));
|
||||
|
||||
AArch64GISel->RegBankInfo.reset(RBI);
|
||||
setGISelAccessor(*AArch64GISel);
|
||||
RegBankInfo.reset(RBI);
|
||||
}
|
||||
|
||||
const CallLowering *AArch64Subtarget::getCallLowering() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getCallLowering();
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *AArch64Subtarget::getInstructionSelector() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getInstructionSelector();
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *AArch64Subtarget::getLegalizerInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getLegalizerInfo();
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *AArch64Subtarget::getRegBankInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getRegBankInfo();
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
|
||||
/// Find the target operand flags that describe how a global value should be
|
||||
|
|
|
@ -19,7 +19,10 @@
|
|||
#include "AArch64InstrInfo.h"
|
||||
#include "AArch64RegisterInfo.h"
|
||||
#include "AArch64SelectionDAGInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/CallLowering.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
|
||||
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/Target/TargetSubtargetInfo.h"
|
||||
#include <string>
|
||||
|
@ -124,10 +127,12 @@ protected:
|
|||
AArch64InstrInfo InstrInfo;
|
||||
AArch64SelectionDAGInfo TSInfo;
|
||||
AArch64TargetLowering TLInfo;
|
||||
/// Gather the accessor points to GlobalISel-related APIs.
|
||||
/// This is used to avoid ifndefs spreading around while GISel is
|
||||
/// an optional library.
|
||||
std::unique_ptr<GISelAccessor> GISel;
|
||||
|
||||
/// GlobalISel related APIs.
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
|
||||
private:
|
||||
/// initializeSubtargetDependencies - Initializes using CPUString and the
|
||||
|
@ -146,11 +151,6 @@ public:
|
|||
const std::string &FS, const TargetMachine &TM,
|
||||
bool LittleEndian);
|
||||
|
||||
/// This object will take onwership of \p GISelAccessor.
|
||||
void setGISelAccessor(GISelAccessor &GISel) {
|
||||
this->GISel.reset(&GISel);
|
||||
}
|
||||
|
||||
const AArch64SelectionDAGInfo *getSelectionDAGInfo() const override {
|
||||
return &TSInfo;
|
||||
}
|
||||
|
|
|
@ -78,29 +78,6 @@ AMDGPUSubtarget::initializeSubtargetDependencies(const Triple &TT,
|
|||
return *this;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct SIGISelActualAccessor : public GISelAccessor {
|
||||
std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
const AMDGPUCallLowering *getCallLowering() const override {
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
const InstructionSelector *getInstructionSelector() const override {
|
||||
return InstSelector.get();
|
||||
}
|
||||
const LegalizerInfo *getLegalizerInfo() const override {
|
||||
return Legalizer.get();
|
||||
}
|
||||
const RegisterBankInfo *getRegBankInfo() const override {
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
|
||||
const TargetMachine &TM)
|
||||
: AMDGPUGenSubtargetInfo(TT, GPU, FS),
|
||||
|
@ -354,14 +331,12 @@ SISubtarget::SISubtarget(const Triple &TT, StringRef GPU, StringRef FS,
|
|||
: AMDGPUSubtarget(TT, GPU, FS, TM), InstrInfo(*this),
|
||||
FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0),
|
||||
TLInfo(TM, *this) {
|
||||
SIGISelActualAccessor *GISel = new SIGISelActualAccessor();
|
||||
GISel->CallLoweringInfo.reset(new AMDGPUCallLowering(*getTargetLowering()));
|
||||
GISel->Legalizer.reset(new AMDGPULegalizerInfo());
|
||||
CallLoweringInfo.reset(new AMDGPUCallLowering(*getTargetLowering()));
|
||||
Legalizer.reset(new AMDGPULegalizerInfo());
|
||||
|
||||
GISel->RegBankInfo.reset(new AMDGPURegisterBankInfo(*getRegisterInfo()));
|
||||
GISel->InstSelector.reset(new AMDGPUInstructionSelector(
|
||||
*this, *static_cast<AMDGPURegisterBankInfo *>(GISel->RegBankInfo.get())));
|
||||
setGISelAccessor(*GISel);
|
||||
RegBankInfo.reset(new AMDGPURegisterBankInfo(*getRegisterInfo()));
|
||||
InstSelector.reset(new AMDGPUInstructionSelector(
|
||||
*this, *static_cast<AMDGPURegisterBankInfo *>(RegBankInfo.get())));
|
||||
}
|
||||
|
||||
void SISubtarget::overrideSchedPolicy(MachineSchedPolicy &Policy,
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#define LLVM_LIB_TARGET_AMDGPU_AMDGPUSUBTARGET_H
|
||||
|
||||
#include "AMDGPU.h"
|
||||
#include "AMDGPUCallLowering.h"
|
||||
#include "R600FrameLowering.h"
|
||||
#include "R600ISelLowering.h"
|
||||
#include "R600InstrInfo.h"
|
||||
|
@ -25,7 +26,9 @@
|
|||
#include "SIMachineFunctionInfo.h"
|
||||
#include "Utils/AMDGPUBaseInfo.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
|
||||
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
|
||||
#include "llvm/MC/MCInstrItineraries.h"
|
||||
|
@ -631,7 +634,12 @@ private:
|
|||
SIInstrInfo InstrInfo;
|
||||
SIFrameLowering FrameLowering;
|
||||
SITargetLowering TLInfo;
|
||||
std::unique_ptr<GISelAccessor> GISel;
|
||||
|
||||
/// GlobalISel related APIs.
|
||||
std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
|
||||
public:
|
||||
SISubtarget(const Triple &TT, StringRef CPU, StringRef FS,
|
||||
|
@ -650,33 +658,25 @@ public:
|
|||
}
|
||||
|
||||
const CallLowering *getCallLowering() const override {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getCallLowering();
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *getInstructionSelector() const override {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getInstructionSelector();
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *getLegalizerInfo() const override {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getLegalizerInfo();
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *getRegBankInfo() const override {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getRegBankInfo();
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
|
||||
const SIRegisterInfo *getRegisterInfo() const override {
|
||||
return &InstrInfo.getRegisterInfo();
|
||||
}
|
||||
|
||||
void setGISelAccessor(GISelAccessor &GISel) {
|
||||
this->GISel.reset(&GISel);
|
||||
}
|
||||
|
||||
// XXX - Why is this here if it isn't in the default pass set?
|
||||
bool enableEarlyIfConversion() const override {
|
||||
return true;
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
|
||||
#include "llvm/CodeGen/GlobalISel/Legalizer.h"
|
||||
|
@ -97,33 +96,6 @@ ARMFrameLowering *ARMSubtarget::initializeFrameLowering(StringRef CPU,
|
|||
return new ARMFrameLowering(STI);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct ARMGISelActualAccessor : public GISelAccessor {
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
|
||||
const CallLowering *getCallLowering() const override {
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *getInstructionSelector() const override {
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *getLegalizerInfo() const override {
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *getRegBankInfo() const override {
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
ARMSubtarget::ARMSubtarget(const Triple &TT, const std::string &CPU,
|
||||
const std::string &FS,
|
||||
const ARMBaseTargetMachine &TM, bool IsLittle)
|
||||
|
@ -141,40 +113,34 @@ ARMSubtarget::ARMSubtarget(const Triple &TT, const std::string &CPU,
|
|||
assert((isThumb() || hasARMOps()) &&
|
||||
"Target must either be thumb or support ARM operations!");
|
||||
|
||||
ARMGISelActualAccessor *GISel = new ARMGISelActualAccessor();
|
||||
GISel->CallLoweringInfo.reset(new ARMCallLowering(*getTargetLowering()));
|
||||
GISel->Legalizer.reset(new ARMLegalizerInfo(*this));
|
||||
CallLoweringInfo.reset(new ARMCallLowering(*getTargetLowering()));
|
||||
Legalizer.reset(new ARMLegalizerInfo(*this));
|
||||
|
||||
auto *RBI = new ARMRegisterBankInfo(*getRegisterInfo());
|
||||
|
||||
// FIXME: At this point, we can't rely on Subtarget having RBI.
|
||||
// It's awkward to mix passing RBI and the Subtarget; should we pass
|
||||
// TII/TRI as well?
|
||||
GISel->InstSelector.reset(createARMInstructionSelector(
|
||||
InstSelector.reset(createARMInstructionSelector(
|
||||
*static_cast<const ARMBaseTargetMachine *>(&TM), *this, *RBI));
|
||||
|
||||
GISel->RegBankInfo.reset(RBI);
|
||||
setGISelAccessor(*GISel);
|
||||
RegBankInfo.reset(RBI);
|
||||
}
|
||||
|
||||
const CallLowering *ARMSubtarget::getCallLowering() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getCallLowering();
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *ARMSubtarget::getInstructionSelector() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getInstructionSelector();
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *ARMSubtarget::getLegalizerInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getLegalizerInfo();
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *ARMSubtarget::getRegBankInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getRegBankInfo();
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
|
||||
bool ARMSubtarget::isXRaySupported() const {
|
||||
|
|
|
@ -20,7 +20,10 @@
|
|||
#include "ARMISelLowering.h"
|
||||
#include "ARMSelectionDAGInfo.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/CallLowering.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
|
||||
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/MC/MCInstrItineraries.h"
|
||||
#include "llvm/MC/MCSchedule.h"
|
||||
|
@ -419,9 +422,6 @@ public:
|
|||
ARMSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
|
||||
const ARMBaseTargetMachine &TM, bool IsLittle);
|
||||
|
||||
/// This object will take onwership of \p GISelAccessor.
|
||||
void setGISelAccessor(GISelAccessor &GISel) { this->GISel.reset(&GISel); }
|
||||
|
||||
/// getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size
|
||||
/// that still makes it profitable to inline the call.
|
||||
unsigned getMaxInlineSizeThreshold() const {
|
||||
|
@ -469,10 +469,11 @@ private:
|
|||
std::unique_ptr<ARMBaseInstrInfo> InstrInfo;
|
||||
ARMTargetLowering TLInfo;
|
||||
|
||||
/// Gather the accessor points to GlobalISel-related APIs.
|
||||
/// This is used to avoid ifndefs spreading around while GISel is
|
||||
/// an optional library.
|
||||
std::unique_ptr<GISelAccessor> GISel;
|
||||
/// GlobalISel related APIs.
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
|
||||
void initializeEnvironment();
|
||||
void initSubtargetFeatures(StringRef CPU, StringRef FS);
|
||||
|
|
|
@ -348,33 +348,6 @@ X86Subtarget &X86Subtarget::initializeSubtargetDependencies(StringRef CPU,
|
|||
return *this;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct X86GISelActualAccessor : public GISelAccessor {
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
|
||||
const CallLowering *getCallLowering() const override {
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *getInstructionSelector() const override {
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *getLegalizerInfo() const override {
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *getRegBankInfo() const override {
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
X86Subtarget::X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
|
||||
const X86TargetMachine &TM,
|
||||
unsigned StackAlignOverride)
|
||||
|
@ -399,35 +372,29 @@ X86Subtarget::X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
|
|||
setPICStyle(PICStyles::StubPIC);
|
||||
else if (isTargetELF())
|
||||
setPICStyle(PICStyles::GOT);
|
||||
X86GISelActualAccessor *GISel = new X86GISelActualAccessor();
|
||||
|
||||
GISel->CallLoweringInfo.reset(new X86CallLowering(*getTargetLowering()));
|
||||
GISel->Legalizer.reset(new X86LegalizerInfo(*this, TM));
|
||||
CallLoweringInfo.reset(new X86CallLowering(*getTargetLowering()));
|
||||
Legalizer.reset(new X86LegalizerInfo(*this, TM));
|
||||
|
||||
auto *RBI = new X86RegisterBankInfo(*getRegisterInfo());
|
||||
GISel->RegBankInfo.reset(RBI);
|
||||
GISel->InstSelector.reset(createX86InstructionSelector(TM, *this, *RBI));
|
||||
setGISelAccessor(*GISel);
|
||||
RegBankInfo.reset(RBI);
|
||||
InstSelector.reset(createX86InstructionSelector(TM, *this, *RBI));
|
||||
}
|
||||
|
||||
const CallLowering *X86Subtarget::getCallLowering() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getCallLowering();
|
||||
return CallLoweringInfo.get();
|
||||
}
|
||||
|
||||
const InstructionSelector *X86Subtarget::getInstructionSelector() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getInstructionSelector();
|
||||
return InstSelector.get();
|
||||
}
|
||||
|
||||
const LegalizerInfo *X86Subtarget::getLegalizerInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getLegalizerInfo();
|
||||
return Legalizer.get();
|
||||
}
|
||||
|
||||
const RegisterBankInfo *X86Subtarget::getRegBankInfo() const {
|
||||
assert(GISel && "Access to GlobalISel APIs not set");
|
||||
return GISel->getRegBankInfo();
|
||||
return RegBankInfo.get();
|
||||
}
|
||||
|
||||
bool X86Subtarget::enableEarlyIfConversion() const {
|
||||
|
|
|
@ -20,7 +20,10 @@
|
|||
#include "X86SelectionDAGInfo.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
|
||||
#include "llvm/CodeGen/GlobalISel/CallLowering.h"
|
||||
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
|
||||
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
|
||||
#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
|
||||
#include "llvm/IR/CallingConv.h"
|
||||
#include "llvm/MC/MCInstrItineraries.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
|
@ -314,10 +317,11 @@ protected:
|
|||
/// Instruction itineraries for scheduling
|
||||
InstrItineraryData InstrItins;
|
||||
|
||||
/// Gather the accessor points to GlobalISel-related APIs.
|
||||
/// This is used to avoid ifndefs spreading around while GISel is
|
||||
/// an optional library.
|
||||
std::unique_ptr<GISelAccessor> GISel;
|
||||
/// GlobalISel related APIs.
|
||||
std::unique_ptr<CallLowering> CallLoweringInfo;
|
||||
std::unique_ptr<LegalizerInfo> Legalizer;
|
||||
std::unique_ptr<RegisterBankInfo> RegBankInfo;
|
||||
std::unique_ptr<InstructionSelector> InstSelector;
|
||||
|
||||
private:
|
||||
/// Override the stack alignment.
|
||||
|
@ -346,9 +350,6 @@ public:
|
|||
X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
|
||||
const X86TargetMachine &TM, unsigned StackAlignOverride);
|
||||
|
||||
/// This object will take onwership of \p GISelAccessor.
|
||||
void setGISelAccessor(GISelAccessor &GISel) { this->GISel.reset(&GISel); }
|
||||
|
||||
const X86TargetLowering *getTargetLowering() const override {
|
||||
return &TLInfo;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue