summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Nios2/Nios2TargetMachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/Nios2/Nios2TargetMachine.cpp')
-rw-r--r--llvm/lib/Target/Nios2/Nios2TargetMachine.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/llvm/lib/Target/Nios2/Nios2TargetMachine.cpp b/llvm/lib/Target/Nios2/Nios2TargetMachine.cpp
index 7370dac2ce3..b7594dde709 100644
--- a/llvm/lib/Target/Nios2/Nios2TargetMachine.cpp
+++ b/llvm/lib/Target/Nios2/Nios2TargetMachine.cpp
@@ -13,6 +13,7 @@
#include "Nios2TargetMachine.h"
#include "Nios2.h"
+#include "Nios2TargetObjectFile.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/Support/TargetRegistry.h"
@@ -36,14 +37,27 @@ static Reloc::Model getEffectiveRelocModel(Optional<Reloc::Model> RM) {
return *RM;
}
+static CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM,
+ Reloc::Model RM, bool JIT) {
+ if (CM)
+ return *CM;
+ return CodeModel::Small;
+}
+
Nios2TargetMachine::Nios2TargetMachine(const Target &T, const Triple &TT,
StringRef CPU, StringRef FS,
const TargetOptions &Options,
Optional<Reloc::Model> RM,
Optional<CodeModel::Model> CM,
CodeGenOpt::Level OL, bool JIT)
- : LLVMTargetMachine(T, computeDataLayout(), TT, CPU, FS, Options,
- getEffectiveRelocModel(RM), *CM, OL) {}
+ : LLVMTargetMachine(
+ T, computeDataLayout(), TT, CPU, FS, Options,
+ getEffectiveRelocModel(RM),
+ getEffectiveCodeModel(CM, getEffectiveRelocModel(RM), JIT), OL),
+ TLOF(make_unique<Nios2TargetObjectFile>()),
+ Subtarget(TT, CPU, FS, *this) {
+ initAsmInfo();
+}
Nios2TargetMachine::~Nios2TargetMachine() {}
@@ -82,6 +96,7 @@ public:
}
void addCodeGenPrepare() override;
+ bool addInstSelector() override;
void addIRPasses() override;
};
} // namespace
@@ -95,3 +110,10 @@ void Nios2PassConfig::addCodeGenPrepare() {
}
void Nios2PassConfig::addIRPasses() { TargetPassConfig::addIRPasses(); }
+
+// Install an instruction selector pass using
+// the ISelDag to gen Nios2 code.
+bool Nios2PassConfig::addInstSelector() {
+ addPass(createNios2ISelDag(getNios2TargetMachine(), getOptLevel()));
+ return false;
+}
OpenPOWER on IntegriCloud