brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.7 KiB · bae254b Raw
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