forked from OSchip/llvm-project
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. llvm-svn: 232776
This commit is contained in:
parent
72e23a219c
commit
12cf76fe26
|
@ -32,6 +32,7 @@ class MCCodeGenInfo;
|
|||
class MCContext;
|
||||
class MCInstrInfo;
|
||||
class MCRegisterInfo;
|
||||
class MCSubtargetInfo;
|
||||
class MCSymbol;
|
||||
class Target;
|
||||
class DataLayout;
|
||||
|
@ -90,6 +91,7 @@ protected: // Can only create subclasses.
|
|||
const MCAsmInfo *AsmInfo;
|
||||
const MCRegisterInfo *MRI;
|
||||
const MCInstrInfo *MII;
|
||||
const MCSubtargetInfo *STI;
|
||||
|
||||
unsigned RequireStructuredCFG : 1;
|
||||
|
||||
|
@ -140,6 +142,7 @@ public:
|
|||
const MCAsmInfo *getMCAsmInfo() const { return AsmInfo; }
|
||||
const MCRegisterInfo *getMCRegisterInfo() const { return MRI; }
|
||||
const MCInstrInfo *getMCInstrInfo() const { return MII; }
|
||||
const MCSubtargetInfo *getMCSubtargetInfo() const { return STI; }
|
||||
|
||||
/// getIntrinsicInfo - If intrinsic information is available, return it. If
|
||||
/// not, return null.
|
||||
|
|
|
@ -49,6 +49,12 @@ EnableFastISelOption("fast-isel", cl::Hidden,
|
|||
void LLVMTargetMachine::initAsmInfo() {
|
||||
MRI = TheTarget.createMCRegInfo(getTargetTriple());
|
||||
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());
|
||||
// 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)
|
||||
Context->setAllowTemporaryLabels(false);
|
||||
|
||||
const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
|
||||
const MCSubtargetInfo &STI = *getMCSubtargetInfo();
|
||||
const MCAsmInfo &MAI = *getMCAsmInfo();
|
||||
const MCRegisterInfo &MRI = *getMCRegisterInfo();
|
||||
const MCInstrInfo &MII = *getMCInstrInfo();
|
||||
|
@ -249,7 +255,7 @@ bool LLVMTargetMachine::addPassesToEmitMC(PassManagerBase &PM,
|
|||
return true;
|
||||
|
||||
Triple T(getTargetTriple());
|
||||
const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
|
||||
const MCSubtargetInfo &STI = *getMCSubtargetInfo();
|
||||
std::unique_ptr<MCStreamer> AsmStreamer(getTarget().createMCObjectStreamer(
|
||||
T, *Ctx, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll));
|
||||
|
||||
|
|
|
@ -42,13 +42,15 @@ TargetMachine::TargetMachine(const Target &T, StringRef DataLayoutString,
|
|||
const TargetOptions &Options)
|
||||
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
|
||||
TargetFS(FS), CodeGenInfo(nullptr), AsmInfo(nullptr), MRI(nullptr),
|
||||
MII(nullptr), RequireStructuredCFG(false), Options(Options) {}
|
||||
MII(nullptr), STI(nullptr), RequireStructuredCFG(false),
|
||||
Options(Options) {}
|
||||
|
||||
TargetMachine::~TargetMachine() {
|
||||
delete CodeGenInfo;
|
||||
delete AsmInfo;
|
||||
delete MRI;
|
||||
delete MII;
|
||||
delete STI;
|
||||
}
|
||||
|
||||
/// \brief Reset the target options based on the function's attributes.
|
||||
|
|
Loading…
Reference in New Issue