diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
| commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
| tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /lib/Target/RISCV/RISCVTargetMachine.cpp | |
| parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
Notes
Diffstat (limited to 'lib/Target/RISCV/RISCVTargetMachine.cpp')
| -rw-r--r-- | lib/Target/RISCV/RISCVTargetMachine.cpp | 41 | 
1 files changed, 35 insertions, 6 deletions
diff --git a/lib/Target/RISCV/RISCVTargetMachine.cpp b/lib/Target/RISCV/RISCVTargetMachine.cpp index 744d7b8aaa3a4..e12168b739990 100644 --- a/lib/Target/RISCV/RISCVTargetMachine.cpp +++ b/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -11,6 +11,7 @@  //  //===----------------------------------------------------------------------===// +#include "RISCV.h"  #include "RISCVTargetMachine.h"  #include "llvm/ADT/STLExtras.h"  #include "llvm/CodeGen/Passes.h" @@ -29,7 +30,7 @@ extern "C" void LLVMInitializeRISCVTarget() {  static std::string computeDataLayout(const Triple &TT) {    if (TT.isArch64Bit()) { -    return "e-m:e-i64:64-n32:64-S128"; +    return "e-m:e-p:64:64-i64:64-i128:128-n64-S128";    } else {      assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported");      return "e-m:e-p:32:32-i64:64-n32-S128"; @@ -43,18 +44,46 @@ static Reloc::Model getEffectiveRelocModel(const Triple &TT,    return *RM;  } +static CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM) { +  if (CM) +    return *CM; +  return CodeModel::Small; +} +  RISCVTargetMachine::RISCVTargetMachine(const Target &T, const Triple &TT,                                         StringRef CPU, StringRef FS,                                         const TargetOptions &Options,                                         Optional<Reloc::Model> RM, -                                       CodeModel::Model CM, -                                       CodeGenOpt::Level OL) +                                       Optional<CodeModel::Model> CM, +                                       CodeGenOpt::Level OL, bool JIT)      : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, -                        getEffectiveRelocModel(TT, RM), CM, OL), -      TLOF(make_unique<TargetLoweringObjectFileELF>()) { +                        getEffectiveRelocModel(TT, RM), +                        getEffectiveCodeModel(CM), OL), +      TLOF(make_unique<TargetLoweringObjectFileELF>()), +      Subtarget(TT, CPU, FS, *this) {    initAsmInfo();  } +namespace { +class RISCVPassConfig : public TargetPassConfig { +public: +  RISCVPassConfig(RISCVTargetMachine &TM, PassManagerBase &PM) +      : TargetPassConfig(TM, PM) {} + +  RISCVTargetMachine &getRISCVTargetMachine() const { +    return getTM<RISCVTargetMachine>(); +  } + +  bool addInstSelector() override; +}; +} +  TargetPassConfig *RISCVTargetMachine::createPassConfig(PassManagerBase &PM) { -  return new TargetPassConfig(*this, PM); +  return new RISCVPassConfig(*this, PM); +} + +bool RISCVPassConfig::addInstSelector() { +  addPass(createRISCVISelDag(getRISCVTargetMachine())); + +  return false;  }  | 
