mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-24 18:38:50 +00:00
Add an MCSubtargetInfo variable to the TargetMachine.
This enables us to remove calls to the subtarget from the TargetMachine and with a small hack for backends that require global subtarget information for module level code generation, e.g. mips abi flags, as mentioned in a fixme in the code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232776 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d802a47f96
commit
0d6199b3af
@ -32,6 +32,7 @@ class MCCodeGenInfo;
|
|||||||
class MCContext;
|
class MCContext;
|
||||||
class MCInstrInfo;
|
class MCInstrInfo;
|
||||||
class MCRegisterInfo;
|
class MCRegisterInfo;
|
||||||
|
class MCSubtargetInfo;
|
||||||
class MCSymbol;
|
class MCSymbol;
|
||||||
class Target;
|
class Target;
|
||||||
class DataLayout;
|
class DataLayout;
|
||||||
@ -90,6 +91,7 @@ protected: // Can only create subclasses.
|
|||||||
const MCAsmInfo *AsmInfo;
|
const MCAsmInfo *AsmInfo;
|
||||||
const MCRegisterInfo *MRI;
|
const MCRegisterInfo *MRI;
|
||||||
const MCInstrInfo *MII;
|
const MCInstrInfo *MII;
|
||||||
|
const MCSubtargetInfo *STI;
|
||||||
|
|
||||||
unsigned RequireStructuredCFG : 1;
|
unsigned RequireStructuredCFG : 1;
|
||||||
|
|
||||||
@ -140,6 +142,7 @@ public:
|
|||||||
const MCAsmInfo *getMCAsmInfo() const { return AsmInfo; }
|
const MCAsmInfo *getMCAsmInfo() const { return AsmInfo; }
|
||||||
const MCRegisterInfo *getMCRegisterInfo() const { return MRI; }
|
const MCRegisterInfo *getMCRegisterInfo() const { return MRI; }
|
||||||
const MCInstrInfo *getMCInstrInfo() const { return MII; }
|
const MCInstrInfo *getMCInstrInfo() const { return MII; }
|
||||||
|
const MCSubtargetInfo *getMCSubtargetInfo() const { return STI; }
|
||||||
|
|
||||||
/// getIntrinsicInfo - If intrinsic information is available, return it. If
|
/// getIntrinsicInfo - If intrinsic information is available, return it. If
|
||||||
/// not, return null.
|
/// not, return null.
|
||||||
|
@ -49,6 +49,12 @@ EnableFastISelOption("fast-isel", cl::Hidden,
|
|||||||
void LLVMTargetMachine::initAsmInfo() {
|
void LLVMTargetMachine::initAsmInfo() {
|
||||||
MRI = TheTarget.createMCRegInfo(getTargetTriple());
|
MRI = TheTarget.createMCRegInfo(getTargetTriple());
|
||||||
MII = TheTarget.createMCInstrInfo();
|
MII = TheTarget.createMCInstrInfo();
|
||||||
|
// FIXME: Having an MCSubtargetInfo on the target machine is a hack due
|
||||||
|
// to some backends having subtarget feature dependent module level
|
||||||
|
// code generation. This is similar to the hack in the AsmPrinter for
|
||||||
|
// module level assembly etc.
|
||||||
|
STI = TheTarget.createMCSubtargetInfo(getTargetTriple(), getTargetCPU(),
|
||||||
|
getTargetFeatureString());
|
||||||
|
|
||||||
MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo(*MRI, getTargetTriple());
|
MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo(*MRI, getTargetTriple());
|
||||||
// TargetSelect.h moved to a different directory between LLVM 2.9 and 3.0,
|
// TargetSelect.h moved to a different directory between LLVM 2.9 and 3.0,
|
||||||
@ -163,7 +169,7 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
|
|||||||
if (Options.MCOptions.MCSaveTempLabels)
|
if (Options.MCOptions.MCSaveTempLabels)
|
||||||
Context->setAllowTemporaryLabels(false);
|
Context->setAllowTemporaryLabels(false);
|
||||||
|
|
||||||
const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
|
const MCSubtargetInfo &STI = *getMCSubtargetInfo();
|
||||||
const MCAsmInfo &MAI = *getMCAsmInfo();
|
const MCAsmInfo &MAI = *getMCAsmInfo();
|
||||||
const MCRegisterInfo &MRI = *getMCRegisterInfo();
|
const MCRegisterInfo &MRI = *getMCRegisterInfo();
|
||||||
const MCInstrInfo &MII = *getMCInstrInfo();
|
const MCInstrInfo &MII = *getMCInstrInfo();
|
||||||
@ -249,7 +255,7 @@ bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM,
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
Triple T(getTargetTriple());
|
Triple T(getTargetTriple());
|
||||||
const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
|
const MCSubtargetInfo &STI = *getMCSubtargetInfo();
|
||||||
std::unique_ptr<MCStreamer> AsmStreamer(getTarget().createMCObjectStreamer(
|
std::unique_ptr<MCStreamer> AsmStreamer(getTarget().createMCObjectStreamer(
|
||||||
T, *Ctx, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll));
|
T, *Ctx, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll));
|
||||||
|
|
||||||
|
@ -42,13 +42,15 @@ TargetMachine::TargetMachine(const Target &T, StringRef DataLayoutString,
|
|||||||
const TargetOptions &Options)
|
const TargetOptions &Options)
|
||||||
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
|
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
|
||||||
TargetFS(FS), CodeGenInfo(nullptr), AsmInfo(nullptr), MRI(nullptr),
|
TargetFS(FS), CodeGenInfo(nullptr), AsmInfo(nullptr), MRI(nullptr),
|
||||||
MII(nullptr), RequireStructuredCFG(false), Options(Options) {}
|
MII(nullptr), STI(nullptr), RequireStructuredCFG(false),
|
||||||
|
Options(Options) {}
|
||||||
|
|
||||||
TargetMachine::~TargetMachine() {
|
TargetMachine::~TargetMachine() {
|
||||||
delete CodeGenInfo;
|
delete CodeGenInfo;
|
||||||
delete AsmInfo;
|
delete AsmInfo;
|
||||||
delete MRI;
|
delete MRI;
|
||||||
delete MII;
|
delete MII;
|
||||||
|
delete STI;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Reset the target options based on the function's attributes.
|
/// \brief Reset the target options based on the function's attributes.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user