[llvm] [AArch64][GlobalISel] Use integer types in udot zero lanes. (PR #218115)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 22 01:49:03 PDT 2026
https://github.com/davemgreen created https://github.com/llvm/llvm-project/pull/218115
None
>From 80ad345d4afe26fa5b4984d2c8bdabb4daae59f0 Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Sat, 22 Aug 2026 09:48:52 +0100
Subject: [PATCH] [AArch64][GlobalISel] Use integer types in udot zero lanes.
---
.../GISel/AArch64PreLegalizerCombiner.cpp | 19 ++++++++-----------
.../prelegalizer-combiner-scalar.mir | 8 ++++----
2 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64PreLegalizerCombiner.cpp b/llvm/lib/Target/AArch64/GISel/AArch64PreLegalizerCombiner.cpp
index 8d25f56fc5226..e7ecdce8caba7 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64PreLegalizerCombiner.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64PreLegalizerCombiner.cpp
@@ -349,19 +349,16 @@ void applyExtAddvToDotAddv(MachineInstr &MI, MachineRegisterInfo &MRI,
// Split the elements into v16i8 and v8i8
LLT MainTy = LLT::fixed_vector(16, LLT::integer(8));
LLT LeftoverTy1, LeftoverTy2;
- if ((!extractParts(Ext1SrcReg, MRI.getType(Ext1SrcReg), MainTy,
- LeftoverTy1, Ext1UnmergeReg, Leftover1, Builder,
- MRI)) ||
- (!extractParts(Ext2SrcReg, MRI.getType(Ext2SrcReg), MainTy,
- LeftoverTy2, Ext2UnmergeReg, Leftover2, Builder,
- MRI))) {
+ if (!extractParts(Ext1SrcReg, MRI.getType(Ext1SrcReg), MainTy,
+ LeftoverTy1, Ext1UnmergeReg, Leftover1, Builder, MRI) ||
+ !extractParts(Ext2SrcReg, MRI.getType(Ext2SrcReg), MainTy,
+ LeftoverTy2, Ext2UnmergeReg, Leftover2, Builder, MRI)) {
llvm_unreachable("Unable to split this vector properly");
}
// Pad the leftover v8i8 vector with register of 0s of type v8i8
- Register v8Zeroes = Builder.buildConstant(LLT::fixed_vector(8, 8), 0)
- ->getOperand(0)
- .getReg();
+ auto v8Zeroes =
+ Builder.buildConstant(LLT::fixed_vector(8, LLT::integer(8)), 0);
Ext1UnmergeReg.push_back(
Builder
@@ -396,10 +393,10 @@ void applyExtAddvToDotAddv(MachineInstr &MI, MachineRegisterInfo &MRI,
ZeroesLLT = LLT::fixed_vector(2, LLT::integer(32));
NumElements += 2;
}
- auto Zeroes = Builder.buildConstant(ZeroesLLT, 0)->getOperand(0).getReg();
+ auto Zeroes = Builder.buildConstant(ZeroesLLT, 0);
DotReg.push_back(
Builder
- .buildInstr(DotOpcode, {MRI.getType(Zeroes)},
+ .buildInstr(DotOpcode, {ZeroesLLT},
{Zeroes, Ext1UnmergeReg[i], Ext2UnmergeReg[i]})
.getReg(0));
}
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-scalar.mir b/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-scalar.mir
index eacb7cacbb7e8..c3d7caddd5e87 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-scalar.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-scalar.mir
@@ -18,10 +18,10 @@ body: |
; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV]](<8 x i8>), [[UV1]](<8 x i8>)
; CHECK-NEXT: [[UV3:%[0-9]+]]:_(<8 x i8>), [[UV4:%[0-9]+]]:_(<8 x i8>), [[UV5:%[0-9]+]]:_(<8 x i8>) = G_UNMERGE_VALUES [[LOAD]](<24 x i8>)
; CHECK-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV3]](<8 x i8>), [[UV4]](<8 x i8>)
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0
- ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)
- ; CHECK-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV2]](<8 x i8>), [[BUILD_VECTOR]](<8 x s8>)
- ; CHECK-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV5]](<8 x i8>), [[BUILD_VECTOR]](<8 x s8>)
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(i8) = G_CONSTANT i8 0
+ ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x i8>) = G_BUILD_VECTOR [[C]](i8), [[C]](i8), [[C]](i8), [[C]](i8), [[C]](i8), [[C]](i8), [[C]](i8), [[C]](i8)
+ ; CHECK-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV2]](<8 x i8>), [[BUILD_VECTOR]](<8 x i8>)
+ ; CHECK-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<16 x i8>) = G_CONCAT_VECTORS [[UV5]](<8 x i8>), [[BUILD_VECTOR]](<8 x i8>)
; CHECK-NEXT: [[C1:%[0-9]+]]:_(i32) = G_CONSTANT i32 0
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x i32>) = G_BUILD_VECTOR [[C1]](i32), [[C1]](i32), [[C1]](i32), [[C1]](i32)
; CHECK-NEXT: [[UDOT:%[0-9]+]]:_(<4 x i32>) = G_UDOT [[BUILD_VECTOR1]], [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]
More information about the llvm-commits
mailing list