260 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4target triple = "aarch64-unknown-linux-gnu"5 6define dso_local <vscale x 4 x float> @dupq_f32_ab_pattern(float %x, float %y) {7; CHECK-LABEL: @dupq_f32_ab_pattern(8; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x float> poison, float [[X:%.*]], i64 09; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x float> [[TMP1]], float [[Y:%.*]], i64 110; CHECK-NEXT: [[TMP3:%.*]] = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> [[TMP2]], i64 0)11; CHECK-NEXT: [[TMP4:%.*]] = bitcast <vscale x 4 x float> [[TMP3]] to <vscale x 2 x i64>12; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <vscale x 2 x i64> [[TMP4]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer13; CHECK-NEXT: [[TMP6:%.*]] = bitcast <vscale x 2 x i64> [[TMP5]] to <vscale x 4 x float>14; CHECK-NEXT: ret <vscale x 4 x float> [[TMP6]]15;16 %1 = insertelement <4 x float> poison, float %x, i64 017 %2 = insertelement <4 x float> %1, float %y, i64 118 %3 = insertelement <4 x float> %2, float %x, i64 219 %4 = insertelement <4 x float> %3, float %y, i64 320 %5 = tail call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %4, i64 0)21 %6 = tail call <vscale x 4 x float> @llvm.aarch64.sve.dupq.lane.nxv4f32(<vscale x 4 x float> %5, i64 0)22 ret <vscale x 4 x float> %623}24 25define dso_local <vscale x 8 x half> @dupq_f16_a_pattern(half %a) {26; CHECK-LABEL: @dupq_f16_a_pattern(27; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 028; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <8 x half> [[TMP1]], <8 x half> poison, <8 x i32> zeroinitializer29; CHECK-NEXT: [[TMP3:%.*]] = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP2]], i64 0)30; CHECK-NEXT: [[TMP4:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> [[TMP3]], i64 0)31; CHECK-NEXT: ret <vscale x 8 x half> [[TMP4]]32;33 %1 = insertelement <8 x half> poison, half %a, i64 034 %2 = insertelement <8 x half> %1, half %a, i64 135 %3 = insertelement <8 x half> %2, half %a, i64 236 %4 = insertelement <8 x half> %3, half %a, i64 337 %5 = insertelement <8 x half> %4, half %a, i64 438 %6 = insertelement <8 x half> %5, half %a, i64 539 %7 = insertelement <8 x half> %6, half %a, i64 640 %8 = insertelement <8 x half> %7, half %a, i64 741 %9 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %8, i64 0)42 %10 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %9, i64 0)43 ret <vscale x 8 x half> %1044}45 46define dso_local <vscale x 8 x half> @dupq_f16_ab_pattern(half %a, half %b) {47; CHECK-LABEL: @dupq_f16_ab_pattern(48; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 049; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 150; CHECK-NEXT: [[TMP3:%.*]] = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP2]], i64 0)51; CHECK-NEXT: [[TMP4:%.*]] = bitcast <vscale x 8 x half> [[TMP3]] to <vscale x 4 x i32>52; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <vscale x 4 x i32> [[TMP4]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer53; CHECK-NEXT: [[TMP6:%.*]] = bitcast <vscale x 4 x i32> [[TMP5]] to <vscale x 8 x half>54; CHECK-NEXT: ret <vscale x 8 x half> [[TMP6]]55;56 %1 = insertelement <8 x half> poison, half %a, i64 057 %2 = insertelement <8 x half> %1, half %b, i64 158 %3 = insertelement <8 x half> %2, half %a, i64 259 %4 = insertelement <8 x half> %3, half %b, i64 360 %5 = insertelement <8 x half> %4, half %a, i64 461 %6 = insertelement <8 x half> %5, half %b, i64 562 %7 = insertelement <8 x half> %6, half %a, i64 663 %8 = insertelement <8 x half> %7, half %b, i64 764 %9 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %8, i64 0)65 %10 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %9, i64 0)66 ret <vscale x 8 x half> %1067}68 69define dso_local <vscale x 8 x half> @dupq_f16_abcd_pattern(half %a, half %b, half %c, half %d) {70; CHECK-LABEL: @dupq_f16_abcd_pattern(71; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 072; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 173; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x half> [[TMP2]], half [[C:%.*]], i64 274; CHECK-NEXT: [[TMP4:%.*]] = insertelement <8 x half> [[TMP3]], half [[D:%.*]], i64 375; CHECK-NEXT: [[TMP5:%.*]] = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP4]], i64 0)76; CHECK-NEXT: [[TMP6:%.*]] = bitcast <vscale x 8 x half> [[TMP5]] to <vscale x 2 x i64>77; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <vscale x 2 x i64> [[TMP6]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer78; CHECK-NEXT: [[TMP8:%.*]] = bitcast <vscale x 2 x i64> [[TMP7]] to <vscale x 8 x half>79; CHECK-NEXT: ret <vscale x 8 x half> [[TMP8]]80;81 %1 = insertelement <8 x half> poison, half %a, i64 082 %2 = insertelement <8 x half> %1, half %b, i64 183 %3 = insertelement <8 x half> %2, half %c, i64 284 %4 = insertelement <8 x half> %3, half %d, i64 385 %5 = insertelement <8 x half> %4, half %a, i64 486 %6 = insertelement <8 x half> %5, half %b, i64 587 %7 = insertelement <8 x half> %6, half %c, i64 688 %8 = insertelement <8 x half> %7, half %d, i64 789 %9 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %8, i64 0)90 %10 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %9, i64 0)91 ret <vscale x 8 x half> %1092}93 94define dso_local <vscale x 8 x half> @dupq_f16_abcnull_pattern(half %a, half %b, half %c, half %d) {95; CHECK-LABEL: @dupq_f16_abcnull_pattern(96; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 097; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 198; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x half> [[TMP2]], half [[C:%.*]], i64 299; CHECK-NEXT: [[TMP4:%.*]] = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP3]], i64 0)100; CHECK-NEXT: [[TMP5:%.*]] = bitcast <vscale x 8 x half> [[TMP4]] to <vscale x 2 x i64>101; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <vscale x 2 x i64> [[TMP5]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer102; CHECK-NEXT: [[TMP7:%.*]] = bitcast <vscale x 2 x i64> [[TMP6]] to <vscale x 8 x half>103; CHECK-NEXT: ret <vscale x 8 x half> [[TMP7]]104;105 %1 = insertelement <8 x half> poison, half %a, i64 0106 %2 = insertelement <8 x half> %1, half %b, i64 1107 %3 = insertelement <8 x half> %2, half %c, i64 2108 %4 = insertelement <8 x half> %3, half %a, i64 4109 %5 = insertelement <8 x half> %4, half %b, i64 5110 %6 = insertelement <8 x half> %5, half %c, i64 6111 %7 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %6, i64 0)112 %8 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %7, i64 0)113 ret <vscale x 8 x half> %8114}115 116define dso_local <vscale x 8 x half> @dupq_f16_abnull_pattern(half %a, half %b) {117; CHECK-LABEL: @dupq_f16_abnull_pattern(118; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 0119; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 1120; CHECK-NEXT: [[TMP3:%.*]] = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP2]], i64 0)121; CHECK-NEXT: [[TMP4:%.*]] = bitcast <vscale x 8 x half> [[TMP3]] to <vscale x 4 x i32>122; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <vscale x 4 x i32> [[TMP4]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer123; CHECK-NEXT: [[TMP6:%.*]] = bitcast <vscale x 4 x i32> [[TMP5]] to <vscale x 8 x half>124; CHECK-NEXT: ret <vscale x 8 x half> [[TMP6]]125;126 %1 = insertelement <8 x half> poison, half %a, i64 0127 %2 = insertelement <8 x half> %1, half %b, i64 1128 %3 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %2, i64 0)129 %4 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %3, i64 0)130 ret <vscale x 8 x half> %4131}132 133define dso_local <vscale x 8 x half> @neg_dupq_f16_non_poison_fixed(half %a, half %b, <8 x half> %v) {134; CHECK-LABEL: @neg_dupq_f16_non_poison_fixed(135; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> [[V:%.*]], half [[A:%.*]], i64 0136; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 1137; CHECK-NEXT: [[TMP3:%.*]] = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP2]], i64 0)138; CHECK-NEXT: [[TMP4:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> [[TMP3]], i64 0)139; CHECK-NEXT: ret <vscale x 8 x half> [[TMP4]]140;141 %1 = insertelement <8 x half> %v, half %a, i64 0142 %2 = insertelement <8 x half> %1, half %b, i64 1143 %3 = insertelement <8 x half> %2, half %a, i64 0144 %4 = insertelement <8 x half> %3, half %b, i64 1145 %5 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %4, i64 0)146 %6 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %5, i64 0)147 ret <vscale x 8 x half> %6148}149 150define dso_local <vscale x 8 x half> @neg_dupq_f16_into_non_poison_scalable(half %a, half %b, <vscale x 8 x half> %v) {151; CHECK-LABEL: @neg_dupq_f16_into_non_poison_scalable(152; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 0153; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 1154; CHECK-NEXT: [[TMP3:%.*]] = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> [[V:%.*]], <8 x half> [[TMP2]], i64 0)155; CHECK-NEXT: [[TMP4:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> [[TMP3]], i64 0)156; CHECK-NEXT: ret <vscale x 8 x half> [[TMP4]]157;158 %1 = insertelement <8 x half> poison, half %a, i64 0159 %2 = insertelement <8 x half> %1, half %b, i64 1160 %3 = insertelement <8 x half> %2, half %a, i64 0161 %4 = insertelement <8 x half> %3, half %b, i64 1162 %5 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> %v, <8 x half> %4, i64 0)163 %6 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %5, i64 0)164 ret <vscale x 8 x half> %6165}166 167; Insert %c to override the last element in the insertelement chain, which will fail to combine168 169define dso_local <vscale x 8 x half> @neg_dupq_f16_abcd_pattern_double_insert(half %a, half %b, half %c, half %d) {170; CHECK-LABEL: @neg_dupq_f16_abcd_pattern_double_insert(171; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 0172; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 1173; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x half> [[TMP2]], half [[C:%.*]], i64 2174; CHECK-NEXT: [[TMP4:%.*]] = insertelement <8 x half> [[TMP3]], half [[D:%.*]], i64 3175; CHECK-NEXT: [[TMP5:%.*]] = insertelement <8 x half> [[TMP4]], half [[A]], i64 4176; CHECK-NEXT: [[TMP6:%.*]] = insertelement <8 x half> [[TMP5]], half [[B]], i64 5177; CHECK-NEXT: [[TMP7:%.*]] = insertelement <8 x half> [[TMP6]], half [[C]], i64 6178; CHECK-NEXT: [[TMP8:%.*]] = insertelement <8 x half> [[TMP7]], half [[C]], i64 7179; CHECK-NEXT: [[TMP9:%.*]] = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP8]], i64 0)180; CHECK-NEXT: [[TMP10:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> [[TMP9]], i64 0)181; CHECK-NEXT: ret <vscale x 8 x half> [[TMP10]]182;183 %1 = insertelement <8 x half> poison, half %a, i64 0184 %2 = insertelement <8 x half> %1, half %b, i64 1185 %3 = insertelement <8 x half> %2, half %c, i64 2186 %4 = insertelement <8 x half> %3, half %d, i64 3187 %5 = insertelement <8 x half> %4, half %a, i64 4188 %6 = insertelement <8 x half> %5, half %b, i64 5189 %7 = insertelement <8 x half> %6, half %c, i64 6190 %8 = insertelement <8 x half> %7, half %d, i64 7191 %9 = insertelement <8 x half> %8, half %c, i64 7192 %10 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %9, i64 0)193 %11 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %10, i64 0)194 ret <vscale x 8 x half> %11195}196 197define dso_local <vscale x 8 x half> @dupq_f16_abcd_pattern_reverted_insert(half %a, half %b, half %c, half %d) {198; CHECK-LABEL: @dupq_f16_abcd_pattern_reverted_insert(199; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 0200; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[B:%.*]], i64 1201; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x half> [[TMP2]], half [[C:%.*]], i64 2202; CHECK-NEXT: [[TMP4:%.*]] = insertelement <8 x half> [[TMP3]], half [[D:%.*]], i64 3203; CHECK-NEXT: [[TMP5:%.*]] = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP4]], i64 0)204; CHECK-NEXT: [[TMP6:%.*]] = bitcast <vscale x 8 x half> [[TMP5]] to <vscale x 2 x i64>205; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <vscale x 2 x i64> [[TMP6]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer206; CHECK-NEXT: [[TMP8:%.*]] = bitcast <vscale x 2 x i64> [[TMP7]] to <vscale x 8 x half>207; CHECK-NEXT: ret <vscale x 8 x half> [[TMP8]]208;209 %1 = insertelement <8 x half> poison, half %d, i64 7210 %2 = insertelement <8 x half> %1, half %c, i64 6211 %3 = insertelement <8 x half> %2, half %b, i64 5212 %4 = insertelement <8 x half> %3, half %a, i64 4213 %5 = insertelement <8 x half> %4, half %d, i64 3214 %6 = insertelement <8 x half> %5, half %c, i64 2215 %7 = insertelement <8 x half> %6, half %b, i64 1216 %8 = insertelement <8 x half> %7, half %a, i64 0217 %9 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %8, i64 0)218 %10 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %9, i64 0)219 ret <vscale x 8 x half> %10220}221 222define dso_local <vscale x 8 x half> @dupq_f16_ab_no_front_pattern(half %a, half %b) {223; CHECK-LABEL: @dupq_f16_ab_no_front_pattern(224; CHECK-NEXT: [[TMP1:%.*]] = insertelement <8 x half> poison, half [[A:%.*]], i64 0225; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x half> [[TMP1]], half [[A]], i64 1226; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x half> [[TMP2]], half [[A]], i64 2227; CHECK-NEXT: [[TMP4:%.*]] = insertelement <8 x half> [[TMP3]], half [[B:%.*]], i64 3228; CHECK-NEXT: [[TMP5:%.*]] = insertelement <8 x half> [[TMP4]], half [[A]], i64 4229; CHECK-NEXT: [[TMP6:%.*]] = insertelement <8 x half> [[TMP5]], half [[B]], i64 5230; CHECK-NEXT: [[TMP7:%.*]] = insertelement <8 x half> [[TMP6]], half [[A]], i64 6231; CHECK-NEXT: [[TMP8:%.*]] = insertelement <8 x half> [[TMP7]], half [[B]], i64 7232; CHECK-NEXT: [[TMP9:%.*]] = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> [[TMP8]], i64 0)233; CHECK-NEXT: [[TMP10:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> [[TMP9]], i64 0)234; CHECK-NEXT: ret <vscale x 8 x half> [[TMP10]]235;236 %1 = insertelement <8 x half> poison, half %a, i64 0237 %2 = insertelement <8 x half> %1, half %a, i64 1238 %3 = insertelement <8 x half> %2, half %a, i64 2239 %4 = insertelement <8 x half> %3, half %b, i64 3240 %5 = insertelement <8 x half> %4, half %a, i64 4241 %6 = insertelement <8 x half> %5, half %b, i64 5242 %7 = insertelement <8 x half> %6, half %a, i64 6243 %8 = insertelement <8 x half> %7, half %b, i64 7244 %9 = tail call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %8, i64 0)245 %10 = tail call <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half> %9, i64 0)246 ret <vscale x 8 x half> %10247}248 249declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half>, <8 x half>, i64)250declare <vscale x 8 x half> @llvm.aarch64.sve.dupq.lane.nxv8f16(<vscale x 8 x half>, i64)251declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float>, <4 x float>, i64)252declare <vscale x 4 x float> @llvm.vector.insert.nxv2f32.v2f32(<vscale x 4 x float>, <2 x float>, i64)253declare <vscale x 4 x float> @llvm.aarch64.sve.dupq.lane.nxv4f32(<vscale x 4 x float>, i64)254declare <vscale x 4 x i32> @llvm.vector.insert.nxv4i32.v4i32(<vscale x 4 x i32>, <4 x i32>, i64)255declare <vscale x 4 x i32> @llvm.aarch64.sve.dupq.lane.nxv4i32(<vscale x 4 x i32>, i64)256declare <vscale x 8 x i16> @llvm.vector.insert.nxv8i16.v8i16(<vscale x 8 x i16>, <8 x i16>, i64)257declare <vscale x 8 x i16> @llvm.aarch64.sve.dupq.lane.nxv8i16(<vscale x 8 x i16>, i64)258 259attributes #0 = { "target-features"="+sve" }260