diff options
Diffstat (limited to 'lib/Target/RISCV/RISCVTargetMachine.cpp')
| -rw-r--r-- | lib/Target/RISCV/RISCVTargetMachine.cpp | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/Target/RISCV/RISCVTargetMachine.cpp b/lib/Target/RISCV/RISCVTargetMachine.cpp index a2ebf5bf3e6b7..8937ec200bd74 100644 --- a/lib/Target/RISCV/RISCVTargetMachine.cpp +++ b/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -27,6 +27,8 @@ using namespace llvm;  extern "C" void LLVMInitializeRISCVTarget() {    RegisterTargetMachine<RISCVTargetMachine> X(getTheRISCV32Target());    RegisterTargetMachine<RISCVTargetMachine> Y(getTheRISCV64Target()); +  auto PR = PassRegistry::getPassRegistry(); +  initializeRISCVExpandPseudoPass(*PR);  }  static std::string computeDataLayout(const Triple &TT) { @@ -45,12 +47,6 @@ 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, @@ -59,7 +55,7 @@ RISCVTargetMachine::RISCVTargetMachine(const Target &T, const Triple &TT,                                         CodeGenOpt::Level OL, bool JIT)      : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options,                          getEffectiveRelocModel(TT, RM), -                        getEffectiveCodeModel(CM), OL), +                        getEffectiveCodeModel(CM, CodeModel::Small), OL),        TLOF(make_unique<RISCVELFTargetObjectFile>()),        Subtarget(TT, CPU, FS, *this) {    initAsmInfo(); @@ -78,6 +74,7 @@ public:    void addIRPasses() override;    bool addInstSelector() override;    void addPreEmitPass() override; +  void addPreEmitPass2() override;    void addPreRegAlloc() override;  };  } @@ -99,6 +96,13 @@ bool RISCVPassConfig::addInstSelector() {  void RISCVPassConfig::addPreEmitPass() { addPass(&BranchRelaxationPassID); } +void RISCVPassConfig::addPreEmitPass2() { +  // Schedule the expansion of AMOs at the last possible moment, avoiding the +  // possibility for other passes to break the requirements for forward +  // progress in the LR/SC block. +  addPass(createRISCVExpandPseudoPass()); +} +  void RISCVPassConfig::addPreRegAlloc() {    addPass(createRISCVMergeBaseOffsetOptPass());  }  | 
