khchen created this revision. khchen added reviewers: lenary, asb. khchen added a project: clang. Herald added subscribers: cfe-commits, luismarques, apazos, sameer.abuasal, pzheng, s.egerton, Jim, benna, psnobl, jocewei, PkmX, rkruppe, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar.
in D71387 <https://reviews.llvm.org/D71387>, and this <http://lists.llvm.org/pipermail/llvm-dev/2020-January/137951.html> we agree encoding target-abi in module would make sense. This patch only emit target-abi for RISCV because the first user is probably only the RISC-V target. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D72755 Files: clang/lib/CodeGen/CodeGenModule.cpp clang/test/CodeGen/riscv-metadata.c Index: clang/test/CodeGen/riscv-metadata.c =================================================================== --- /dev/null +++ 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"} Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ clang/lib/CodeGen/CodeGenModule.cpp @@ -537,6 +537,13 @@ 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);
Index: clang/test/CodeGen/riscv-metadata.c =================================================================== --- /dev/null +++ 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"} Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ clang/lib/CodeGen/CodeGenModule.cpp @@ -537,6 +537,13 @@ 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);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits