[llvm] [ARM] Recognize abi tag module flags (PR #161306)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 29 23:18:19 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-arm
Author: None (paperchalice)
<details>
<summary>Changes</summary>
Recognize abi tag hints from frontend rather than from architecture and options.
---
Full diff: https://github.com/llvm/llvm-project/pull/161306.diff
2 Files Affected:
- (modified) llvm/lib/Target/ARM/ARMAsmPrinter.cpp (+22-6)
- (added) llvm/test/CodeGen/ARM/build-attributes-module.ll (+14)
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index 1f773e2a7e0fc..125c002682012 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -701,9 +701,21 @@ void ARMAsmPrinter::emitAttributes() {
ARMBuildAttrs::AddressDirect);
}
+ Metadata *MDEx = nullptr;
+ Metadata *MDDM = nullptr;
+ Metadata *MDNM = nullptr;
+ if (const Module *M = MMI->getModule()) {
+ MDEx = M->getModuleFlag("arm-eabi-fp-exceptions");
+ MDDM = M->getModuleFlag("arm-eabi-fp-denormal");
+ MDNM = M->getModuleFlag("arm-eabi-fp-number-model");
+ }
+
// Set FP Denormals.
- if (checkDenormalAttributeConsistency(*MMI->getModule(), "denormal-fp-math",
- DenormalMode::getPreserveSign()))
+ if (auto *DM = mdconst::extract_or_null<ConstantInt>(MDDM))
+ ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal, DM->getZExtValue());
+ else if (checkDenormalAttributeConsistency(*MMI->getModule(),
+ "denormal-fp-math",
+ DenormalMode::getPreserveSign()))
ATS.emitAttribute(ARMBuildAttrs::ABI_FP_denormal,
ARMBuildAttrs::PreserveFPSign);
else if (checkDenormalAttributeConsistency(*MMI->getModule(),
@@ -743,9 +755,11 @@ void ARMAsmPrinter::emitAttributes() {
}
// Set FP exceptions and rounding
- if (checkFunctionsAttributeConsistency(*MMI->getModule(),
- "no-trapping-math", "true") ||
- TM.Options.NoTrappingFPMath)
+ if (auto *Ex = mdconst::extract_or_null<ConstantInt>(MDEx))
+ ATS.emitAttribute(ARMBuildAttrs::ABI_FP_exceptions, Ex->getZExtValue());
+ else if (checkFunctionsAttributeConsistency(*MMI->getModule(),
+ "no-trapping-math", "true") ||
+ TM.Options.NoTrappingFPMath)
ATS.emitAttribute(ARMBuildAttrs::ABI_FP_exceptions,
ARMBuildAttrs::Not_Allowed);
else {
@@ -759,7 +773,9 @@ void ARMAsmPrinter::emitAttributes() {
// TM.Options.NoInfsFPMath && TM.Options.NoNaNsFPMath is the
// equivalent of GCC's -ffinite-math-only flag.
- if (TM.Options.NoInfsFPMath && TM.Options.NoNaNsFPMath)
+ if (auto *NM = mdconst::extract_or_null<ConstantInt>(MDNM))
+ ATS.emitAttribute(ARMBuildAttrs::ABI_FP_number_model, NM->getZExtValue());
+ else if (TM.Options.NoInfsFPMath && TM.Options.NoNaNsFPMath)
ATS.emitAttribute(ARMBuildAttrs::ABI_FP_number_model,
ARMBuildAttrs::Allowed);
else
diff --git a/llvm/test/CodeGen/ARM/build-attributes-module.ll b/llvm/test/CodeGen/ARM/build-attributes-module.ll
new file mode 100644
index 0000000000000..d7ac8e7df376f
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/build-attributes-module.ll
@@ -0,0 +1,14 @@
+; RUN: llc %s -mtriple=arm-none-none-eabi -o - | FileCheck %s
+
+define void @f() {
+ ret void
+}
+
+!llvm.module.flags = !{!0, !1, !2}
+
+; CHECK: .eabi_attribute 20, 0
+!0 = !{i32 2, !"arm-eabi-fp-denormal", i32 0}
+; CHECK: .eabi_attribute 21, 1
+!1 = !{i32 2, !"arm-eabi-fp-exceptions", i32 1}
+; CHECK: .eabi_attribute 23, 1
+!2 = !{i32 2, !"arm-eabi-fp-number-model", i32 1}
``````````
</details>
https://github.com/llvm/llvm-project/pull/161306
More information about the llvm-commits
mailing list