; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" ; half vectors define @insert_into_poison_nxv4f16_nxv2f16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4f16.nxv2f16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv4f16_nxv2f16_2( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_2: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4f16.nxv2f16( poison, %a, i64 2) ret %res } define @insert_into_poison_nxv8f16_nxv2f16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv2f16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv8f16_nxv2f16_2( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_2: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv2f16( poison, %a, i64 2) ret %res } define @insert_into_poison_nxv8f16_nxv2f16_4( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_4: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv2f16( poison, %a, i64 4) ret %res } define @insert_into_poison_nxv8f16_nxv2f16_6( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_6: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv2f16( poison, %a, i64 6) ret %res } define @insert_into_poison_nxv8f16_nxv4f16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv4f16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv8f16_nxv4f16_4( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_4: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8f16.nxv4f16( poison, %a, i64 4) ret %res } ; float vectors define @insert_into_poison_nxv4f32_nxv2f32_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4f32.nxv2f32( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv4f32_nxv2f32_2( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_2: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4f32.nxv2f32( poison, %a, i64 2) ret %res } ; bfloat vectors define @insert_into_poison_nxv4bf16_nxv2bf16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4bf16.nxv2bf16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv4bf16_nxv2bf16_2( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_2: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv4bf16.nxv2bf16( poison, %a, i64 2) ret %res } define @insert_into_poison_nxv8bf16_nxv2bf16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv2bf16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv8bf16_nxv2bf16_2( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_2: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv2bf16( poison, %a, i64 2) ret %res } define @insert_into_poison_nxv8bf16_nxv2bf16_4( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_4: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv2bf16( poison, %a, i64 4) ret %res } define @insert_into_poison_nxv8bf16_nxv2bf16_6( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_6: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv2bf16( poison, %a, i64 6) ret %res } define @insert_into_poison_nxv8bf16_nxv4bf16_0( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_0: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv4bf16( poison, %a, i64 0) ret %res } define @insert_into_poison_nxv8bf16_nxv4bf16_4( %a) #0 { ; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_4: ; CHECK: // %bb.0: ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: ret %res = call @llvm.vector.insert.nxv8bf16.nxv4bf16( poison, %a, i64 4) ret %res } attributes #0 = { "target-features"="+sve,+bf16" } declare @llvm.vector.insert.nxv4f16.nxv2f16(, , i64) declare @llvm.vector.insert.nxv8f16.nxv2f16(, , i64) declare @llvm.vector.insert.nxv8f16.nxv4f16(, , i64) declare @llvm.vector.insert.nxv4f32.nxv2f32(, , i64) declare @llvm.vector.insert.nxv4bf16.nxv2bf16(, , i64) declare @llvm.vector.insert.nxv8bf16.nxv2bf16(, , i64) declare @llvm.vector.insert.nxv8bf16.nxv4bf16(, , i64)