diff options
Diffstat (limited to 'llvm/lib/Target/M68k/M68kTargetMachine.cpp')
| -rw-r--r-- | llvm/lib/Target/M68k/M68kTargetMachine.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/llvm/lib/Target/M68k/M68kTargetMachine.cpp b/llvm/lib/Target/M68k/M68kTargetMachine.cpp index fd21fe6bcea8..07453745e951 100644 --- a/llvm/lib/Target/M68k/M68kTargetMachine.cpp +++ b/llvm/lib/Target/M68k/M68kTargetMachine.cpp @@ -13,6 +13,7 @@ #include "M68kTargetMachine.h" #include "M68k.h" +#include "M68kMachineFunction.h" #include "M68kSubtarget.h" #include "M68kTargetObjectFile.h" #include "TargetInfo/M68kTargetInfo.h" @@ -27,6 +28,7 @@ #include "llvm/MC/TargetRegistry.h" #include "llvm/PassRegistry.h" #include <memory> +#include <optional> using namespace llvm; @@ -36,6 +38,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTarget() { RegisterTargetMachine<M68kTargetMachine> X(getTheM68kTarget()); auto *PR = PassRegistry::getPassRegistry(); initializeGlobalISel(*PR); + initializeM68kDAGToDAGISelPass(*PR); } namespace { @@ -70,16 +73,15 @@ std::string computeDataLayout(const Triple &TT, StringRef CPU, } Reloc::Model getEffectiveRelocModel(const Triple &TT, - Optional<Reloc::Model> RM) { + std::optional<Reloc::Model> RM) { // If not defined we default to static - if (!RM.hasValue()) { + if (!RM.has_value()) return Reloc::Static; - } return *RM; } -CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM, +CodeModel::Model getEffectiveCodeModel(std::optional<CodeModel::Model> CM, bool JIT) { if (!CM) { return CodeModel::Small; @@ -88,15 +90,15 @@ CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM, } else if (CM == CodeModel::Kernel) { llvm_unreachable("Kernel code model is not implemented yet"); } - return CM.getValue(); + return CM.value(); } } // end anonymous namespace M68kTargetMachine::M68kTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, - Optional<Reloc::Model> RM, - Optional<CodeModel::Model> CM, + std::optional<Reloc::Model> RM, + std::optional<CodeModel::Model> CM, CodeGenOpt::Level OL, bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), @@ -127,6 +129,13 @@ M68kTargetMachine::getSubtargetImpl(const Function &F) const { return I.get(); } +MachineFunctionInfo *M68kTargetMachine::createMachineFunctionInfo( + BumpPtrAllocator &Allocator, const Function &F, + const TargetSubtargetInfo *STI) const { + return M68kMachineFunctionInfo::create<M68kMachineFunctionInfo>(Allocator, F, + STI); +} + //===----------------------------------------------------------------------===// // Pass Pipeline Configuration //===----------------------------------------------------------------------===// @@ -144,6 +153,7 @@ public: const M68kSubtarget &getM68kSubtarget() const { return *getM68kTargetMachine().getSubtargetImpl(); } + void addIRPasses() override; bool addIRTranslator() override; bool addLegalizeMachineIR() override; bool addRegBankSelect() override; @@ -158,6 +168,11 @@ TargetPassConfig *M68kTargetMachine::createPassConfig(PassManagerBase &PM) { return new M68kPassConfig(*this, PM); } +void M68kPassConfig::addIRPasses() { + addPass(createAtomicExpandPass()); + TargetPassConfig::addIRPasses(); +} + bool M68kPassConfig::addInstSelector() { // Install an instruction selector. addPass(createM68kISelDag(getM68kTargetMachine())); |
