[llvm] [LLVM][CodeGen] Add suppport for vector ConstantInt/FP to scalarConstantToHexString. (PR #180978)

Paul Walker via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 11 09:31:17 PST 2026


https://github.com/paulwalker-arm created https://github.com/llvm/llvm-project/pull/180978

None

>From 3a50ea93d6eca71cb2c1a9fd1307ca3ecf4f5599 Mon Sep 17 00:00:00 2001
From: Paul Walker <paul.walker at arm.com>
Date: Wed, 11 Feb 2026 16:51:27 +0000
Subject: [PATCH 1/2] Add tests showing bogus constant_to_hexstring transform.

---
 llvm/test/CodeGen/X86/win_cst_pool.ll | 49 ++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/llvm/test/CodeGen/X86/win_cst_pool.ll b/llvm/test/CodeGen/X86/win_cst_pool.ll
index 1fc05b26fddb5..be6924b3a73e2 100644
--- a/llvm/test/CodeGen/X86/win_cst_pool.ll
+++ b/llvm/test/CodeGen/X86/win_cst_pool.ll
@@ -2,6 +2,7 @@
 ; RUN: llc < %s -mattr=sse2 -mattr=avx | FileCheck %s
 ; RUN: llc < %s -mtriple=x86_64-win32 -mattr=sse2 -mattr=avx | FileCheck %s
 ; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=sse2 -mattr=avx | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=sse2 -mattr=avx --use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat | FileCheck %s --check-prefix=CHECK-CI
 ; GNU environment.
 ; RUN: llc < %s -mtriple=x86_64-win32-gnu -mattr=sse2 -mattr=avx | FileCheck -check-prefix=MINGW %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@@ -101,4 +102,50 @@ entry:
 ; CHECK: 	.quad	8589934593              # 0x200000001
 ; CHECK: 	.quad	17179869187             # 0x400000003
 ; CHECK: 	.quad	8589934593              # 0x200000001
-; CHECK: 	.quad	17179869187
+; CHECK: 	.quad	17179869187             # 0x400000003
+
+define <4 x i64> @ymm_splat() {
+entry:
+  ret <4 x i64> splat(i64 8589934593)
+}
+
+; CHECK:	.globl	__ymm at 0000000200000001000000020000000100000002000000010000000200000001
+; CHECK:	.section	.rdata,"dr",discard,__ymm at 0000000200000001000000020000000100000002000000010000000200000001
+; CHECK:	.p2align	5
+; CHECK: __ymm at 0000000200000001000000020000000100000002000000010000000200000001
+; CHECK: 	.quad	8589934593             # 0x200000001
+; CHECK: 	.quad	8589934593             # 0x200000001
+; CHECK: 	.quad	8589934593             # 0x200000001
+; CHECK: 	.quad	8589934593             # 0x200000001
+
+; CHECK-CI:	.globl	__ymm at 0000000200000001
+; CHECK-CI:	.section	.rdata,"dr",discard,__ymm at 0000000200000001
+; CHECK-CI:	.p2align	5
+; CHECK-CI: __ymm at 0000000200000001
+; CHECK-CI: 	.quad	8589934593             # 0x200000001
+; CHECK-CI: 	.quad	8589934593             # 0x200000001
+; CHECK-CI: 	.quad	8589934593             # 0x200000001
+; CHECK-CI: 	.quad	8589934593             # 0x200000001
+
+define <4 x double> @ymm_splat_double() {
+entry:
+  ret <4 x double> splat(double 0x0000000000800000)
+}
+
+; CHECK:	.globl	__ymm at 0000000000800000000000000080000000000000008000000000000000800000
+; CHECK:	.section	.rdata,"dr",discard,__ymm at 0000000000800000000000000080000000000000008000000000000000800000
+; CHECK:	.p2align	5, 0x0
+; CHECK: __ymm at 0000000000800000000000000080000000000000008000000000000000800000:
+; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+
+; CHECK-CI:	.globl	__ymm at 0000000000800000
+; CHECK-CI:	.section	.rdata,"dr",discard,__ymm at 0000000000800000
+; CHECK-CI:	.p2align	5, 0x0
+; CHECK-CI: __ymm at 0000000000800000
+; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
+; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317

>From e36b4a9a4b612c741e44e15ce0c9a2b72320a13c Mon Sep 17 00:00:00 2001
From: Paul Walker <paul.walker at arm.com>
Date: Wed, 24 Dec 2025 18:51:14 +0000
Subject: [PATCH 2/2] [LLVM][CodeGen] Add suppport for vector ConstantInt/FP to
 scalarConstantToHexString.

---
 .../CodeGen/TargetLoweringObjectFileImpl.cpp  | 20 +++++++++++++++++--
 llvm/test/CodeGen/X86/win_cst_pool.ll         | 20 +------------------
 2 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 47ee485a2cca9..6784fae53420d 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -2126,9 +2126,25 @@ static std::string scalarConstantToHexString(const Constant *C) {
   if (isa<UndefValue>(C)) {
     return APIntToHexString(APInt::getZero(Ty->getPrimitiveSizeInBits()));
   } else if (const auto *CFP = dyn_cast<ConstantFP>(C)) {
-    return APIntToHexString(CFP->getValueAPF().bitcastToAPInt());
+    if (CFP->getType()->isFloatingPointTy())
+      return APIntToHexString(CFP->getValueAPF().bitcastToAPInt());
+
+    std::string HexString;
+    unsigned NumElements =
+        cast<FixedVectorType>(CFP->getType())->getNumElements();
+    for (int I = 0; I < NumElements; ++I)
+      HexString += APIntToHexString(CFP->getValueAPF().bitcastToAPInt());
+    return HexString;
   } else if (const auto *CI = dyn_cast<ConstantInt>(C)) {
-    return APIntToHexString(CI->getValue());
+    if (CI->getType()->isIntegerTy())
+      return APIntToHexString(CI->getValue());
+
+    std::string HexString;
+    unsigned NumElements =
+        cast<FixedVectorType>(CI->getType())->getNumElements();
+    for (int I = 0; I < NumElements; ++I)
+      HexString += APIntToHexString(CI->getValue());
+    return HexString;
   } else {
     unsigned NumElements;
     if (auto *VTy = dyn_cast<VectorType>(Ty))
diff --git a/llvm/test/CodeGen/X86/win_cst_pool.ll b/llvm/test/CodeGen/X86/win_cst_pool.ll
index be6924b3a73e2..097fe2a39abb6 100644
--- a/llvm/test/CodeGen/X86/win_cst_pool.ll
+++ b/llvm/test/CodeGen/X86/win_cst_pool.ll
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mattr=sse2 -mattr=avx | FileCheck %s
 ; RUN: llc < %s -mtriple=x86_64-win32 -mattr=sse2 -mattr=avx | FileCheck %s
 ; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=sse2 -mattr=avx | FileCheck %s
-; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=sse2 -mattr=avx --use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat | FileCheck %s --check-prefix=CHECK-CI
+; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=sse2 -mattr=avx --use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat | FileCheck %s
 ; GNU environment.
 ; RUN: llc < %s -mtriple=x86_64-win32-gnu -mattr=sse2 -mattr=avx | FileCheck -check-prefix=MINGW %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@@ -118,15 +118,6 @@ entry:
 ; CHECK: 	.quad	8589934593             # 0x200000001
 ; CHECK: 	.quad	8589934593             # 0x200000001
 
-; CHECK-CI:	.globl	__ymm at 0000000200000001
-; CHECK-CI:	.section	.rdata,"dr",discard,__ymm at 0000000200000001
-; CHECK-CI:	.p2align	5
-; CHECK-CI: __ymm at 0000000200000001
-; CHECK-CI: 	.quad	8589934593             # 0x200000001
-; CHECK-CI: 	.quad	8589934593             # 0x200000001
-; CHECK-CI: 	.quad	8589934593             # 0x200000001
-; CHECK-CI: 	.quad	8589934593             # 0x200000001
-
 define <4 x double> @ymm_splat_double() {
 entry:
   ret <4 x double> splat(double 0x0000000000800000)
@@ -140,12 +131,3 @@ entry:
 ; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
 ; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
 ; CHECK:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
-
-; CHECK-CI:	.globl	__ymm at 0000000000800000
-; CHECK-CI:	.section	.rdata,"dr",discard,__ymm at 0000000000800000
-; CHECK-CI:	.p2align	5, 0x0
-; CHECK-CI: __ymm at 0000000000800000
-; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
-; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
-; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317
-; CHECK-CI:	.quad	0x0000000000800000              # double 4.1445230292290475E-317



More information about the llvm-commits mailing list