[llvm] [AArch64][ISel] Fix interleave3 crash (PR #192046)

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 14 06:52:06 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) {
----------------
david-arm wrote:

Argh, sorry. My apologies - I was looking at the code:

```
Op->getNumOperands() == 3 && (OpVT == MVT::v2f64 || OpVT == MVT::v2i64)
```

and thinking you were only handling 64-bit element types, but I now realise the code beneath that block is handling the other types.

https://github.com/llvm/llvm-project/pull/192046


More information about the llvm-commits mailing list