[llvm] [AArch64][ISel] Fix interleave3 crash (PR #192046)
Matthew Devereau via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 14 06:48:56 PDT 2026
================
@@ -453,3 +453,118 @@ define <32 x bfloat> @interleave4_v32bf16(<8 x bfloat> %vec0, <8 x bfloat> %vec1
%retval = call <32 x bfloat> @llvm.vector.interleave4.v32bf16(<8 x bfloat> %vec0, <8 x bfloat> %vec1, <8 x bfloat> %vec2, <8 x bfloat> %vec3)
ret <32 x bfloat> %retval
}
+
+define void @interleave3_v6f64(ptr %p, ptr %p0, <2 x double> %vec0, <2 x double> %vec1, <2 x double> %vec2) {
+; CHECK-LABEL: interleave3_v6f64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: zip1 v3.2d, v0.2d, v1.2d
+; CHECK-NEXT: mov v0.d[0], v2.d[0]
+; CHECK-NEXT: zip2 v1.2d, v1.2d, v2.2d
+; CHECK-NEXT: stp q3, q0, [x0]
+; CHECK-NEXT: str q1, [x0, #32]
+; CHECK-NEXT: stp q3, q0, [x1]
+; CHECK-NEXT: str q1, [x1, #32]
+; CHECK-NEXT: ret
+ %retval = call <6 x double> @llvm.vector.interleave3.v6f64(<2 x double> %vec0, <2 x double> %vec1, <2 x double> %vec2)
+ store <6 x double> %retval, ptr %p
+ store <6 x double> %retval, ptr %p0
+ ret void
+}
+
+define void @interleave3_v12f32(ptr %p, ptr %p0, <4 x float> %vec0, <4 x float> %vec1, <4 x float> %vec2) {
----------------
MDevereau wrote:
They do crash: https://gcc.godbolt.org/z/Gz5v8zEdx, there isn't any lowering for standalone interleave3 intrinsics at all of any type. This is probably just a hole because we typically expect interleave intrinsics to come with a deinterleave3 pair which lowers through InterleavedAccess
https://github.com/llvm/llvm-project/pull/192046
More information about the llvm-commits
mailing list