[llvm] [AArch64][NFC] Refactor SVE tail-folding option interleave test (PR #217560)
Harry Ramsey via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 20 02:34:15 PDT 2026
https://github.com/Harry-Ramsey created https://github.com/llvm/llvm-project/pull/217560
Replace the interleave3 test case with interleave4, since interleave3 is not yet modelled by the cost model.
>From ca22357a167fa58ef518ebf7d3db6fcfa97cfc2a Mon Sep 17 00:00:00 2001
From: Harry Ramsey <harry.ramsey at arm.com>
Date: Thu, 20 Aug 2026 08:39:46 +0000
Subject: [PATCH] [AArch64][NFC] Refactor SVE tail-folding option interleave
test for interleave 4
Replace the interleave3 test case with interleave4, since interleave3 is not
yet modelled by the cost model.
---
.../AArch64/sve-tail-folding-option.ll | 41 ++++++++++---------
1 file changed, 22 insertions(+), 19 deletions(-)
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-option.ll b/llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-option.ll
index 9f5937c440595..7e8ff9d62ad61 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-option.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-option.ll
@@ -283,39 +283,39 @@ for.end:
define void @interleave(ptr noalias %dst, ptr noalias %src, i64 %n) #0 {
; CHECK-NOTF-LABEL: @interleave(
; CHECK-NOTF: vector.body:
-; CHECK-NOTF: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-NOTF: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-NOTF: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-NOTF: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-NOTF: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-NOTF: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
; CHECK-TF-LABEL: @interleave(
; CHECK-TF: vector.body:
-; CHECK-TF: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-TF: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-TF: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-TF: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-TF: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-TF: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
; CHECK-TF-NORED-LABEL: @interleave(
; CHECK-TF-NORED: vector.body:
-; CHECK-TF-NORED: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-TF-NORED: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-TF-NORED: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-TF-NORED: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-TF-NORED: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-TF-NORED: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
; CHECK-TF-NOREC-LABEL: @interleave(
; CHECK-TF-NOREC: vector.body:
-; CHECK-TF-NOREC: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-TF-NOREC: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-TF-NOREC: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-TF-NOREC: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-TF-NOREC: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-TF-NOREC: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
; CHECK-TF-NOREV-LABEL: @interleave(
; CHECK-TF-NOREV: vector.body:
-; CHECK-TF-NOREV: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-TF-NOREV: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-TF-NOREV: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-TF-NOREV: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-TF-NOREV: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-TF-NOREV: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
; CHECK-NEOVERSE-V1-LABEL: @interleave(
; CHECK-NEOVERSE-V1: vector.body:
-; CHECK-NEOVERSE-V1: %[[LOAD:.*]] = load <8 x float>, ptr
-; CHECK-NEOVERSE-V1: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-; CHECK-NEOVERSE-V1: %{{.*}} = shufflevector <8 x float> %[[LOAD]], <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
+; CHECK-NEOVERSE-V1: %[[LOAD:.*]] = load <vscale x 8 x float>, ptr
+; CHECK-NEOVERSE-V1: %{{.*}} = call { <vscale x 4 x float>, <vscale x 4 x float> } @llvm.vector.deinterleave2.nxv8f32(<vscale x 8 x float> %[[LOAD]])
+; CHECK-NEOVERSE-V1: %{{.*}} = call <vscale x 16 x float> @llvm.vector.interleave4.nxv16f32(<vscale x 4 x float> %{{.*}}, <vscale x 4 x float> %{{.*}}, <vscale x 4 x float> splat (float 3.000000e+00), <vscale x 4 x float> splat (float 4.000000e+00))
entry:
br label %for.body
@@ -325,7 +325,7 @@ for.body:
%mul = shl nuw nsw i64 %i.021, 1
%arrayidx = getelementptr inbounds float, ptr %src, i64 %mul
%0 = load float, ptr %arrayidx, align 4
- %mul1 = mul nuw nsw i64 %i.021, 3
+ %mul1 = mul nuw nsw i64 %i.021, 4
%arrayidx2 = getelementptr inbounds float, ptr %dst, i64 %mul1
store float %0, ptr %arrayidx2, align 4
%add = or disjoint i64 %mul, 1
@@ -337,6 +337,9 @@ for.body:
%add9 = add nuw nsw i64 %mul1, 2
%arrayidx10 = getelementptr inbounds float, ptr %dst, i64 %add9
store float 3.000000e+00, ptr %arrayidx10, align 4
+ %add10 = add nuw nsw i64 %mul1, 3
+ %arrayidx11 = getelementptr inbounds float, ptr %dst, i64 %add10
+ store float 4.000000e+00, ptr %arrayidx11, align 4
%inc = add nuw nsw i64 %i.021, 1
%exitcond.not = icmp eq i64 %inc, %n
br i1 %exitcond.not, label %for.end, label %for.body
More information about the llvm-commits
mailing list