[llvm-branch-commits] [llvm] IR: Accept x86_fp80 as a long-double-type value (PR #210818)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jul 22 04:42:20 PDT 2026
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/210818
>From 5329e3bf842a1da2b1065769d8e93a4a1342baa4 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 20 Jul 2026 22:45:21 +0200
Subject: [PATCH] IR: Accept x86_fp80 and float as a long-double-type value
Prepare to emit long-double-type for all targets.
Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
---
llvm/docs/LangRef.md | 6 ++++++
llvm/lib/IR/Verifier.cpp | 4 +++-
llvm/test/Assembler/module-flags-long-double-type.ll | 12 ++++++++++++
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/llvm/docs/LangRef.md b/llvm/docs/LangRef.md
index 8b6b847d4e41a..335999e5da2f1 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -9367,12 +9367,18 @@ type, and must be one of:
* - Value
- Meaning
+* - `"float"`
+ - IEEE 754 single precision (32-bit).
+
* - `"double"`
- IEEE 754 double precision (64-bit).
* - `"fp128"`
- IEEE 754 quadruple precision (128-bit).
+* - `"x86_fp80"`
+ - x87 80-bit extended precision.
+
* - `"ppc_fp128"`
- IBM `double-double` (a pair of IEEE doubles).
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 3324752fd5baa..b9ba7252d91ab 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -2007,7 +2007,9 @@ Verifier::visitModuleFlag(const MDNode *Op,
Check(Value, "long-double-type metadata requires a string argument");
if (Value)
Check(Value->getString() == "ppc_fp128" ||
- Value->getString() == "fp128" || Value->getString() == "double",
+ Value->getString() == "fp128" ||
+ Value->getString() == "x86_fp80" ||
+ Value->getString() == "double" || Value->getString() == "float",
"invalid long-double-type metadata value", Op);
}
diff --git a/llvm/test/Assembler/module-flags-long-double-type.ll b/llvm/test/Assembler/module-flags-long-double-type.ll
index 636758d810695..9892f634eeecf 100644
--- a/llvm/test/Assembler/module-flags-long-double-type.ll
+++ b/llvm/test/Assembler/module-flags-long-double-type.ll
@@ -1,7 +1,9 @@
; RUN: split-file %s %t
; RUN: llvm-as < %t/ppc_fp128.ll | llvm-dis | FileCheck %s --check-prefix=PPCFP128
; RUN: llvm-as < %t/fp128.ll | llvm-dis | FileCheck %s --check-prefix=FP128
+; RUN: llvm-as < %t/x86_fp80.ll | llvm-dis | FileCheck %s --check-prefix=X86FP80
; RUN: llvm-as < %t/double.ll | llvm-dis | FileCheck %s --check-prefix=DOUBLE
+; RUN: llvm-as < %t/float.ll | llvm-dis | FileCheck %s --check-prefix=FLOAT
;--- ppc_fp128.ll
!llvm.module.flags = !{!0}
@@ -13,7 +15,17 @@
!0 = !{i32 1, !"long-double-type", !"fp128"}
; FP128: !0 = !{i32 1, !"long-double-type", !"fp128"}
+;--- x86_fp80.ll
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"long-double-type", !"x86_fp80"}
+; X86FP80: !0 = !{i32 1, !"long-double-type", !"x86_fp80"}
+
;--- double.ll
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"long-double-type", !"double"}
; DOUBLE: !0 = !{i32 1, !"long-double-type", !"double"}
+
+;--- float.ll
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"long-double-type", !"float"}
+; FLOAT: !0 = !{i32 1, !"long-double-type", !"float"}
More information about the llvm-branch-commits
mailing list