diff options
author | Zakk Chen <zakk.chen@sifive.com> | 2020-01-15 06:41:08 -0800 |
---|---|---|
committer | Zakk Chen <zakk.chen@sifive.com> | 2020-01-21 07:32:12 -0800 |
commit | 1256d68093ac1696034e385bbb4cb6e516b66bea (patch) | |
tree | f8af1bccba27c58d787d8a2b7c94126d251b9823 /llvm/lib/Target/RISCV/RISCVTargetMachine.cpp | |
parent | 2147703bde1e1a7a1b89ccb66f55d36fd17620f1 (diff) | |
download | llvm-1256d68093ac1696034e385bbb4cb6e516b66bea.zip llvm-1256d68093ac1696034e385bbb4cb6e516b66bea.tar.gz llvm-1256d68093ac1696034e385bbb4cb6e516b66bea.tar.bz2 |
[RISCV] Check the target-abi module flag matches the option
Reviewers: lenary, asb
Reviewed By: lenary
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72768
Diffstat (limited to 'llvm/lib/Target/RISCV/RISCVTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/RISCV/RISCVTargetMachine.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp index 2bb2698..de71c01 100644 --- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp +++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp @@ -15,6 +15,7 @@ #include "RISCVTargetObjectFile.h" #include "RISCVTargetTransformInfo.h" #include "TargetInfo/RISCVTargetInfo.h" +#include "Utils/RISCVBaseInfo.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/CodeGen/GlobalISel/IRTranslator.h" @@ -89,8 +90,17 @@ RISCVTargetMachine::getSubtargetImpl(const Function &F) const { // creation will depend on the TM and the code generation flags on the // function that reside in TargetOptions. resetTargetOptions(F); - I = std::make_unique<RISCVSubtarget>(TargetTriple, CPU, FS, - Options.MCOptions.getABIName(), *this); + auto ABIName = Options.MCOptions.getABIName(); + if (const MDString *ModuleTargetABI = dyn_cast_or_null<MDString>( + F.getParent()->getModuleFlag("target-abi"))) { + auto TargetABI = RISCVABI::getTargetABI(ABIName); + if (TargetABI != RISCVABI::ABI_Unknown && + ModuleTargetABI->getString() != ABIName) { + report_fatal_error("-target-abi option != target-abi module flag"); + } + ABIName = ModuleTargetABI->getString(); + } + I = std::make_unique<RISCVSubtarget>(TargetTriple, CPU, FS, ABIName, *this); } return I.get(); } |