diff options
author | Zakk Chen <zakk.chen@sifive.com> | 2019-12-30 07:14:37 -0800 |
---|---|---|
committer | Hans Wennborg <hans@chromium.org> | 2020-01-27 19:05:31 +0100 |
commit | 01fd650ba3d29709e82a608dfa7fcec35606385d (patch) | |
tree | f3d099aeca7138c0fe867813202a6dc7beea3067 /clang | |
parent | 99464b7eb1d7bbeb7380a6ccc19b0ffdb2f08d40 (diff) | |
download | bcm5719-llvm-01fd650ba3d29709e82a608dfa7fcec35606385d.tar.gz bcm5719-llvm-01fd650ba3d29709e82a608dfa7fcec35606385d.zip |
[RISCV] Pass target-abi via module flag metadata
Reviewers: lenary, asb
Reviewed By: lenary
Tags: #clang
Differential Revision: https://reviews.llvm.org/D72755
(cherry picked from commit e15fb06e2d0a068de549464d72081811e7fac612)
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 7 | ||||
-rw-r--r-- | clang/test/CodeGen/riscv-metadata.c | 14 |
2 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 57beda26677..f8866ac4f7f 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -537,6 +537,13 @@ void CodeGenModule::Release() { getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth); } + if (Arch == llvm::Triple::riscv32 || Arch == llvm::Triple::riscv64) { + StringRef ABIStr = Target.getABI(); + llvm::LLVMContext &Ctx = TheModule.getContext(); + getModule().addModuleFlag(llvm::Module::Error, "target-abi", + llvm::MDString::get(Ctx, ABIStr)); + } + if (CodeGenOpts.SanitizeCfiCrossDso) { // Indicate that we want cross-DSO control flow integrity checks. getModule().addModuleFlag(llvm::Module::Override, "Cross-DSO CFI", 1); diff --git a/clang/test/CodeGen/riscv-metadata.c b/clang/test/CodeGen/riscv-metadata.c new file mode 100644 index 00000000000..19bde4ca73b --- /dev/null +++ b/clang/test/CodeGen/riscv-metadata.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -triple riscv32 -target-abi ilp32 -emit-llvm -o - %s | FileCheck -check-prefix=ILP32 %s +// RUN: %clang_cc1 -triple riscv32 -target-feature +f -target-abi ilp32f -emit-llvm -o - %s | FileCheck -check-prefix=ILP32F %s +// RUN: %clang_cc1 -triple riscv32 -target-feature +d -target-abi ilp32d -emit-llvm -o - %s | FileCheck -check-prefix=ILP32D %s +// RUN: %clang_cc1 -triple riscv64 -target-abi lp64 -emit-llvm -o - %s | FileCheck -check-prefix=LP64 %s +// RUN: %clang_cc1 -triple riscv64 -target-feature +f -target-abi lp64f -emit-llvm -o - %s | FileCheck -check-prefix=LP64F %s +// RUN: %clang_cc1 -triple riscv64 -target-feature +d -target-abi lp64d -emit-llvm -o - %s | FileCheck -check-prefix=LP64D %s + +// ILP32: !{{[0-9]+}} = !{i32 1, !"target-abi", !"ilp32"} +// ILP32F: !{{[0-9]+}} = !{i32 1, !"target-abi", !"ilp32f"} +// ILP32D: !{{[0-9]+}} = !{i32 1, !"target-abi", !"ilp32d"} + +// LP64: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64"} +// LP64F: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64f"} +// LP64D: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64d"} |