[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