193 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s | FileCheck %s3 4target triple = "aarch64-unknown-linux-gnu"5 6; half vectors7 8define <vscale x 4 x half> @insert_into_poison_nxv4f16_nxv2f16_0(<vscale x 2 x half> %a) #0 {9; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_0:10; CHECK: // %bb.0:11; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s12; CHECK-NEXT: ret13 %res = call <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half> poison, <vscale x 2 x half> %a, i64 0)14 ret <vscale x 4 x half> %res15}16 17define <vscale x 4 x half> @insert_into_poison_nxv4f16_nxv2f16_2(<vscale x 2 x half> %a) #0 {18; CHECK-LABEL: insert_into_poison_nxv4f16_nxv2f16_2:19; CHECK: // %bb.0:20; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s21; CHECK-NEXT: ret22 %res = call <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half> poison, <vscale x 2 x half> %a, i64 2)23 ret <vscale x 4 x half> %res24}25 26define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_0(<vscale x 2 x half> %a) #0 {27; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_0:28; CHECK: // %bb.0:29; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h30; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h31; CHECK-NEXT: ret32 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 0)33 ret <vscale x 8 x half> %res34}35 36define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_2(<vscale x 2 x half> %a) #0 {37; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_2:38; CHECK: // %bb.0:39; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h40; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h41; CHECK-NEXT: ret42 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 2)43 ret <vscale x 8 x half> %res44}45 46define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_4(<vscale x 2 x half> %a) #0 {47; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_4:48; CHECK: // %bb.0:49; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h50; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h51; CHECK-NEXT: ret52 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 4)53 ret <vscale x 8 x half> %res54}55 56define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv2f16_6(<vscale x 2 x half> %a) #0 {57; CHECK-LABEL: insert_into_poison_nxv8f16_nxv2f16_6:58; CHECK: // %bb.0:59; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h60; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h61; CHECK-NEXT: ret62 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half> poison, <vscale x 2 x half> %a, i64 6)63 ret <vscale x 8 x half> %res64}65 66define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv4f16_0(<vscale x 4 x half> %a) #0 {67; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_0:68; CHECK: // %bb.0:69; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h70; CHECK-NEXT: ret71 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half> poison, <vscale x 4 x half> %a, i64 0)72 ret <vscale x 8 x half> %res73}74 75define <vscale x 8 x half> @insert_into_poison_nxv8f16_nxv4f16_4(<vscale x 4 x half> %a) #0 {76; CHECK-LABEL: insert_into_poison_nxv8f16_nxv4f16_4:77; CHECK: // %bb.0:78; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h79; CHECK-NEXT: ret80 %res = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half> poison, <vscale x 4 x half> %a, i64 4)81 ret <vscale x 8 x half> %res82}83 84; float vectors85define <vscale x 4 x float> @insert_into_poison_nxv4f32_nxv2f32_0(<vscale x 2 x float> %a) #0 {86; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_0:87; CHECK: // %bb.0:88; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s89; CHECK-NEXT: ret90 %res = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float> poison, <vscale x 2 x float> %a, i64 0)91 ret <vscale x 4 x float> %res92}93 94define <vscale x 4 x float> @insert_into_poison_nxv4f32_nxv2f32_2(<vscale x 2 x float> %a) #0 {95; CHECK-LABEL: insert_into_poison_nxv4f32_nxv2f32_2:96; CHECK: // %bb.0:97; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s98; CHECK-NEXT: ret99 %res = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float> poison, <vscale x 2 x float> %a, i64 2)100 ret <vscale x 4 x float> %res101}102 103; bfloat vectors104 105define <vscale x 4 x bfloat> @insert_into_poison_nxv4bf16_nxv2bf16_0(<vscale x 2 x bfloat> %a) #0 {106; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_0:107; CHECK: // %bb.0:108; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s109; CHECK-NEXT: ret110 %res = call <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 0)111 ret <vscale x 4 x bfloat> %res112}113 114define <vscale x 4 x bfloat> @insert_into_poison_nxv4bf16_nxv2bf16_2(<vscale x 2 x bfloat> %a) #0 {115; CHECK-LABEL: insert_into_poison_nxv4bf16_nxv2bf16_2:116; CHECK: // %bb.0:117; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s118; CHECK-NEXT: ret119 %res = call <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 2)120 ret <vscale x 4 x bfloat> %res121}122 123define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_0(<vscale x 2 x bfloat> %a) #0 {124; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_0:125; CHECK: // %bb.0:126; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h127; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h128; CHECK-NEXT: ret129 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 0)130 ret <vscale x 8 x bfloat> %res131}132 133define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_2(<vscale x 2 x bfloat> %a) #0 {134; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_2:135; CHECK: // %bb.0:136; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h137; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h138; CHECK-NEXT: ret139 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 2)140 ret <vscale x 8 x bfloat> %res141}142 143define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_4(<vscale x 2 x bfloat> %a) #0 {144; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_4:145; CHECK: // %bb.0:146; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h147; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h148; CHECK-NEXT: ret149 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 4)150 ret <vscale x 8 x bfloat> %res151}152 153define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv2bf16_6(<vscale x 2 x bfloat> %a) #0 {154; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv2bf16_6:155; CHECK: // %bb.0:156; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h157; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h158; CHECK-NEXT: ret159 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat> poison, <vscale x 2 x bfloat> %a, i64 6)160 ret <vscale x 8 x bfloat> %res161}162 163define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv4bf16_0(<vscale x 4 x bfloat> %a) #0 {164; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_0:165; CHECK: // %bb.0:166; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h167; CHECK-NEXT: ret168 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat> poison, <vscale x 4 x bfloat> %a, i64 0)169 ret <vscale x 8 x bfloat> %res170}171 172define <vscale x 8 x bfloat> @insert_into_poison_nxv8bf16_nxv4bf16_4(<vscale x 4 x bfloat> %a) #0 {173; CHECK-LABEL: insert_into_poison_nxv8bf16_nxv4bf16_4:174; CHECK: // %bb.0:175; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h176; CHECK-NEXT: ret177 %res = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat> poison, <vscale x 4 x bfloat> %a, i64 4)178 ret <vscale x 8 x bfloat> %res179}180 181attributes #0 = { "target-features"="+sve,+bf16" }182 183declare <vscale x 4 x half> @llvm.vector.insert.nxv4f16.nxv2f16(<vscale x 4 x half>, <vscale x 2 x half>, i64)184declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv2f16(<vscale x 8 x half>, <vscale x 2 x half>, i64)185declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.nxv4f16(<vscale x 8 x half>, <vscale x 4 x half>, i64)186 187declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.nxv2f32(<vscale x 4 x float>, <vscale x 2 x float>, i64)188 189declare <vscale x 4 x bfloat> @llvm.vector.insert.nxv4bf16.nxv2bf16(<vscale x 4 x bfloat>, <vscale x 2 x bfloat>, i64)190declare <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv2bf16(<vscale x 8 x bfloat>, <vscale x 2 x bfloat>, i64)191declare <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.nxv4bf16(<vscale x 8 x bfloat>, <vscale x 4 x bfloat>, i64)192 193