brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · d059670 Raw
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