[llvm] 67b3b87 - [LLVM][GlobalISel] Make CSEMIRBuilder::buildFConstant scalable vector aware. (#200386)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 2 04:22:53 PDT 2026


Author: Paul Walker
Date: 2026-06-02T12:22:48+01:00
New Revision: 67b3b87e6d64d7d706e14be8c5bba6acdc200623

URL: https://github.com/llvm/llvm-project/commit/67b3b87e6d64d7d706e14be8c5bba6acdc200623
DIFF: https://github.com/llvm/llvm-project/commit/67b3b87e6d64d7d706e14be8c5bba6acdc200623.diff

LOG: [LLVM][GlobalISel] Make CSEMIRBuilder::buildFConstant scalable vector aware. (#200386)

Added: 
    

Modified: 
    llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp
    llvm/test/CodeGen/AArch64/GlobalISel/select-splat-vector.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp
index 8e5bf2120dd40..19eafa5b147d8 100644
--- a/llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CSEMIRBuilder.cpp
@@ -364,8 +364,10 @@ MachineInstrBuilder CSEMIRBuilder::buildFConstant(const DstOp &Res,
 
   // For vectors, CSE the element only for now.
   LLT Ty = Res.getLLTTy(*getMRI());
-  if (Ty.isVector())
+  if (Ty.isFixedVector())
     return buildSplatBuildVector(Res, buildFConstant(Ty.getElementType(), Val));
+  if (Ty.isScalableVector())
+    return buildSplatVector(Res, buildFConstant(Ty.getElementType(), Val));
 
   FoldingSetNodeID ID;
   GISelInstProfileBuilder ProfBuilder(ID, *getMRI());

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-splat-vector.ll b/llvm/test/CodeGen/AArch64/GlobalISel/select-splat-vector.ll
index 8705e3aa2c305..2caa66948b97c 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-splat-vector.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-splat-vector.ll
@@ -69,5 +69,21 @@ entry:
   ret <vscale x 4 x i32> splat (i32 9)
 }
 
+define <vscale x 4 x float> @splatnxv4f32() {
+; CHECK-SDAG-LABEL: splatnxv4f32:
+; CHECK-SDAG:       // %bb.0: // %entry
+; CHECK-SDAG-NEXT:    fmov z0.s, #1.00000000
+; CHECK-SDAG-NEXT:    ret
+;
+; CHECK-GS-LABEL: splatnxv4f32:
+; CHECK-GS:       // %bb.0: // %entry
+; CHECK-GS-NEXT:    fmov s0, #1.00000000
+; CHECK-GS-NEXT:    fmov w8, s0
+; CHECK-GS-NEXT:    mov z0.s, w8
+; CHECK-GS-NEXT:    ret
+entry:
+  ret <vscale x 4 x float> splat (float 1.0)
+}
+
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
 ; CHECK: {{.*}}


        


More information about the llvm-commits mailing list