456 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=arm64-eabi -mcpu=generic -aarch64-neon-syntax=apple -mattr="+fullfp16" | FileCheck %s3 4define void @test0f(ptr nocapture %x, float %a) #0 {5; CHECK-LABEL: test0f:6; CHECK: // %bb.0: // %entry7; CHECK-NEXT: movi.2d v1, #00000000000000008; CHECK-NEXT: // kill: def $s0 killed $s0 def $q09; CHECK-NEXT: mov.s v1[0], v0[0]10; CHECK-NEXT: str q1, [x0]11; CHECK-NEXT: ret12entry:13 %0 = insertelement <4 x float> <float undef, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, float %a, i32 014 store <4 x float> %0, ptr %x, align 1615 ret void16}17 18define void @test1f(ptr nocapture %x, float %a) #0 {19; CHECK-LABEL: test1f:20; CHECK: // %bb.0: // %entry21; CHECK-NEXT: fmov.4s v1, #1.0000000022; CHECK-NEXT: // kill: def $s0 killed $s0 def $q023; CHECK-NEXT: mov.s v1[0], v0[0]24; CHECK-NEXT: str q1, [x0]25; CHECK-NEXT: ret26entry:27 %0 = insertelement <4 x float> <float undef, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, float %a, i32 028 store <4 x float> %0, ptr %x, align 1629 ret void30}31 32define <16 x i8> @test_insert_v16i8_insert_1(i8 %a) {33; CHECK-LABEL: test_insert_v16i8_insert_1:34; CHECK: // %bb.0:35; CHECK-NEXT: movi.2d v0, #000000000000000036; CHECK-NEXT: mov.b v0[14], w037; CHECK-NEXT: ret38 %v.0 = insertelement <16 x i8> zeroinitializer, i8 %a, i32 1439 ret <16 x i8> %v.040}41 42define <16 x i8> @test_insert_v16i8_insert_2(i8 %a) {43; CHECK-LABEL: test_insert_v16i8_insert_2:44; CHECK: // %bb.0:45; CHECK-NEXT: movi.2d v0, #000000000000000046; CHECK-NEXT: mov.b v0[1], w047; CHECK-NEXT: mov.b v0[2], w048; CHECK-NEXT: ret49 %v.0 = insertelement <16 x i8> zeroinitializer, i8 %a, i32 250 %v.1 = insertelement <16 x i8> %v.0, i8 %a, i32 151 ret <16 x i8> %v.152}53 54define <16 x i8> @test_insert_v16i8_insert_2_undef_base(i8 %a) {55; CHECK-LABEL: test_insert_v16i8_insert_2_undef_base:56; CHECK: // %bb.0:57; CHECK-NEXT: dup.16b v0, w058; CHECK-NEXT: mov.b v0[5], wzr59; CHECK-NEXT: mov.b v0[9], wzr60; CHECK-NEXT: ret61 %v.0 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef> , i8 %a, i32 062 %v.1 = insertelement <16 x i8> %v.0, i8 %a, i32 163 %v.2 = insertelement <16 x i8> %v.1, i8 %a, i32 264 %v.3 = insertelement <16 x i8> %v.2, i8 %a, i32 365 %v.4 = insertelement <16 x i8> %v.3, i8 %a, i32 466 %v.6 = insertelement <16 x i8> %v.4, i8 %a, i32 667 %v.7 = insertelement <16 x i8> %v.6, i8 %a, i32 768 %v.8 = insertelement <16 x i8> %v.7, i8 %a, i32 869 %v.10 = insertelement <16 x i8> %v.8, i8 %a, i32 1070 %v.11 = insertelement <16 x i8> %v.10, i8 %a, i32 1171 %v.12 = insertelement <16 x i8> %v.11, i8 %a, i32 1272 %v.13 = insertelement <16 x i8> %v.12, i8 %a, i32 1373 %v.14 = insertelement <16 x i8> %v.13, i8 %a, i32 1474 %v.15 = insertelement <16 x i8> %v.14, i8 %a, i32 1575 ret <16 x i8> %v.1576}77 78; Similar to above, but we leave element 8 as undef. One interesting part with79; this test case is that %a may be poison, so simply inserting %a also at80; index 8 would make the result vector more poisonous.81define <16 x i8> @test_insert_v16i8_insert_2_undef_base_skip8(i32 %a0) {82; CHECK-LABEL: test_insert_v16i8_insert_2_undef_base_skip8:83; CHECK: // %bb.0:84; CHECK-NEXT: lsr w8, w0, #585; CHECK-NEXT: dup.16b v0, w886; CHECK-NEXT: mov.b v0[5], wzr87; CHECK-NEXT: mov.b v0[9], wzr88; CHECK-NEXT: ret89 %a1 = lshr exact i32 %a0, 590 %a = trunc i32 %a1 to i891 %v.0 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef> , i8 %a, i32 092 %v.1 = insertelement <16 x i8> %v.0, i8 %a, i32 193 %v.2 = insertelement <16 x i8> %v.1, i8 %a, i32 294 %v.3 = insertelement <16 x i8> %v.2, i8 %a, i32 395 %v.4 = insertelement <16 x i8> %v.3, i8 %a, i32 496 %v.6 = insertelement <16 x i8> %v.4, i8 %a, i32 697 %v.7 = insertelement <16 x i8> %v.6, i8 %a, i32 798 %v.10 = insertelement <16 x i8> %v.7, i8 %a, i32 1099 %v.11 = insertelement <16 x i8> %v.10, i8 %a, i32 11100 %v.12 = insertelement <16 x i8> %v.11, i8 %a, i32 12101 %v.13 = insertelement <16 x i8> %v.12, i8 %a, i32 13102 %v.14 = insertelement <16 x i8> %v.13, i8 %a, i32 14103 %v.15 = insertelement <16 x i8> %v.14, i8 %a, i32 15104 ret <16 x i8> %v.15105}106 107define <16 x i8> @test_insert_v16i8_insert_2_undef_base_different_values(i8 %a, i8 %b) {108; CHECK-LABEL: test_insert_v16i8_insert_2_undef_base_different_values:109; CHECK: // %bb.0:110; CHECK-NEXT: dup.16b v0, w0111; CHECK-NEXT: mov.b v0[2], w1112; CHECK-NEXT: mov.b v0[5], wzr113; CHECK-NEXT: mov.b v0[7], w1114; CHECK-NEXT: mov.b v0[9], wzr115; CHECK-NEXT: mov.b v0[12], w1116; CHECK-NEXT: mov.b v0[15], w1117; CHECK-NEXT: ret118 %v.0 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef> , i8 %a, i32 0119 %v.1 = insertelement <16 x i8> %v.0, i8 %a, i32 1120 %v.2 = insertelement <16 x i8> %v.1, i8 %b, i32 2121 %v.3 = insertelement <16 x i8> %v.2, i8 %a, i32 3122 %v.4 = insertelement <16 x i8> %v.3, i8 %a, i32 4123 %v.6 = insertelement <16 x i8> %v.4, i8 %a, i32 6124 %v.7 = insertelement <16 x i8> %v.6, i8 %b, i32 7125 %v.8 = insertelement <16 x i8> %v.7, i8 %a, i32 8126 %v.10 = insertelement <16 x i8> %v.8, i8 %a, i32 10127 %v.11 = insertelement <16 x i8> %v.10, i8 %a, i32 11128 %v.12 = insertelement <16 x i8> %v.11, i8 %b, i32 12129 %v.13 = insertelement <16 x i8> %v.12, i8 %a, i32 13130 %v.14 = insertelement <16 x i8> %v.13, i8 %a, i32 14131 %v.15 = insertelement <16 x i8> %v.14, i8 %b, i32 15132 ret <16 x i8> %v.15133}134 135; Similar to above, but we leave element 8 as undef. One interesting part with136; this test case is that %a and %b may be poison, so simply inserting %a or %b137; at index 8 would make the result vector more poisonous.138define <16 x i8> @test_insert_v16i8_insert_2_undef_base_different_values_skip8(i32 %a0, i32 %b0) {139; CHECK-LABEL: test_insert_v16i8_insert_2_undef_base_different_values_skip8:140; CHECK: // %bb.0:141; CHECK-NEXT: lsr w8, w0, #5142; CHECK-NEXT: dup.16b v0, w8143; CHECK-NEXT: lsr w8, w1, #5144; CHECK-NEXT: mov.b v0[2], w8145; CHECK-NEXT: mov.b v0[5], wzr146; CHECK-NEXT: mov.b v0[7], w8147; CHECK-NEXT: mov.b v0[9], wzr148; CHECK-NEXT: mov.b v0[12], w8149; CHECK-NEXT: mov.b v0[15], w8150; CHECK-NEXT: ret151 %a1 = lshr exact i32 %a0, 5152 %a = trunc i32 %a1 to i8153 %b1 = lshr exact i32 %b0, 5154 %b = trunc i32 %b1 to i8155 %v.0 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef> , i8 %a, i32 0156 %v.1 = insertelement <16 x i8> %v.0, i8 %a, i32 1157 %v.2 = insertelement <16 x i8> %v.1, i8 %b, i32 2158 %v.3 = insertelement <16 x i8> %v.2, i8 %a, i32 3159 %v.4 = insertelement <16 x i8> %v.3, i8 %a, i32 4160 %v.6 = insertelement <16 x i8> %v.4, i8 %a, i32 6161 %v.7 = insertelement <16 x i8> %v.6, i8 %b, i32 7162 %v.10 = insertelement <16 x i8> %v.7, i8 %a, i32 10163 %v.11 = insertelement <16 x i8> %v.10, i8 %a, i32 11164 %v.12 = insertelement <16 x i8> %v.11, i8 %b, i32 12165 %v.13 = insertelement <16 x i8> %v.12, i8 %a, i32 13166 %v.14 = insertelement <16 x i8> %v.13, i8 %a, i32 14167 %v.15 = insertelement <16 x i8> %v.14, i8 %b, i32 15168 ret <16 x i8> %v.15169}170 171define <8 x half> @test_insert_v8f16_insert_1(half %a) {172; CHECK-LABEL: test_insert_v8f16_insert_1:173; CHECK: // %bb.0:174; CHECK-NEXT: // kill: def $h0 killed $h0 def $q0175; CHECK-NEXT: movi d1, #0000000000000000176; CHECK-NEXT: dup.8h v0, v0[0]177; CHECK-NEXT: mov.h v0[7], v1[0]178; CHECK-NEXT: ret179 %v.0 = insertelement <8 x half> <half undef, half undef, half undef, half undef, half undef, half undef, half undef, half 0.0>, half %a, i32 0180 %v.1 = insertelement <8 x half> %v.0, half %a, i32 1181 %v.2 = insertelement <8 x half> %v.1, half %a, i32 2182 %v.3 = insertelement <8 x half> %v.2, half %a, i32 3183 %v.4 = insertelement <8 x half> %v.3, half %a, i32 4184 %v.5 = insertelement <8 x half> %v.4, half %a, i32 5185 %v.6 = insertelement <8 x half> %v.5, half %a, i32 6186 ret <8 x half> %v.6187}188 189 190define <8 x half> @test_insert_v8f16_insert_2(half %a) {191; CHECK-LABEL: test_insert_v8f16_insert_2:192; CHECK: // %bb.0:193; CHECK-NEXT: movi.2d v1, #0000000000000000194; CHECK-NEXT: // kill: def $h0 killed $h0 def $q0195; CHECK-NEXT: mov.h v1[1], v0[0]196; CHECK-NEXT: mov.h v1[2], v0[0]197; CHECK-NEXT: mov.16b v0, v1198; CHECK-NEXT: ret199 %v.0 = insertelement <8 x half> zeroinitializer, half %a, i32 2200 %v.1 = insertelement <8 x half> %v.0, half %a, i32 1201 ret <8 x half> %v.1202}203 204define <8 x i16> @test_insert_v8i16_insert_2(i16 %a) {205; CHECK-LABEL: test_insert_v8i16_insert_2:206; CHECK: // %bb.0:207; CHECK-NEXT: dup.8h v0, w0208; CHECK-NEXT: mov.h v0[3], wzr209; CHECK-NEXT: mov.h v0[7], wzr210; CHECK-NEXT: ret211 %v.0 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 0, i16 undef, i16 undef, i16 undef, i16 0>, i16 %a, i32 0212 %v.1 = insertelement <8 x i16> %v.0, i16 %a, i32 1213 %v.2 = insertelement <8 x i16> %v.1, i16 %a, i32 2214 %v.3 = insertelement <8 x i16> %v.2, i16 %a, i32 4215 %v.4 = insertelement <8 x i16> %v.3, i16 %a, i32 5216 %v.5 = insertelement <8 x i16> %v.4, i16 %a, i32 6217 ret <8 x i16> %v.5218}219 220define <8 x i16> @test_insert_v8i16_insert_3(i16 %a) {221; CHECK-LABEL: test_insert_v8i16_insert_3:222; CHECK: // %bb.0:223; CHECK-NEXT: dup.8h v0, w0224; CHECK-NEXT: mov.h v0[1], wzr225; CHECK-NEXT: mov.h v0[3], wzr226; CHECK-NEXT: mov.h v0[7], wzr227; CHECK-NEXT: ret228 %v.0 = insertelement <8 x i16> <i16 undef, i16 0, i16 undef, i16 0, i16 undef, i16 undef, i16 undef, i16 0>, i16 %a, i32 0229 %v.2 = insertelement <8 x i16> %v.0, i16 %a, i32 2230 %v.3 = insertelement <8 x i16> %v.2, i16 %a, i32 4231 %v.4 = insertelement <8 x i16> %v.3, i16 %a, i32 5232 %v.5 = insertelement <8 x i16> %v.4, i16 %a, i32 6233 ret <8 x i16> %v.5234}235 236define <8 x i16> @test_insert_v8i16_insert_4(i16 %a) {237; CHECK-LABEL: test_insert_v8i16_insert_4:238; CHECK: // %bb.0:239; CHECK-NEXT: movi.2d v0, #0000000000000000240; CHECK-NEXT: mov.h v0[0], w0241; CHECK-NEXT: mov.h v0[2], w0242; CHECK-NEXT: mov.h v0[4], w0243; CHECK-NEXT: mov.h v0[5], w0244; CHECK-NEXT: ret245 %v.0 = insertelement <8 x i16> <i16 undef, i16 0, i16 undef, i16 0, i16 undef, i16 undef, i16 0, i16 0>, i16 %a, i32 0246 %v.2 = insertelement <8 x i16> %v.0, i16 %a, i32 2247 %v.3 = insertelement <8 x i16> %v.2, i16 %a, i32 4248 %v.4 = insertelement <8 x i16> %v.3, i16 %a, i32 5249 ret <8 x i16> %v.4250}251 252define <8 x i16> @test_insert_v8i16_insert_5(i16 %a) {253; CHECK-LABEL: test_insert_v8i16_insert_5:254; CHECK: // %bb.0:255; CHECK-NEXT: movi.2d v0, #0000000000000000256; CHECK-NEXT: mov.h v0[0], w0257; CHECK-NEXT: mov.h v0[4], w0258; CHECK-NEXT: mov.h v0[5], w0259; CHECK-NEXT: ret260 %v.0 = insertelement <8 x i16> <i16 undef, i16 0, i16 0, i16 0, i16 undef, i16 undef, i16 0, i16 0>, i16 %a, i32 0261 %v.3 = insertelement <8 x i16> %v.0, i16 %a, i32 4262 %v.4 = insertelement <8 x i16> %v.3, i16 %a, i32 5263 ret <8 x i16> %v.4264}265 266define <2 x float> @test_insert_v2f32_undef_zero_vector(float %a) {267; CHECK-LABEL: test_insert_v2f32_undef_zero_vector:268; CHECK: // %bb.0:269; CHECK-NEXT: movi d1, #0000000000000000270; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0271; CHECK-NEXT: mov.s v1[1], v0[0]272; CHECK-NEXT: fmov d0, d1273; CHECK-NEXT: ret274 %v.0 = insertelement <2 x float> <float 0.000000e+00, float undef>, float %a, i32 1275 ret <2 x float> %v.0276}277 278define <4 x float> @test_insert_3_f32_undef_zero_vector(float %a) {279; CHECK-LABEL: test_insert_3_f32_undef_zero_vector:280; CHECK: // %bb.0:281; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0282; CHECK-NEXT: movi d1, #0000000000000000283; CHECK-NEXT: dup.4s v0, v0[0]284; CHECK-NEXT: mov.s v0[3], v1[0]285; CHECK-NEXT: ret286 %v.0 = insertelement <4 x float> <float undef, float undef, float undef, float 0.000000e+00>, float %a, i32 0287 %v.1 = insertelement <4 x float> %v.0, float %a, i32 1288 %v.2 = insertelement <4 x float> %v.1, float %a, i32 2289 ret <4 x float> %v.2290}291 292define <4 x float> @test_insert_3_f32_undef(float %a) {293; CHECK-LABEL: test_insert_3_f32_undef:294; CHECK: // %bb.0:295; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0296; CHECK-NEXT: dup.4s v0, v0[0]297; CHECK-NEXT: ret298 %v.0 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %a, i32 0299 %v.1 = insertelement <4 x float> %v.0, float %a, i32 1300 %v.2 = insertelement <4 x float> %v.1, float %a, i32 2301 ret <4 x float> %v.2302}303 304define <4 x float> @test_insert_2_f32_undef_zero(float %a) {305; CHECK-LABEL: test_insert_2_f32_undef_zero:306; CHECK: // %bb.0:307; CHECK-NEXT: movi.2d v1, #0000000000000000308; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0309; CHECK-NEXT: mov.s v1[0], v0[0]310; CHECK-NEXT: mov.s v1[2], v0[0]311; CHECK-NEXT: mov.16b v0, v1312; CHECK-NEXT: ret313 %v.0 = insertelement <4 x float> <float undef, float 0.000000e+00, float undef, float 0.000000e+00>, float %a, i32 0314 %v.1 = insertelement <4 x float> %v.0, float %a, i32 2315 ret <4 x float> %v.1316}317 318define <2 x double> @test_insert_v2f64_undef_insert1(double %a) {319; CHECK-LABEL: test_insert_v2f64_undef_insert1:320; CHECK: // %bb.0:321; CHECK-NEXT: movi.2d v1, #0000000000000000322; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0323; CHECK-NEXT: mov.d v1[0], v0[0]324; CHECK-NEXT: mov.16b v0, v1325; CHECK-NEXT: ret326 %v.0 = insertelement <2 x double > <double undef, double 0.000000e+00>, double %a, i32 0327 ret <2 x double> %v.0328}329 330define <4 x float> @test_insert_2_f32_var(float %a, <4 x float> %b) {331; CHECK-LABEL: test_insert_2_f32_var:332; CHECK: // %bb.0:333; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0334; CHECK-NEXT: mov.s v1[0], v0[0]335; CHECK-NEXT: mov.s v1[2], v0[0]336; CHECK-NEXT: mov.16b v0, v1337; CHECK-NEXT: ret338 %v.0 = insertelement <4 x float> %b, float %a, i32 0339 %v.1 = insertelement <4 x float> %v.0, float %a, i32 2340 ret <4 x float> %v.1341}342 343define <8 x i16> @test_insert_v8i16_i16_zero(<8 x i16> %a) {344; CHECK-LABEL: test_insert_v8i16_i16_zero:345; CHECK: // %bb.0:346; CHECK-NEXT: mov.h v0[5], wzr347; CHECK-NEXT: ret348 %v.0 = insertelement <8 x i16> %a, i16 0, i32 5349 ret <8 x i16> %v.0350}351 352define <4 x half> @test_insert_v4f16_f16_zero(<4 x half> %a) {353; CHECK-LABEL: test_insert_v4f16_f16_zero:354; CHECK: // %bb.0:355; CHECK-NEXT: movi d1, #0000000000000000356; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0357; CHECK-NEXT: mov.h v0[0], v1[0]358; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0359; CHECK-NEXT: ret360 %v.0 = insertelement <4 x half> %a, half 0.000000e+00, i32 0361 ret <4 x half> %v.0362}363 364define <8 x half> @test_insert_v8f16_f16_zero(<8 x half> %a) {365; CHECK-LABEL: test_insert_v8f16_f16_zero:366; CHECK: // %bb.0:367; CHECK-NEXT: movi d1, #0000000000000000368; CHECK-NEXT: mov.h v0[6], v1[0]369; CHECK-NEXT: ret370 %v.0 = insertelement <8 x half> %a, half 0.000000e+00, i32 6371 ret <8 x half> %v.0372}373 374define <2 x float> @test_insert_v2f32_f32_zero(<2 x float> %a) {375; CHECK-LABEL: test_insert_v2f32_f32_zero:376; CHECK: // %bb.0:377; CHECK-NEXT: movi d1, #0000000000000000378; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0379; CHECK-NEXT: mov.s v0[0], v1[0]380; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0381; CHECK-NEXT: ret382 %v.0 = insertelement <2 x float> %a, float 0.000000e+00, i32 0383 ret <2 x float> %v.0384}385 386define <4 x float> @test_insert_v4f32_f32_zero(<4 x float> %a) {387; CHECK-LABEL: test_insert_v4f32_f32_zero:388; CHECK: // %bb.0:389; CHECK-NEXT: movi d1, #0000000000000000390; CHECK-NEXT: mov.s v0[3], v1[0]391; CHECK-NEXT: ret392 %v.0 = insertelement <4 x float> %a, float 0.000000e+00, i32 3393 ret <4 x float> %v.0394}395 396define <2 x double> @test_insert_v2f64_f64_zero(<2 x double> %a) {397; CHECK-LABEL: test_insert_v2f64_f64_zero:398; CHECK: // %bb.0:399; CHECK-NEXT: movi d1, #0000000000000000400; CHECK-NEXT: mov.d v0[1], v1[0]401; CHECK-NEXT: ret402 %v.0 = insertelement <2 x double> %a, double 0.000000e+00, i32 1403 ret <2 x double> %v.0404}405 406define <4 x half> @test_insert_v4f16_f16_zero_wzr(<4 x half> %a) #1 {407; CHECK-LABEL: test_insert_v4f16_f16_zero_wzr:408; CHECK: // %bb.0:409; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0410; CHECK-NEXT: mov.h v0[0], wzr411; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0412; CHECK-NEXT: ret413 %v.0 = insertelement <4 x half> %a, half 0.000000e+00, i32 0414 ret <4 x half> %v.0415}416 417define <8 x half> @test_insert_v8f16_f16_zero_wzr(<8 x half> %a) #1 {418; CHECK-LABEL: test_insert_v8f16_f16_zero_wzr:419; CHECK: // %bb.0:420; CHECK-NEXT: mov.h v0[6], wzr421; CHECK-NEXT: ret422 %v.0 = insertelement <8 x half> %a, half 0.000000e+00, i32 6423 ret <8 x half> %v.0424}425 426define <2 x float> @test_insert_v2f32_f32_zero_wzr(<2 x float> %a) #1 {427; CHECK-LABEL: test_insert_v2f32_f32_zero_wzr:428; CHECK: // %bb.0:429; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0430; CHECK-NEXT: mov.s v0[0], wzr431; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0432; CHECK-NEXT: ret433 %v.0 = insertelement <2 x float> %a, float 0.000000e+00, i32 0434 ret <2 x float> %v.0435}436 437define <4 x float> @test_insert_v4f32_f32_zero_wzr(<4 x float> %a) #1 {438; CHECK-LABEL: test_insert_v4f32_f32_zero_wzr:439; CHECK: // %bb.0:440; CHECK-NEXT: mov.s v0[3], wzr441; CHECK-NEXT: ret442 %v.0 = insertelement <4 x float> %a, float 0.000000e+00, i32 3443 ret <4 x float> %v.0444}445 446define <2 x double> @test_insert_v2f64_f64_zero_xzr(<2 x double> %a) #1 {447; CHECK-LABEL: test_insert_v2f64_f64_zero_xzr:448; CHECK: // %bb.0:449; CHECK-NEXT: mov.d v0[1], xzr450; CHECK-NEXT: ret451 %v.0 = insertelement <2 x double> %a, double 0.000000e+00, i32 1452 ret <2 x double> %v.0453}454 455attributes #1 = {"tune-cpu"="cortex-a55"}456