brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.3 KiB · 888aa9d Raw
619 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple aarch64-none-linux-gnu -mattr=+sve | FileCheck %s3 4define <vscale x 16 x i8> @dup_extract_nxv16i8_nxv16i8(<vscale x 16 x i8> %data) {5; CHECK-LABEL: dup_extract_nxv16i8_nxv16i8:6; CHECK:       // %bb.0:7; CHECK-NEXT:    mov z0.b, z0.b[1]8; CHECK-NEXT:    ret9  %1 = extractelement <vscale x 16 x i8> %data, i8 110  %.splatinsert = insertelement <vscale x 16 x i8> poison, i8 %1, i32 011  %.splat = shufflevector <vscale x 16 x i8> %.splatinsert, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer12  ret <vscale x 16 x i8> %.splat13}14 15define <vscale x 16 x i8> @dup_extract_nxv16i8_v16i8(<16 x i8> %data) {16; CHECK-LABEL: dup_extract_nxv16i8_v16i8:17; CHECK:       // %bb.0:18; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z019; CHECK-NEXT:    mov z0.b, z0.b[1]20; CHECK-NEXT:    ret21  %1 = extractelement <16 x i8> %data, i8 122  %.splatinsert = insertelement <vscale x 16 x i8> poison, i8 %1, i32 023  %.splat = shufflevector <vscale x 16 x i8> %.splatinsert, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer24  ret <vscale x 16 x i8> %.splat25}26 27define <vscale x 16 x i8> @dup_extract_nxv16i8_v8i8(<8 x i8> %data) {28; CHECK-LABEL: dup_extract_nxv16i8_v8i8:29; CHECK:       // %bb.0:30; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z031; CHECK-NEXT:    mov z0.b, z0.b[1]32; CHECK-NEXT:    ret33  %1 = extractelement <8 x i8> %data, i8 134  %.splatinsert = insertelement <vscale x 16 x i8> poison, i8 %1, i32 035  %.splat = shufflevector <vscale x 16 x i8> %.splatinsert, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer36  ret <vscale x 16 x i8> %.splat37}38 39define <vscale x 8 x i16> @dup_extract_nxv8i16_nxv8i16(<vscale x 8 x i16> %data) {40; CHECK-LABEL: dup_extract_nxv8i16_nxv8i16:41; CHECK:       // %bb.0:42; CHECK-NEXT:    mov z0.h, z0.h[1]43; CHECK-NEXT:    ret44  %1 = extractelement <vscale x 8 x i16> %data, i16 145  %.splatinsert = insertelement <vscale x 8 x i16> poison, i16 %1, i32 046  %.splat = shufflevector <vscale x 8 x i16> %.splatinsert, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer47  ret <vscale x 8 x i16> %.splat48}49 50define <vscale x 8 x i16> @dup_extract_nxv8i16_v8i16(<8 x i16> %data) {51; CHECK-LABEL: dup_extract_nxv8i16_v8i16:52; CHECK:       // %bb.0:53; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z054; CHECK-NEXT:    mov z0.h, z0.h[1]55; CHECK-NEXT:    ret56  %1 = extractelement <8 x i16> %data, i16 157  %.splatinsert = insertelement <vscale x 8 x i16> poison, i16 %1, i32 058  %.splat = shufflevector <vscale x 8 x i16> %.splatinsert, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer59  ret <vscale x 8 x i16> %.splat60}61 62define <vscale x 8 x i16> @dup_extract_nxv8i16_v4i16(<4 x i16> %data) {63; CHECK-LABEL: dup_extract_nxv8i16_v4i16:64; CHECK:       // %bb.0:65; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z066; CHECK-NEXT:    mov z0.h, z0.h[1]67; CHECK-NEXT:    ret68  %1 = extractelement <4 x i16> %data, i16 169  %.splatinsert = insertelement <vscale x 8 x i16> poison, i16 %1, i32 070  %.splat = shufflevector <vscale x 8 x i16> %.splatinsert, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer71  ret <vscale x 8 x i16> %.splat72}73 74define <vscale x 4 x i32> @dup_extract_nxv4i32_nxv4i32(<vscale x 4 x i32> %data) {75; CHECK-LABEL: dup_extract_nxv4i32_nxv4i32:76; CHECK:       // %bb.0:77; CHECK-NEXT:    mov z0.s, z0.s[1]78; CHECK-NEXT:    ret79  %1 = extractelement <vscale x 4 x i32> %data, i32 180  %.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %1, i32 081  %.splat = shufflevector <vscale x 4 x i32> %.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer82  ret <vscale x 4 x i32> %.splat83}84 85define <vscale x 4 x i32> @dup_extract_nxv4i32_v4i32(<4 x i32> %data) {86; CHECK-LABEL: dup_extract_nxv4i32_v4i32:87; CHECK:       // %bb.0:88; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z089; CHECK-NEXT:    mov z0.s, z0.s[1]90; CHECK-NEXT:    ret91  %1 = extractelement <4 x i32> %data, i32 192  %.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %1, i32 093  %.splat = shufflevector <vscale x 4 x i32> %.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer94  ret <vscale x 4 x i32> %.splat95}96 97define <vscale x 4 x i32> @dup_extract_nxv4i32_v2i32(<2 x i32> %data) {98; CHECK-LABEL: dup_extract_nxv4i32_v2i32:99; CHECK:       // %bb.0:100; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0101; CHECK-NEXT:    mov z0.s, z0.s[1]102; CHECK-NEXT:    ret103  %1 = extractelement <2 x i32> %data, i32 1104  %.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %1, i32 0105  %.splat = shufflevector <vscale x 4 x i32> %.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer106  ret <vscale x 4 x i32> %.splat107}108 109define <vscale x 2 x i64> @dup_extract_nxv2i64_nxv2i64(<vscale x 2 x i64> %data) {110; CHECK-LABEL: dup_extract_nxv2i64_nxv2i64:111; CHECK:       // %bb.0:112; CHECK-NEXT:    mov z0.d, z0.d[1]113; CHECK-NEXT:    ret114  %1 = extractelement <vscale x 2 x i64> %data, i64 1115  %.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %1, i32 0116  %.splat = shufflevector <vscale x 2 x i64> %.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer117  ret <vscale x 2 x i64> %.splat118}119 120define <vscale x 2 x i64> @dup_extract_nxv2i64_v2i64(<2 x i64> %data) {121; CHECK-LABEL: dup_extract_nxv2i64_v2i64:122; CHECK:       // %bb.0:123; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0124; CHECK-NEXT:    mov z0.d, z0.d[1]125; CHECK-NEXT:    ret126  %1 = extractelement <2 x i64> %data, i64 1127  %.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %1, i32 0128  %.splat = shufflevector <vscale x 2 x i64> %.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer129  ret <vscale x 2 x i64> %.splat130}131 132define <vscale x 2 x i64> @dup_extract_nxv2i64_v1i64(<1 x i64> %data) {133; CHECK-LABEL: dup_extract_nxv2i64_v1i64:134; CHECK:       // %bb.0:135; CHECK-NEXT:    mov z0.d, x8136; CHECK-NEXT:    ret137  %1 = extractelement <1 x i64> %data, i64 1138  %.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %1, i32 0139  %.splat = shufflevector <vscale x 2 x i64> %.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer140  ret <vscale x 2 x i64> %.splat141}142 143define <vscale x 8 x half> @dup_extract_nxv8f16_nxv8f16(<vscale x 8 x half> %data) {144; CHECK-LABEL: dup_extract_nxv8f16_nxv8f16:145; CHECK:       // %bb.0:146; CHECK-NEXT:    mov z0.h, z0.h[1]147; CHECK-NEXT:    ret148  %1 = extractelement <vscale x 8 x half> %data, i16 1149  %.splatinsert = insertelement <vscale x 8 x half> poison, half %1, i32 0150  %.splat = shufflevector <vscale x 8 x half> %.splatinsert, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer151  ret <vscale x 8 x half> %.splat152}153 154define <vscale x 8 x half> @dup_extract_nxv8f16_nxv4f16(<vscale x 4 x half> %data) {155; CHECK-LABEL: dup_extract_nxv8f16_nxv4f16:156; CHECK:       // %bb.0:157; CHECK-NEXT:    mov z0.s, z0.s[1]158; CHECK-NEXT:    mov z0.h, h0159; CHECK-NEXT:    ret160  %1 = extractelement <vscale x 4 x half> %data, i16 1161  %.splatinsert = insertelement <vscale x 8 x half> poison, half %1, i32 0162  %.splat = shufflevector <vscale x 8 x half> %.splatinsert, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer163  ret <vscale x 8 x half> %.splat164}165 166define <vscale x 8 x half> @dup_extract_nxv8f16_nxv2f16(<vscale x 2 x half> %data) {167; CHECK-LABEL: dup_extract_nxv8f16_nxv2f16:168; CHECK:       // %bb.0:169; CHECK-NEXT:    mov z0.d, z0.d[1]170; CHECK-NEXT:    mov z0.h, h0171; CHECK-NEXT:    ret172  %1 = extractelement <vscale x 2 x half> %data, i16 1173  %.splatinsert = insertelement <vscale x 8 x half> poison, half %1, i32 0174  %.splat = shufflevector <vscale x 8 x half> %.splatinsert, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer175  ret <vscale x 8 x half> %.splat176}177 178define <vscale x 8 x half> @dup_extract_nxv8f16_v8f16(<8 x half> %data) {179; CHECK-LABEL: dup_extract_nxv8f16_v8f16:180; CHECK:       // %bb.0:181; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0182; CHECK-NEXT:    mov z0.h, z0.h[1]183; CHECK-NEXT:    ret184  %1 = extractelement <8 x half> %data, i16 1185  %.splatinsert = insertelement <vscale x 8 x half> poison, half %1, i32 0186  %.splat = shufflevector <vscale x 8 x half> %.splatinsert, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer187  ret <vscale x 8 x half> %.splat188}189 190define <vscale x 8 x half> @dup_extract_nxv8f16_v4f16(<4 x half> %data) {191; CHECK-LABEL: dup_extract_nxv8f16_v4f16:192; CHECK:       // %bb.0:193; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0194; CHECK-NEXT:    mov z0.h, z0.h[1]195; CHECK-NEXT:    ret196  %1 = extractelement <4 x half> %data, i16 1197  %.splatinsert = insertelement <vscale x 8 x half> poison, half %1, i32 0198  %.splat = shufflevector <vscale x 8 x half> %.splatinsert, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer199  ret <vscale x 8 x half> %.splat200}201 202define <vscale x 4 x half> @dup_extract_nxv4f16_nxv8f16(<vscale x 8 x half> %data) {203; CHECK-LABEL: dup_extract_nxv4f16_nxv8f16:204; CHECK:       // %bb.0:205; CHECK-NEXT:    mov z0.h, z0.h[1]206; CHECK-NEXT:    ret207  %1 = extractelement <vscale x 8 x half> %data, i16 1208  %.splatinsert = insertelement <vscale x 4 x half> poison, half %1, i32 0209  %.splat = shufflevector <vscale x 4 x half> %.splatinsert, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer210  ret <vscale x 4 x half> %.splat211}212 213define <vscale x 4 x half> @dup_extract_nxv4f16_nxv4f16(<vscale x 4 x half> %data) {214; CHECK-LABEL: dup_extract_nxv4f16_nxv4f16:215; CHECK:       // %bb.0:216; CHECK-NEXT:    mov z0.s, z0.s[1]217; CHECK-NEXT:    ret218  %1 = extractelement <vscale x 4 x half> %data, i16 1219  %.splatinsert = insertelement <vscale x 4 x half> poison, half %1, i32 0220  %.splat = shufflevector <vscale x 4 x half> %.splatinsert, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer221  ret <vscale x 4 x half> %.splat222}223 224define <vscale x 4 x half> @dup_extract_nxv4f16_nxv2f16(<vscale x 2 x half> %data) {225; CHECK-LABEL: dup_extract_nxv4f16_nxv2f16:226; CHECK:       // %bb.0:227; CHECK-NEXT:    mov z0.d, z0.d[1]228; CHECK-NEXT:    mov z0.h, h0229; CHECK-NEXT:    ret230  %1 = extractelement <vscale x 2 x half> %data, i16 1231  %.splatinsert = insertelement <vscale x 4 x half> poison, half %1, i32 0232  %.splat = shufflevector <vscale x 4 x half> %.splatinsert, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer233  ret <vscale x 4 x half> %.splat234}235 236define <vscale x 4 x half> @dup_extract_nxv4f16_v8f16(<8 x half> %data) {237; CHECK-LABEL: dup_extract_nxv4f16_v8f16:238; CHECK:       // %bb.0:239; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0240; CHECK-NEXT:    mov z0.h, z0.h[1]241; CHECK-NEXT:    ret242  %1 = extractelement <8 x half> %data, i16 1243  %.splatinsert = insertelement <vscale x 4 x half> poison, half %1, i32 0244  %.splat = shufflevector <vscale x 4 x half> %.splatinsert, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer245  ret <vscale x 4 x half> %.splat246}247 248define <vscale x 4 x half> @dup_extract_nxv4f16_v4f16(<4 x half> %data) {249; CHECK-LABEL: dup_extract_nxv4f16_v4f16:250; CHECK:       // %bb.0:251; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0252; CHECK-NEXT:    mov z0.h, z0.h[1]253; CHECK-NEXT:    ret254  %1 = extractelement <4 x half> %data, i16 1255  %.splatinsert = insertelement <vscale x 4 x half> poison, half %1, i32 0256  %.splat = shufflevector <vscale x 4 x half> %.splatinsert, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer257  ret <vscale x 4 x half> %.splat258}259 260define <vscale x 2 x half> @dup_extract_nxv2f16_nxv8f16(<vscale x 8 x half> %data) {261; CHECK-LABEL: dup_extract_nxv2f16_nxv8f16:262; CHECK:       // %bb.0:263; CHECK-NEXT:    mov z0.h, z0.h[1]264; CHECK-NEXT:    ret265  %1 = extractelement <vscale x 8 x half> %data, i16 1266  %.splatinsert = insertelement <vscale x 2 x half> poison, half %1, i32 0267  %.splat = shufflevector <vscale x 2 x half> %.splatinsert, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer268  ret <vscale x 2 x half> %.splat269}270 271define <vscale x 2 x half> @dup_extract_nxv2f16_nxv4f16(<vscale x 4 x half> %data) {272; CHECK-LABEL: dup_extract_nxv2f16_nxv4f16:273; CHECK:       // %bb.0:274; CHECK-NEXT:    mov z0.s, z0.s[1]275; CHECK-NEXT:    ret276  %1 = extractelement <vscale x 4 x half> %data, i16 1277  %.splatinsert = insertelement <vscale x 2 x half> poison, half %1, i32 0278  %.splat = shufflevector <vscale x 2 x half> %.splatinsert, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer279  ret <vscale x 2 x half> %.splat280}281 282define <vscale x 2 x half> @dup_extract_nxv2f16_nxv2f16(<vscale x 2 x half> %data) {283; CHECK-LABEL: dup_extract_nxv2f16_nxv2f16:284; CHECK:       // %bb.0:285; CHECK-NEXT:    mov z0.d, z0.d[1]286; CHECK-NEXT:    ret287  %1 = extractelement <vscale x 2 x half> %data, i16 1288  %.splatinsert = insertelement <vscale x 2 x half> poison, half %1, i32 0289  %.splat = shufflevector <vscale x 2 x half> %.splatinsert, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer290  ret <vscale x 2 x half> %.splat291}292 293define <vscale x 2 x half> @dup_extract_nxv2f16_v8f16(<8 x half> %data) {294; CHECK-LABEL: dup_extract_nxv2f16_v8f16:295; CHECK:       // %bb.0:296; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0297; CHECK-NEXT:    mov z0.h, z0.h[1]298; CHECK-NEXT:    ret299  %1 = extractelement <8 x half> %data, i16 1300  %.splatinsert = insertelement <vscale x 2 x half> poison, half %1, i32 0301  %.splat = shufflevector <vscale x 2 x half> %.splatinsert, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer302  ret <vscale x 2 x half> %.splat303}304 305define <vscale x 2 x half> @dup_extract_nxv2f16_v4f16(<4 x half> %data) {306; CHECK-LABEL: dup_extract_nxv2f16_v4f16:307; CHECK:       // %bb.0:308; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0309; CHECK-NEXT:    mov z0.h, z0.h[1]310; CHECK-NEXT:    ret311  %1 = extractelement <4 x half> %data, i16 1312  %.splatinsert = insertelement <vscale x 2 x half> poison, half %1, i32 0313  %.splat = shufflevector <vscale x 2 x half> %.splatinsert, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer314  ret <vscale x 2 x half> %.splat315}316 317define <vscale x 4 x float> @dup_extract_nxv4f32_nxv4f32(<vscale x 4 x float> %data) {318; CHECK-LABEL: dup_extract_nxv4f32_nxv4f32:319; CHECK:       // %bb.0:320; CHECK-NEXT:    mov z0.s, z0.s[1]321; CHECK-NEXT:    ret322  %1 = extractelement <vscale x 4 x float> %data, i32 1323  %.splatinsert = insertelement <vscale x 4 x float> poison, float %1, i32 0324  %.splat = shufflevector <vscale x 4 x float> %.splatinsert, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer325  ret <vscale x 4 x float> %.splat326}327 328define <vscale x 4 x float> @dup_extract_nxv4f32_nxv2f32(<vscale x 2 x float> %data) {329; CHECK-LABEL: dup_extract_nxv4f32_nxv2f32:330; CHECK:       // %bb.0:331; CHECK-NEXT:    mov z0.d, z0.d[1]332; CHECK-NEXT:    mov z0.s, s0333; CHECK-NEXT:    ret334  %1 = extractelement <vscale x 2 x float> %data, i32 1335  %.splatinsert = insertelement <vscale x 4 x float> poison, float %1, i32 0336  %.splat = shufflevector <vscale x 4 x float> %.splatinsert, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer337  ret <vscale x 4 x float> %.splat338}339 340define <vscale x 4 x float> @dup_extract_nxv4f32_v4f32(<4 x float> %data) {341; CHECK-LABEL: dup_extract_nxv4f32_v4f32:342; CHECK:       // %bb.0:343; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0344; CHECK-NEXT:    mov z0.s, z0.s[1]345; CHECK-NEXT:    ret346  %1 = extractelement <4 x float> %data, i32 1347  %.splatinsert = insertelement <vscale x 4 x float> poison, float %1, i32 0348  %.splat = shufflevector <vscale x 4 x float> %.splatinsert, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer349  ret <vscale x 4 x float> %.splat350}351 352define <vscale x 4 x float> @dup_extract_nxv4f32_v2f32(<2 x float> %data) {353; CHECK-LABEL: dup_extract_nxv4f32_v2f32:354; CHECK:       // %bb.0:355; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0356; CHECK-NEXT:    mov z0.s, z0.s[1]357; CHECK-NEXT:    ret358  %1 = extractelement <2 x float> %data, i32 1359  %.splatinsert = insertelement <vscale x 4 x float> poison, float %1, i32 0360  %.splat = shufflevector <vscale x 4 x float> %.splatinsert, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer361  ret <vscale x 4 x float> %.splat362}363 364define <vscale x 2 x float> @dup_extract_nxv2f32_nxv4f32(<vscale x 4 x float> %data) {365; CHECK-LABEL: dup_extract_nxv2f32_nxv4f32:366; CHECK:       // %bb.0:367; CHECK-NEXT:    mov z0.s, z0.s[1]368; CHECK-NEXT:    ret369  %1 = extractelement <vscale x 4 x float> %data, i32 1370  %.splatinsert = insertelement <vscale x 2 x float> poison, float %1, i32 0371  %.splat = shufflevector <vscale x 2 x float> %.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer372  ret <vscale x 2 x float> %.splat373}374 375define <vscale x 2 x float> @dup_extract_nxv2f32_nxv2f32(<vscale x 2 x float> %data) {376; CHECK-LABEL: dup_extract_nxv2f32_nxv2f32:377; CHECK:       // %bb.0:378; CHECK-NEXT:    mov z0.d, z0.d[1]379; CHECK-NEXT:    ret380  %1 = extractelement <vscale x 2 x float> %data, i32 1381  %.splatinsert = insertelement <vscale x 2 x float> poison, float %1, i32 0382  %.splat = shufflevector <vscale x 2 x float> %.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer383  ret <vscale x 2 x float> %.splat384}385 386define <vscale x 2 x float> @dup_extract_nxv2f32_v4f32(<4 x float> %data) {387; CHECK-LABEL: dup_extract_nxv2f32_v4f32:388; CHECK:       // %bb.0:389; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0390; CHECK-NEXT:    mov z0.s, z0.s[1]391; CHECK-NEXT:    ret392  %1 = extractelement <4 x float> %data, i32 1393  %.splatinsert = insertelement <vscale x 2 x float> poison, float %1, i32 0394  %.splat = shufflevector <vscale x 2 x float> %.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer395  ret <vscale x 2 x float> %.splat396}397 398define <vscale x 2 x float> @dup_extract_nxv2f32_v2f32(<2 x float> %data) {399; CHECK-LABEL: dup_extract_nxv2f32_v2f32:400; CHECK:       // %bb.0:401; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0402; CHECK-NEXT:    mov z0.s, z0.s[1]403; CHECK-NEXT:    ret404  %1 = extractelement <2 x float> %data, i32 1405  %.splatinsert = insertelement <vscale x 2 x float> poison, float %1, i32 0406  %.splat = shufflevector <vscale x 2 x float> %.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer407  ret <vscale x 2 x float> %.splat408}409 410define <vscale x 2 x double> @dup_extract_nxv2f64_nxv2f64(<vscale x 2 x double> %data) {411; CHECK-LABEL: dup_extract_nxv2f64_nxv2f64:412; CHECK:       // %bb.0:413; CHECK-NEXT:    mov z0.d, z0.d[1]414; CHECK-NEXT:    ret415  %1 = extractelement <vscale x 2 x double> %data, i64 1416  %.splatinsert = insertelement <vscale x 2 x double> poison, double %1, i32 0417  %.splat = shufflevector <vscale x 2 x double> %.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer418  ret <vscale x 2 x double> %.splat419}420 421define <vscale x 2 x double> @dup_extract_nxv2f64_v2f64(<2 x double> %data) {422; CHECK-LABEL: dup_extract_nxv2f64_v2f64:423; CHECK:       // %bb.0:424; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0425; CHECK-NEXT:    mov z0.d, z0.d[1]426; CHECK-NEXT:    ret427  %1 = extractelement <2 x double> %data, i64 1428  %.splatinsert = insertelement <vscale x 2 x double> poison, double %1, i32 0429  %.splat = shufflevector <vscale x 2 x double> %.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer430  ret <vscale x 2 x double> %.splat431}432 433define <vscale x 2 x double> @dup_extract_nxv2f64_v1f64(<1 x double> %data) {434; CHECK-LABEL: dup_extract_nxv2f64_v1f64:435; CHECK:       // %bb.0:436; CHECK-NEXT:    mov z0.d, d0437; CHECK-NEXT:    ret438  %1 = extractelement <1 x double> %data, i64 1439  %.splatinsert = insertelement <vscale x 2 x double> poison, double %1, i32 0440  %.splat = shufflevector <vscale x 2 x double> %.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer441  ret <vscale x 2 x double> %.splat442}443 444define <vscale x 8 x bfloat> @dup_extract_nxv8bf16_nxv8bf16(<vscale x 8 x bfloat> %data) {445; CHECK-LABEL: dup_extract_nxv8bf16_nxv8bf16:446; CHECK:       // %bb.0:447; CHECK-NEXT:    mov z0.h, z0.h[1]448; CHECK-NEXT:    ret449  %1 = extractelement <vscale x 8 x bfloat> %data, i16 1450  %.splatinsert = insertelement <vscale x 8 x bfloat> poison, bfloat %1, i32 0451  %.splat = shufflevector <vscale x 8 x bfloat> %.splatinsert, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer452  ret <vscale x 8 x bfloat> %.splat453}454 455define <vscale x 8 x bfloat> @dup_extract_nxv8bf16_nxv4bf16(<vscale x 4 x bfloat> %data) {456; CHECK-LABEL: dup_extract_nxv8bf16_nxv4bf16:457; CHECK:       // %bb.0:458; CHECK-NEXT:    mov z0.s, z0.s[1]459; CHECK-NEXT:    mov z0.h, h0460; CHECK-NEXT:    ret461  %1 = extractelement <vscale x 4 x bfloat> %data, i16 1462  %.splatinsert = insertelement <vscale x 8 x bfloat> poison, bfloat %1, i32 0463  %.splat = shufflevector <vscale x 8 x bfloat> %.splatinsert, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer464  ret <vscale x 8 x bfloat> %.splat465}466 467define <vscale x 8 x bfloat> @dup_extract_nxv8bf16_nxv2bf16(<vscale x 2 x bfloat> %data) {468; CHECK-LABEL: dup_extract_nxv8bf16_nxv2bf16:469; CHECK:       // %bb.0:470; CHECK-NEXT:    mov z0.d, z0.d[1]471; CHECK-NEXT:    mov z0.h, h0472; CHECK-NEXT:    ret473  %1 = extractelement <vscale x 2 x bfloat> %data, i16 1474  %.splatinsert = insertelement <vscale x 8 x bfloat> poison, bfloat %1, i32 0475  %.splat = shufflevector <vscale x 8 x bfloat> %.splatinsert, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer476  ret <vscale x 8 x bfloat> %.splat477}478 479define <vscale x 8 x bfloat> @dup_extract_nxv8bf16_v8bf16(<8 x bfloat> %data) {480; CHECK-LABEL: dup_extract_nxv8bf16_v8bf16:481; CHECK:       // %bb.0:482; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0483; CHECK-NEXT:    mov z0.h, z0.h[1]484; CHECK-NEXT:    ret485  %1 = extractelement <8 x bfloat> %data, i16 1486  %.splatinsert = insertelement <vscale x 8 x bfloat> poison, bfloat %1, i32 0487  %.splat = shufflevector <vscale x 8 x bfloat> %.splatinsert, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer488  ret <vscale x 8 x bfloat> %.splat489}490 491define <vscale x 8 x bfloat> @dup_extract_nxv8bf16_v4bf16(<4 x bfloat> %data) {492; CHECK-LABEL: dup_extract_nxv8bf16_v4bf16:493; CHECK:       // %bb.0:494; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0495; CHECK-NEXT:    mov z0.h, z0.h[1]496; CHECK-NEXT:    ret497  %1 = extractelement <4 x bfloat> %data, i16 1498  %.splatinsert = insertelement <vscale x 8 x bfloat> poison, bfloat %1, i32 0499  %.splat = shufflevector <vscale x 8 x bfloat> %.splatinsert, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer500  ret <vscale x 8 x bfloat> %.splat501}502 503define <vscale x 4 x bfloat> @dup_extract_nxv4bf16_nxv8bf16(<vscale x 8 x bfloat> %data) {504; CHECK-LABEL: dup_extract_nxv4bf16_nxv8bf16:505; CHECK:       // %bb.0:506; CHECK-NEXT:    mov z0.h, z0.h[1]507; CHECK-NEXT:    ret508  %1 = extractelement <vscale x 8 x bfloat> %data, i16 1509  %.splatinsert = insertelement <vscale x 4 x bfloat> poison, bfloat %1, i32 0510  %.splat = shufflevector <vscale x 4 x bfloat> %.splatinsert, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer511  ret <vscale x 4 x bfloat> %.splat512}513 514define <vscale x 4 x bfloat> @dup_extract_nxv4bf16_nxv4bf16(<vscale x 4 x bfloat> %data) {515; CHECK-LABEL: dup_extract_nxv4bf16_nxv4bf16:516; CHECK:       // %bb.0:517; CHECK-NEXT:    mov z0.s, z0.s[1]518; CHECK-NEXT:    ret519  %1 = extractelement <vscale x 4 x bfloat> %data, i16 1520  %.splatinsert = insertelement <vscale x 4 x bfloat> poison, bfloat %1, i32 0521  %.splat = shufflevector <vscale x 4 x bfloat> %.splatinsert, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer522  ret <vscale x 4 x bfloat> %.splat523}524 525define <vscale x 4 x bfloat> @dup_extract_nxv4bf16_nxv2bf16(<vscale x 2 x bfloat> %data) {526; CHECK-LABEL: dup_extract_nxv4bf16_nxv2bf16:527; CHECK:       // %bb.0:528; CHECK-NEXT:    mov z0.d, z0.d[1]529; CHECK-NEXT:    mov z0.h, h0530; CHECK-NEXT:    ret531  %1 = extractelement <vscale x 2 x bfloat> %data, i16 1532  %.splatinsert = insertelement <vscale x 4 x bfloat> poison, bfloat %1, i32 0533  %.splat = shufflevector <vscale x 4 x bfloat> %.splatinsert, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer534  ret <vscale x 4 x bfloat> %.splat535}536 537define <vscale x 4 x bfloat> @dup_extract_nxv4bf16_v8bf16(<8 x bfloat> %data) {538; CHECK-LABEL: dup_extract_nxv4bf16_v8bf16:539; CHECK:       // %bb.0:540; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0541; CHECK-NEXT:    mov z0.h, z0.h[1]542; CHECK-NEXT:    ret543  %1 = extractelement <8 x bfloat> %data, i16 1544  %.splatinsert = insertelement <vscale x 4 x bfloat> poison, bfloat %1, i32 0545  %.splat = shufflevector <vscale x 4 x bfloat> %.splatinsert, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer546  ret <vscale x 4 x bfloat> %.splat547}548 549define <vscale x 4 x bfloat> @dup_extract_nxv4bf16_v4bf16(<4 x bfloat> %data) {550; CHECK-LABEL: dup_extract_nxv4bf16_v4bf16:551; CHECK:       // %bb.0:552; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0553; CHECK-NEXT:    mov z0.h, z0.h[1]554; CHECK-NEXT:    ret555  %1 = extractelement <4 x bfloat> %data, i16 1556  %.splatinsert = insertelement <vscale x 4 x bfloat> poison, bfloat %1, i32 0557  %.splat = shufflevector <vscale x 4 x bfloat> %.splatinsert, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer558  ret <vscale x 4 x bfloat> %.splat559}560 561define <vscale x 2 x bfloat> @dup_extract_nxv2bf16_nxv8bf16(<vscale x 8 x bfloat> %data) {562; CHECK-LABEL: dup_extract_nxv2bf16_nxv8bf16:563; CHECK:       // %bb.0:564; CHECK-NEXT:    mov z0.h, z0.h[1]565; CHECK-NEXT:    ret566  %1 = extractelement <vscale x 8 x bfloat> %data, i16 1567  %.splatinsert = insertelement <vscale x 2 x bfloat> poison, bfloat %1, i32 0568  %.splat = shufflevector <vscale x 2 x bfloat> %.splatinsert, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer569  ret <vscale x 2 x bfloat> %.splat570}571 572define <vscale x 2 x bfloat> @dup_extract_nxv2bf16_nxv4bf16(<vscale x 4 x bfloat> %data) {573; CHECK-LABEL: dup_extract_nxv2bf16_nxv4bf16:574; CHECK:       // %bb.0:575; CHECK-NEXT:    mov z0.s, z0.s[1]576; CHECK-NEXT:    ret577  %1 = extractelement <vscale x 4 x bfloat> %data, i16 1578  %.splatinsert = insertelement <vscale x 2 x bfloat> poison, bfloat %1, i32 0579  %.splat = shufflevector <vscale x 2 x bfloat> %.splatinsert, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer580  ret <vscale x 2 x bfloat> %.splat581}582 583define <vscale x 2 x bfloat> @dup_extract_nxv2bf16_nxv2bf16(<vscale x 2 x bfloat> %data) {584; CHECK-LABEL: dup_extract_nxv2bf16_nxv2bf16:585; CHECK:       // %bb.0:586; CHECK-NEXT:    mov z0.d, z0.d[1]587; CHECK-NEXT:    ret588  %1 = extractelement <vscale x 2 x bfloat> %data, i16 1589  %.splatinsert = insertelement <vscale x 2 x bfloat> poison, bfloat %1, i32 0590  %.splat = shufflevector <vscale x 2 x bfloat> %.splatinsert, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer591  ret <vscale x 2 x bfloat> %.splat592}593 594define <vscale x 2 x bfloat> @dup_extract_nxv2bf16_v8bf16(<8 x bfloat> %data) {595; CHECK-LABEL: dup_extract_nxv2bf16_v8bf16:596; CHECK:       // %bb.0:597; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0598; CHECK-NEXT:    mov z0.h, z0.h[1]599; CHECK-NEXT:    ret600  %1 = extractelement <8 x bfloat> %data, i16 1601  %.splatinsert = insertelement <vscale x 2 x bfloat> poison, bfloat %1, i32 0602  %.splat = shufflevector <vscale x 2 x bfloat> %.splatinsert, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer603  ret <vscale x 2 x bfloat> %.splat604}605 606define <vscale x 2 x bfloat> @dup_extract_nxv2bf16_v4bf16(<4 x bfloat> %data) {607; CHECK-LABEL: dup_extract_nxv2bf16_v4bf16:608; CHECK:       // %bb.0:609; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0610; CHECK-NEXT:    mov z0.h, z0.h[1]611; CHECK-NEXT:    ret612  %1 = extractelement <4 x bfloat> %data, i16 1613  %.splatinsert = insertelement <vscale x 2 x bfloat> poison, bfloat %1, i32 0614  %.splat = shufflevector <vscale x 2 x bfloat> %.splatinsert, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer615  ret <vscale x 2 x bfloat> %.splat616}617 618attributes #0 = { "target-features"="+sve" }619