[PATCH] D116016: [Clang] [PowerPC] Emit module flag for current float abi
Qiu Chaofan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 19 21:34:04 PST 2021
qiucf created this revision.
qiucf added reviewers: nemanjai, jsji, shchenz, PowerPC, uweigand, MaskRay.
Herald added subscribers: steven.zhang, kbarton.
qiucf requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.
This is part of the efforts adding `.gnu_attribute` support for PowerPC. In Clang, an extra metadata field will be added as `float-abi` to show current `long double` format. So backend can emit `.gnu_attribute` section data from this metadata.
Note: This patch will break 50+ more LIT tests in `clang/test/OpenMP`. They're all trivial changes since only the referenced metadata numbers are changed. They're not included in this review since it's quite large so that browser cannot load them easily.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D116016
Files:
clang/lib/CodeGen/TargetInfo.cpp
clang/test/CodeGen/ppc64-float-abi-attr.c
Index: clang/test/CodeGen/ppc64-float-abi-attr.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/ppc64-float-abi-attr.c
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu %s -emit-llvm -mabi=ieeelongdouble -o - | FileCheck %s --check-prefix=IEEE
+// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu %s -emit-llvm -mlong-double-64 -o - | FileCheck %s --check-prefix=LDBL64
+
+long double foo(long double a, long double b) {
+ return a + b;
+}
+
+// CHECK: !{{[0-9]+}} = !{i32 1, !"float-abi", !"doubledouble"}
+// IEEE: !{{[0-9]+}} = !{i32 1, !"float-abi", !"ieeequad"}
+// LDBL64: !{{[0-9]+}} = !{i32 1, !"float-abi", !"ieeedouble"}
Index: clang/lib/CodeGen/TargetInfo.cpp
===================================================================
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -5030,6 +5030,10 @@
bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
llvm::Value *Address) const override;
+
+ void emitTargetMetadata(CodeGen::CodeGenModule &CGM,
+ const llvm::MapVector<GlobalDecl, StringRef>
+ &MangledDeclNames) const override;
};
class PPC64TargetCodeGenInfo : public DefaultTargetCodeGenInfo {
@@ -5443,6 +5447,22 @@
/*IsAIX*/ false);
}
+void PPC64_SVR4_TargetCodeGenInfo::emitTargetMetadata(
+ CodeGen::CodeGenModule &CGM,
+ const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames) const {
+ llvm::LLVMContext &Ctx = CGM.getLLVMContext();
+ const auto *flt = &CGM.getTarget().getLongDoubleFormat();
+ if (flt == &llvm::APFloat::PPCDoubleDouble())
+ CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
+ llvm::MDString::get(Ctx, "doubledouble"));
+ else if (flt == &llvm::APFloat::IEEEquad())
+ CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
+ llvm::MDString::get(Ctx, "ieeequad"));
+ else if (flt == &llvm::APFloat::IEEEdouble())
+ CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
+ llvm::MDString::get(Ctx, "ieeedouble"));
+}
+
bool
PPC64TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
llvm::Value *Address) const {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116016.395372.patch
Type: text/x-patch
Size: 2520 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211220/3dd7f5c8/attachment.bin>
More information about the cfe-commits
mailing list