[llvm] [AArch64][GlobalISel] Use integer types for scalable vector insert / extract index. (PR #218150)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 22 10:13:45 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-globalisel
@llvm/pr-subscribers-backend-aarch64
Author: David Green (davemgreen)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/218150.diff
2 Files Affected:
- (modified) llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp (+2-2)
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-subvector.ll (+6-6)
``````````diff
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 8777c8f51dd7b..baac98561f25b 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -4154,7 +4154,7 @@ bool IRTranslatorImpl::translateInsertVector(const User &U,
if (isa<ScalableVectorType>(U.getOperand(0)->getType())) {
// We are inserting an illegal fixed vector into a scalable
// vector, use a scalar element insert.
- LLT VecIdxTy = LLT::scalar(PreferredVecIdxWidth);
+ LLT VecIdxTy = LLT::integer(PreferredVecIdxWidth);
Register Idx = getOrCreateVReg(*CI);
auto ScaledIndex = MIRBuilder.buildMul(
VecIdxTy, MIRBuilder.buildVScale(VecIdxTy, 1), Idx);
@@ -4233,7 +4233,7 @@ bool IRTranslatorImpl::translateExtractVector(const User &U,
if (isa<ScalableVectorType>(U.getOperand(0)->getType())) {
// We are extracting an illegal fixed vector from a scalable
// vector, use a scalar element extract.
- LLT VecIdxTy = LLT::scalar(PreferredVecIdxWidth);
+ LLT VecIdxTy = LLT::integer(PreferredVecIdxWidth);
Register Idx = getOrCreateVReg(*CI);
auto ScaledIndex = MIRBuilder.buildMul(
VecIdxTy, MIRBuilder.buildVScale(VecIdxTy, 1), Idx);
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-subvector.ll b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-subvector.ll
index 546aa0f874e64..1144466e677ec 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-subvector.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-subvector.ll
@@ -189,9 +189,9 @@ define i32 @extract_v4i32_vector_extract_const_illegal_scalable(<vscale x 4 x i3
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x0
; CHECK-NEXT: [[C:%[0-9]+]]:_(i64) = G_CONSTANT i64 0
; CHECK-NEXT: [[C1:%[0-9]+]]:_(i32) = G_CONSTANT i32 1
- ; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s64) = G_VSCALE i64 1
- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[VSCALE]], [[C]]
- ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(i32) = G_EXTRACT_VECTOR_ELT [[COPY]](<vscale x 4 x i32>), [[MUL]](s64)
+ ; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(i64) = G_VSCALE i64 1
+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(i64) = G_MUL [[VSCALE]], [[C]]
+ ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(i32) = G_EXTRACT_VECTOR_ELT [[COPY]](<vscale x 4 x i32>), [[MUL]](i64)
; CHECK-NEXT: G_STORE [[EVEC]](i32), [[COPY1]](p0) :: (store (i32) into %ir.p, align 16)
; CHECK-NEXT: $w0 = COPY [[C1]](i32)
; CHECK-NEXT: RET_ReallyLR implicit $w0
@@ -213,9 +213,9 @@ define i32 @extract_v4i32_vector_insert_const_illegal_scalable(<vscale x 4 x i32
; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(p0) = COPY $x1
; CHECK-NEXT: [[C:%[0-9]+]]:_(i64) = G_CONSTANT i64 0
; CHECK-NEXT: [[C1:%[0-9]+]]:_(i32) = G_CONSTANT i32 1
- ; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s64) = G_VSCALE i64 1
- ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[VSCALE]], [[C]]
- ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x i32>) = G_INSERT_VECTOR_ELT [[COPY]], [[UV]](i32), [[MUL]](s64)
+ ; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(i64) = G_VSCALE i64 1
+ ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(i64) = G_MUL [[VSCALE]], [[C]]
+ ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<vscale x 4 x i32>) = G_INSERT_VECTOR_ELT [[COPY]], [[UV]](i32), [[MUL]](i64)
; CHECK-NEXT: G_STORE [[IVEC]](<vscale x 4 x i32>), [[COPY3]](p0) :: (store (<vscale x 4 x i32>) into %ir.p)
; CHECK-NEXT: $w0 = COPY [[C1]](i32)
; CHECK-NEXT: RET_ReallyLR implicit $w0
``````````
</details>
https://github.com/llvm/llvm-project/pull/218150
More information about the llvm-commits
mailing list