[llvm] r232775 - Add a TargetMachine local MCRegisterInfo and MCInstrInfo so that
Eric Christopher
echristo at gmail.com
Thu Mar 19 15:36:32 PDT 2015
Author: echristo
Date: Thu Mar 19 17:36:32 2015
New Revision: 232775
URL: http://llvm.org/viewvc/llvm-project?rev=232775&view=rev
Log:
Add a TargetMachine local MCRegisterInfo and MCInstrInfo so that
they can be used without a subtarget in constructing subtarget
independent passes.
Modified:
llvm/trunk/include/llvm/Target/TargetMachine.h
llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
llvm/trunk/lib/Target/TargetMachine.cpp
Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=232775&r1=232774&r2=232775&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
+++ llvm/trunk/include/llvm/Target/TargetMachine.h Thu Mar 19 17:36:32 2015
@@ -30,6 +30,8 @@ class Mangler;
class MCAsmInfo;
class MCCodeGenInfo;
class MCContext;
+class MCInstrInfo;
+class MCRegisterInfo;
class MCSymbol;
class Target;
class DataLayout;
@@ -86,6 +88,8 @@ protected: // Can only create subclasses
/// AsmInfo - Contains target specific asm information.
///
const MCAsmInfo *AsmInfo;
+ const MCRegisterInfo *MRI;
+ const MCInstrInfo *MII;
unsigned RequireStructuredCFG : 1;
@@ -134,6 +138,8 @@ public:
/// getMCAsmInfo - Return target specific asm information.
///
const MCAsmInfo *getMCAsmInfo() const { return AsmInfo; }
+ const MCRegisterInfo *getMCRegisterInfo() const { return MRI; }
+ const MCInstrInfo *getMCInstrInfo() const { return MII; }
/// getIntrinsicInfo - If intrinsic information is available, return it. If
/// not, return null.
Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=232775&r1=232774&r2=232775&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)
+++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Thu Mar 19 17:36:32 2015
@@ -47,8 +47,10 @@ EnableFastISelOption("fast-isel", cl::Hi
cl::desc("Enable the \"fast\" instruction selector"));
void LLVMTargetMachine::initAsmInfo() {
- MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo(
- *getSubtargetImpl()->getRegisterInfo(), getTargetTriple());
+ MRI = TheTarget.createMCRegInfo(getTargetTriple());
+ MII = TheTarget.createMCInstrInfo();
+
+ MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo(*MRI, getTargetTriple());
// TargetSelect.h moved to a different directory between LLVM 2.9 and 3.0,
// and if the old one gets included then MCAsmInfo will be NULL and
// we'll crash later.
@@ -113,8 +115,7 @@ static MCContext *addPassesToGenerateCod
// Install a MachineModuleInfo class, which is an immutable pass that holds
// all the per-module stuff we're generating, including MCContext.
MachineModuleInfo *MMI = new MachineModuleInfo(
- *TM->getMCAsmInfo(), *TM->getSubtargetImpl()->getRegisterInfo(),
- TM->getObjFileLowering());
+ *TM->getMCAsmInfo(), *TM->getMCRegisterInfo(), TM->getObjFileLowering());
PM.add(MMI);
// Set up a MachineFunction for the rest of CodeGen to work on.
@@ -164,15 +165,15 @@ bool LLVMTargetMachine::addPassesToEmitF
const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
const MCAsmInfo &MAI = *getMCAsmInfo();
- const MCRegisterInfo &MRI = *getSubtargetImpl()->getRegisterInfo();
- const MCInstrInfo &MII = *getSubtargetImpl()->getInstrInfo();
+ const MCRegisterInfo &MRI = *getMCRegisterInfo();
+ const MCInstrInfo &MII = *getMCInstrInfo();
+
std::unique_ptr<MCStreamer> AsmStreamer;
switch (FileType) {
case CGFT_AssemblyFile: {
- MCInstPrinter *InstPrinter =
- getTarget().createMCInstPrinter(MAI.getAssemblerDialect(), MAI,
- MII, MRI, STI);
+ MCInstPrinter *InstPrinter = getTarget().createMCInstPrinter(
+ MAI.getAssemblerDialect(), MAI, MII, MRI, STI);
// Create a code emitter if asked to show the encoding.
MCCodeEmitter *MCE = nullptr;
@@ -239,16 +240,16 @@ bool LLVMTargetMachine::addPassesToEmitM
// Create the code emitter for the target if it exists. If not, .o file
// emission fails.
- const MCRegisterInfo &MRI = *getSubtargetImpl()->getRegisterInfo();
- const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
- MCCodeEmitter *MCE = getTarget().createMCCodeEmitter(
- *getSubtargetImpl()->getInstrInfo(), MRI, *Ctx);
+ const MCRegisterInfo &MRI = *getMCRegisterInfo();
+ MCCodeEmitter *MCE =
+ getTarget().createMCCodeEmitter(*getMCInstrInfo(), MRI, *Ctx);
MCAsmBackend *MAB = getTarget().createMCAsmBackend(MRI, getTargetTriple(),
TargetCPU);
if (!MCE || !MAB)
return true;
Triple T(getTargetTriple());
+ const MCSubtargetInfo &STI = getSubtarget<MCSubtargetInfo>();
std::unique_ptr<MCStreamer> AsmStreamer(getTarget().createMCObjectStreamer(
T, *Ctx, *MAB, Out, MCE, STI, Options.MCOptions.MCRelaxAll));
Modified: llvm/trunk/lib/Target/TargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=232775&r1=232774&r2=232775&view=diff
==============================================================================
--- llvm/trunk/lib/Target/TargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/TargetMachine.cpp Thu Mar 19 17:36:32 2015
@@ -22,6 +22,7 @@
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCCodeGenInfo.h"
#include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCSectionMachO.h"
#include "llvm/MC/MCTargetOptions.h"
#include "llvm/MC/SectionKind.h"
@@ -40,12 +41,14 @@ TargetMachine::TargetMachine(const Targe
StringRef TT, StringRef CPU, StringRef FS,
const TargetOptions &Options)
: TheTarget(T), DL(DataLayoutString), TargetTriple(TT), TargetCPU(CPU),
- TargetFS(FS), CodeGenInfo(nullptr), AsmInfo(nullptr),
- RequireStructuredCFG(false), Options(Options) {}
+ TargetFS(FS), CodeGenInfo(nullptr), AsmInfo(nullptr), MRI(nullptr),
+ MII(nullptr), RequireStructuredCFG(false), Options(Options) {}
TargetMachine::~TargetMachine() {
delete CodeGenInfo;
delete AsmInfo;
+ delete MRI;
+ delete MII;
}
/// \brief Reset the target options based on the function's attributes.
More information about the llvm-commits
mailing list