[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