[llvm] [LLVM][CodeGen] Add suppport for vector ConstantInt/FP to scalarConstantToHexString. (PR #180978)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 11 09:31:52 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Paul Walker (paulwalker-arm)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/180978.diff
2 Files Affected:
- (modified) llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (+18-2)
- (modified) llvm/test/CodeGen/X86/win_cst_pool.ll (+30-1)
``````````diff
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 1fc05b26fddb5..097fe2a39abb6 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
; 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,32 @@ 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
+
+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
``````````
</details>
https://github.com/llvm/llvm-project/pull/180978
More information about the llvm-commits
mailing list