brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.0 KiB · 9a215b3 Raw
1184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s3 4declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)5declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)6 7declare { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32, i32, i32, i32, i32, <8 x i16>, <8 x i16>)8declare { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>)9declare { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>)10 11declare { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32, i32, i32, i32, i32, <8 x i16>, <8 x i16>, <8 x i1>)12declare { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i1>)13declare { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32, i32, i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i1>)14 15define arm_aapcs_vfpcc i64 @test_vmlaldavaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {16; CHECK-LABEL: test_vmlaldavaq_s16:17; CHECK:       @ %bb.0: @ %entry18; CHECK-NEXT:    vmlalva.s16 r0, r1, q0, q119; CHECK-NEXT:    bx lr20entry:21  %0 = lshr i64 %a, 3222  %1 = trunc i64 %0 to i3223  %2 = trunc i64 %a to i3224  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)25  %4 = extractvalue { i32, i32 } %3, 126  %5 = zext i32 %4 to i6427  %6 = shl i64 %5, 3228  %7 = extractvalue { i32, i32 } %3, 029  %8 = zext i32 %7 to i6430  %9 = or i64 %6, %831  ret i64 %932}33 34define arm_aapcs_vfpcc i64 @test_vmlaldavaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {35; CHECK-LABEL: test_vmlaldavaq_s32:36; CHECK:       @ %bb.0: @ %entry37; CHECK-NEXT:    vmlalva.s32 r0, r1, q0, q138; CHECK-NEXT:    bx lr39entry:40  %0 = lshr i64 %a, 3241  %1 = trunc i64 %0 to i3242  %2 = trunc i64 %a to i3243  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)44  %4 = extractvalue { i32, i32 } %3, 145  %5 = zext i32 %4 to i6446  %6 = shl i64 %5, 3247  %7 = extractvalue { i32, i32 } %3, 048  %8 = zext i32 %7 to i6449  %9 = or i64 %6, %850  ret i64 %951}52 53define arm_aapcs_vfpcc i64 @test_vmlaldavaq_u16(i64 %a, <8 x i16> %b, <8 x i16> %c) {54; CHECK-LABEL: test_vmlaldavaq_u16:55; CHECK:       @ %bb.0: @ %entry56; CHECK-NEXT:    vmlalva.u16 r0, r1, q0, q157; CHECK-NEXT:    bx lr58entry:59  %0 = lshr i64 %a, 3260  %1 = trunc i64 %0 to i3261  %2 = trunc i64 %a to i3262  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 1, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)63  %4 = extractvalue { i32, i32 } %3, 164  %5 = zext i32 %4 to i6465  %6 = shl i64 %5, 3266  %7 = extractvalue { i32, i32 } %3, 067  %8 = zext i32 %7 to i6468  %9 = or i64 %6, %869  ret i64 %970}71 72define arm_aapcs_vfpcc i64 @test_vmlaldavaq_u32(i64 %a, <4 x i32> %b, <4 x i32> %c) {73; CHECK-LABEL: test_vmlaldavaq_u32:74; CHECK:       @ %bb.0: @ %entry75; CHECK-NEXT:    vmlalva.u32 r0, r1, q0, q176; CHECK-NEXT:    bx lr77entry:78  %0 = lshr i64 %a, 3279  %1 = trunc i64 %0 to i3280  %2 = trunc i64 %a to i3281  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)82  %4 = extractvalue { i32, i32 } %3, 183  %5 = zext i32 %4 to i6484  %6 = shl i64 %5, 3285  %7 = extractvalue { i32, i32 } %3, 086  %8 = zext i32 %7 to i6487  %9 = or i64 %6, %888  ret i64 %989}90 91define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {92; CHECK-LABEL: test_vmlaldavaxq_s16:93; CHECK:       @ %bb.0: @ %entry94; CHECK-NEXT:    vmlaldavax.s16 r0, r1, q0, q195; CHECK-NEXT:    bx lr96entry:97  %0 = lshr i64 %a, 3298  %1 = trunc i64 %0 to i3299  %2 = trunc i64 %a to i32100  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)101  %4 = extractvalue { i32, i32 } %3, 1102  %5 = zext i32 %4 to i64103  %6 = shl i64 %5, 32104  %7 = extractvalue { i32, i32 } %3, 0105  %8 = zext i32 %7 to i64106  %9 = or i64 %6, %8107  ret i64 %9108}109 110define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {111; CHECK-LABEL: test_vmlaldavaxq_s32:112; CHECK:       @ %bb.0: @ %entry113; CHECK-NEXT:    vmlaldavax.s32 r0, r1, q0, q1114; CHECK-NEXT:    bx lr115entry:116  %0 = lshr i64 %a, 32117  %1 = trunc i64 %0 to i32118  %2 = trunc i64 %a to i32119  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)120  %4 = extractvalue { i32, i32 } %3, 1121  %5 = zext i32 %4 to i64122  %6 = shl i64 %5, 32123  %7 = extractvalue { i32, i32 } %3, 0124  %8 = zext i32 %7 to i64125  %9 = or i64 %6, %8126  ret i64 %9127}128 129define arm_aapcs_vfpcc i64 @test_vmlsldavaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {130; CHECK-LABEL: test_vmlsldavaq_s16:131; CHECK:       @ %bb.0: @ %entry132; CHECK-NEXT:    vmlsldava.s16 r0, r1, q0, q1133; CHECK-NEXT:    bx lr134entry:135  %0 = lshr i64 %a, 32136  %1 = trunc i64 %0 to i32137  %2 = trunc i64 %a to i32138  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)139  %4 = extractvalue { i32, i32 } %3, 1140  %5 = zext i32 %4 to i64141  %6 = shl i64 %5, 32142  %7 = extractvalue { i32, i32 } %3, 0143  %8 = zext i32 %7 to i64144  %9 = or i64 %6, %8145  ret i64 %9146}147 148define arm_aapcs_vfpcc i64 @test_vmlsldavaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {149; CHECK-LABEL: test_vmlsldavaq_s32:150; CHECK:       @ %bb.0: @ %entry151; CHECK-NEXT:    vmlsldava.s32 r0, r1, q0, q1152; CHECK-NEXT:    bx lr153entry:154  %0 = lshr i64 %a, 32155  %1 = trunc i64 %0 to i32156  %2 = trunc i64 %a to i32157  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)158  %4 = extractvalue { i32, i32 } %3, 1159  %5 = zext i32 %4 to i64160  %6 = shl i64 %5, 32161  %7 = extractvalue { i32, i32 } %3, 0162  %8 = zext i32 %7 to i64163  %9 = or i64 %6, %8164  ret i64 %9165}166 167define arm_aapcs_vfpcc i64 @test_vmlsldaxvaq_s16(i64 %a, <8 x i16> %b, <8 x i16> %c) {168; CHECK-LABEL: test_vmlsldaxvaq_s16:169; CHECK:       @ %bb.0: @ %entry170; CHECK-NEXT:    vmlsldavax.s16 r0, r1, q0, q1171; CHECK-NEXT:    bx lr172entry:173  %0 = lshr i64 %a, 32174  %1 = trunc i64 %0 to i32175  %2 = trunc i64 %a to i32176  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c)177  %4 = extractvalue { i32, i32 } %3, 1178  %5 = zext i32 %4 to i64179  %6 = shl i64 %5, 32180  %7 = extractvalue { i32, i32 } %3, 0181  %8 = zext i32 %7 to i64182  %9 = or i64 %6, %8183  ret i64 %9184}185 186define arm_aapcs_vfpcc i64 @test_vmlsldavaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {187; CHECK-LABEL: test_vmlsldavaxq_s32:188; CHECK:       @ %bb.0: @ %entry189; CHECK-NEXT:    vmlsldavax.s32 r0, r1, q0, q1190; CHECK-NEXT:    bx lr191entry:192  %0 = lshr i64 %a, 32193  %1 = trunc i64 %0 to i32194  %2 = trunc i64 %a to i32195  %3 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)196  %4 = extractvalue { i32, i32 } %3, 1197  %5 = zext i32 %4 to i64198  %6 = shl i64 %5, 32199  %7 = extractvalue { i32, i32 } %3, 0200  %8 = zext i32 %7 to i64201  %9 = or i64 %6, %8202  ret i64 %9203}204 205define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {206; CHECK-LABEL: test_vrmlaldavhaq_s32:207; CHECK:       @ %bb.0: @ %entry208; CHECK-NEXT:    vrmlalvha.s32 r0, r1, q0, q1209; CHECK-NEXT:    bx lr210entry:211  %0 = lshr i64 %a, 32212  %1 = trunc i64 %0 to i32213  %2 = trunc i64 %a to i32214  %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)215  %4 = extractvalue { i32, i32 } %3, 1216  %5 = zext i32 %4 to i64217  %6 = shl i64 %5, 32218  %7 = extractvalue { i32, i32 } %3, 0219  %8 = zext i32 %7 to i64220  %9 = or i64 %6, %8221  ret i64 %9222}223 224define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_u32(i64 %a, <4 x i32> %b, <4 x i32> %c) {225; CHECK-LABEL: test_vrmlaldavhaq_u32:226; CHECK:       @ %bb.0: @ %entry227; CHECK-NEXT:    vrmlalvha.u32 r0, r1, q0, q1228; CHECK-NEXT:    bx lr229entry:230  %0 = lshr i64 %a, 32231  %1 = trunc i64 %0 to i32232  %2 = trunc i64 %a to i32233  %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)234  %4 = extractvalue { i32, i32 } %3, 1235  %5 = zext i32 %4 to i64236  %6 = shl i64 %5, 32237  %7 = extractvalue { i32, i32 } %3, 0238  %8 = zext i32 %7 to i64239  %9 = or i64 %6, %8240  ret i64 %9241}242 243define arm_aapcs_vfpcc i64 @test_vrmlaldavhaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {244; CHECK-LABEL: test_vrmlaldavhaxq_s32:245; CHECK:       @ %bb.0: @ %entry246; CHECK-NEXT:    vrmlaldavhax.s32 r0, r1, q0, q1247; CHECK-NEXT:    bx lr248entry:249  %0 = lshr i64 %a, 32250  %1 = trunc i64 %0 to i32251  %2 = trunc i64 %a to i32252  %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)253  %4 = extractvalue { i32, i32 } %3, 1254  %5 = zext i32 %4 to i64255  %6 = shl i64 %5, 32256  %7 = extractvalue { i32, i32 } %3, 0257  %8 = zext i32 %7 to i64258  %9 = or i64 %6, %8259  ret i64 %9260}261 262define arm_aapcs_vfpcc i64 @test_vrmlsldavhaq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {263; CHECK-LABEL: test_vrmlsldavhaq_s32:264; CHECK:       @ %bb.0: @ %entry265; CHECK-NEXT:    vrmlsldavha.s32 r0, r1, q0, q1266; CHECK-NEXT:    bx lr267entry:268  %0 = lshr i64 %a, 32269  %1 = trunc i64 %0 to i32270  %2 = trunc i64 %a to i32271  %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)272  %4 = extractvalue { i32, i32 } %3, 1273  %5 = zext i32 %4 to i64274  %6 = shl i64 %5, 32275  %7 = extractvalue { i32, i32 } %3, 0276  %8 = zext i32 %7 to i64277  %9 = or i64 %6, %8278  ret i64 %9279}280 281define arm_aapcs_vfpcc i64 @test_vrmlsldavhaxq_s32(i64 %a, <4 x i32> %b, <4 x i32> %c) {282; CHECK-LABEL: test_vrmlsldavhaxq_s32:283; CHECK:       @ %bb.0: @ %entry284; CHECK-NEXT:    vrmlsldavhax.s32 r0, r1, q0, q1285; CHECK-NEXT:    bx lr286entry:287  %0 = lshr i64 %a, 32288  %1 = trunc i64 %0 to i32289  %2 = trunc i64 %a to i32290  %3 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c)291  %4 = extractvalue { i32, i32 } %3, 1292  %5 = zext i32 %4 to i64293  %6 = shl i64 %5, 32294  %7 = extractvalue { i32, i32 } %3, 0295  %8 = zext i32 %7 to i64296  %9 = or i64 %6, %8297  ret i64 %9298}299 300define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {301; CHECK-LABEL: test_vmlaldavaq_p_s16:302; CHECK:       @ %bb.0: @ %entry303; CHECK-NEXT:    vmsr p0, r2304; CHECK-NEXT:    vpst305; CHECK-NEXT:    vmlalvat.s16 r0, r1, q0, q1306; CHECK-NEXT:    bx lr307entry:308  %0 = lshr i64 %a, 32309  %1 = trunc i64 %0 to i32310  %2 = trunc i64 %a to i32311  %3 = zext i16 %p to i32312  %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)313  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)314  %6 = extractvalue { i32, i32 } %5, 1315  %7 = zext i32 %6 to i64316  %8 = shl i64 %7, 32317  %9 = extractvalue { i32, i32 } %5, 0318  %10 = zext i32 %9 to i64319  %11 = or i64 %8, %10320  ret i64 %11321}322 323define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {324; CHECK-LABEL: test_vmlaldavaq_p_s32:325; CHECK:       @ %bb.0: @ %entry326; CHECK-NEXT:    vmsr p0, r2327; CHECK-NEXT:    vpst328; CHECK-NEXT:    vmlalvat.s32 r0, r1, q0, q1329; CHECK-NEXT:    bx lr330entry:331  %0 = lshr i64 %a, 32332  %1 = trunc i64 %0 to i32333  %2 = trunc i64 %a to i32334  %3 = zext i16 %p to i32335  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)336  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)337  %6 = extractvalue { i32, i32 } %5, 1338  %7 = zext i32 %6 to i64339  %8 = shl i64 %7, 32340  %9 = extractvalue { i32, i32 } %5, 0341  %10 = zext i32 %9 to i64342  %11 = or i64 %8, %10343  ret i64 %11344}345 346define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_u16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {347; CHECK-LABEL: test_vmlaldavaq_p_u16:348; CHECK:       @ %bb.0: @ %entry349; CHECK-NEXT:    vmsr p0, r2350; CHECK-NEXT:    vpst351; CHECK-NEXT:    vmlalvat.u16 r0, r1, q0, q1352; CHECK-NEXT:    bx lr353entry:354  %0 = lshr i64 %a, 32355  %1 = trunc i64 %0 to i32356  %2 = trunc i64 %a to i32357  %3 = zext i16 %p to i32358  %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)359  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)360  %6 = extractvalue { i32, i32 } %5, 1361  %7 = zext i32 %6 to i64362  %8 = shl i64 %7, 32363  %9 = extractvalue { i32, i32 } %5, 0364  %10 = zext i32 %9 to i64365  %11 = or i64 %8, %10366  ret i64 %11367}368 369define arm_aapcs_vfpcc i64 @test_vmlaldavaq_p_u32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {370; CHECK-LABEL: test_vmlaldavaq_p_u32:371; CHECK:       @ %bb.0: @ %entry372; CHECK-NEXT:    vmsr p0, r2373; CHECK-NEXT:    vpst374; CHECK-NEXT:    vmlalvat.u32 r0, r1, q0, q1375; CHECK-NEXT:    bx lr376entry:377  %0 = lshr i64 %a, 32378  %1 = trunc i64 %0 to i32379  %2 = trunc i64 %a to i32380  %3 = zext i16 %p to i32381  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)382  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)383  %6 = extractvalue { i32, i32 } %5, 1384  %7 = zext i32 %6 to i64385  %8 = shl i64 %7, 32386  %9 = extractvalue { i32, i32 } %5, 0387  %10 = zext i32 %9 to i64388  %11 = or i64 %8, %10389  ret i64 %11390}391 392define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {393; CHECK-LABEL: test_vmlaldavaxq_p_s16:394; CHECK:       @ %bb.0: @ %entry395; CHECK-NEXT:    vmsr p0, r2396; CHECK-NEXT:    vpst397; CHECK-NEXT:    vmlaldavaxt.s16 r0, r1, q0, q1398; CHECK-NEXT:    bx lr399entry:400  %0 = lshr i64 %a, 32401  %1 = trunc i64 %0 to i32402  %2 = trunc i64 %a to i32403  %3 = zext i16 %p to i32404  %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)405  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)406  %6 = extractvalue { i32, i32 } %5, 1407  %7 = zext i32 %6 to i64408  %8 = shl i64 %7, 32409  %9 = extractvalue { i32, i32 } %5, 0410  %10 = zext i32 %9 to i64411  %11 = or i64 %8, %10412  ret i64 %11413}414 415define arm_aapcs_vfpcc i64 @test_vmlaldavaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {416; CHECK-LABEL: test_vmlaldavaxq_p_s32:417; CHECK:       @ %bb.0: @ %entry418; CHECK-NEXT:    vmsr p0, r2419; CHECK-NEXT:    vpst420; CHECK-NEXT:    vmlaldavaxt.s32 r0, r1, q0, q1421; CHECK-NEXT:    bx lr422entry:423  %0 = lshr i64 %a, 32424  %1 = trunc i64 %0 to i32425  %2 = trunc i64 %a to i32426  %3 = zext i16 %p to i32427  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)428  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)429  %6 = extractvalue { i32, i32 } %5, 1430  %7 = zext i32 %6 to i64431  %8 = shl i64 %7, 32432  %9 = extractvalue { i32, i32 } %5, 0433  %10 = zext i32 %9 to i64434  %11 = or i64 %8, %10435  ret i64 %11436}437 438define arm_aapcs_vfpcc i64 @test_vmlsldavaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {439; CHECK-LABEL: test_vmlsldavaq_p_s16:440; CHECK:       @ %bb.0: @ %entry441; CHECK-NEXT:    vmsr p0, r2442; CHECK-NEXT:    vpst443; CHECK-NEXT:    vmlsldavat.s16 r0, r1, q0, q1444; CHECK-NEXT:    bx lr445entry:446  %0 = lshr i64 %a, 32447  %1 = trunc i64 %0 to i32448  %2 = trunc i64 %a to i32449  %3 = zext i16 %p to i32450  %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)451  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)452  %6 = extractvalue { i32, i32 } %5, 1453  %7 = zext i32 %6 to i64454  %8 = shl i64 %7, 32455  %9 = extractvalue { i32, i32 } %5, 0456  %10 = zext i32 %9 to i64457  %11 = or i64 %8, %10458  ret i64 %11459}460 461define arm_aapcs_vfpcc i64 @test_vmlsldavaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {462; CHECK-LABEL: test_vmlsldavaq_p_s32:463; CHECK:       @ %bb.0: @ %entry464; CHECK-NEXT:    vmsr p0, r2465; CHECK-NEXT:    vpst466; CHECK-NEXT:    vmlsldavat.s32 r0, r1, q0, q1467; CHECK-NEXT:    bx lr468entry:469  %0 = lshr i64 %a, 32470  %1 = trunc i64 %0 to i32471  %2 = trunc i64 %a to i32472  %3 = zext i16 %p to i32473  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)474  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)475  %6 = extractvalue { i32, i32 } %5, 1476  %7 = zext i32 %6 to i64477  %8 = shl i64 %7, 32478  %9 = extractvalue { i32, i32 } %5, 0479  %10 = zext i32 %9 to i64480  %11 = or i64 %8, %10481  ret i64 %11482}483 484define arm_aapcs_vfpcc i64 @test_vmlsldaxvaq_p_s16(i64 %a, <8 x i16> %b, <8 x i16> %c, i16 zeroext %p) {485; CHECK-LABEL: test_vmlsldaxvaq_p_s16:486; CHECK:       @ %bb.0: @ %entry487; CHECK-NEXT:    vmsr p0, r2488; CHECK-NEXT:    vpst489; CHECK-NEXT:    vmlsldavaxt.s16 r0, r1, q0, q1490; CHECK-NEXT:    bx lr491entry:492  %0 = lshr i64 %a, 32493  %1 = trunc i64 %0 to i32494  %2 = trunc i64 %a to i32495  %3 = zext i16 %p to i32496  %4 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %3)497  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <8 x i16> %b, <8 x i16> %c, <8 x i1> %4)498  %6 = extractvalue { i32, i32 } %5, 1499  %7 = zext i32 %6 to i64500  %8 = shl i64 %7, 32501  %9 = extractvalue { i32, i32 } %5, 0502  %10 = zext i32 %9 to i64503  %11 = or i64 %8, %10504  ret i64 %11505}506 507define arm_aapcs_vfpcc i64 @test_vmlsldavaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {508; CHECK-LABEL: test_vmlsldavaxq_p_s32:509; CHECK:       @ %bb.0: @ %entry510; CHECK-NEXT:    vmsr p0, r2511; CHECK-NEXT:    vpst512; CHECK-NEXT:    vmlsldavaxt.s32 r0, r1, q0, q1513; CHECK-NEXT:    bx lr514entry:515  %0 = lshr i64 %a, 32516  %1 = trunc i64 %0 to i32517  %2 = trunc i64 %a to i32518  %3 = zext i16 %p to i32519  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)520  %5 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)521  %6 = extractvalue { i32, i32 } %5, 1522  %7 = zext i32 %6 to i64523  %8 = shl i64 %7, 32524  %9 = extractvalue { i32, i32 } %5, 0525  %10 = zext i32 %9 to i64526  %11 = or i64 %8, %10527  ret i64 %11528}529 530define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {531; CHECK-LABEL: test_vrmlaldavhaq_p_s32:532; CHECK:       @ %bb.0: @ %entry533; CHECK-NEXT:    vmsr p0, r2534; CHECK-NEXT:    vpst535; CHECK-NEXT:    vrmlalvhat.s32 r0, r1, q0, q1536; CHECK-NEXT:    bx lr537entry:538  %0 = lshr i64 %a, 32539  %1 = trunc i64 %0 to i32540  %2 = trunc i64 %a to i32541  %3 = zext i16 %p to i32542  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)543  %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)544  %6 = extractvalue { i32, i32 } %5, 1545  %7 = zext i32 %6 to i64546  %8 = shl i64 %7, 32547  %9 = extractvalue { i32, i32 } %5, 0548  %10 = zext i32 %9 to i64549  %11 = or i64 %8, %10550  ret i64 %11551}552 553define arm_aapcs_vfpcc i64 @test_vrmlaldavhaq_p_u32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {554; CHECK-LABEL: test_vrmlaldavhaq_p_u32:555; CHECK:       @ %bb.0: @ %entry556; CHECK-NEXT:    vmsr p0, r2557; CHECK-NEXT:    vpst558; CHECK-NEXT:    vrmlalvhat.u32 r0, r1, q0, q1559; CHECK-NEXT:    bx lr560entry:561  %0 = lshr i64 %a, 32562  %1 = trunc i64 %0 to i32563  %2 = trunc i64 %a to i32564  %3 = zext i16 %p to i32565  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)566  %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)567  %6 = extractvalue { i32, i32 } %5, 1568  %7 = zext i32 %6 to i64569  %8 = shl i64 %7, 32570  %9 = extractvalue { i32, i32 } %5, 0571  %10 = zext i32 %9 to i64572  %11 = or i64 %8, %10573  ret i64 %11574}575 576define arm_aapcs_vfpcc i64 @test_vrmlaldavhaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {577; CHECK-LABEL: test_vrmlaldavhaxq_p_s32:578; CHECK:       @ %bb.0: @ %entry579; CHECK-NEXT:    vmsr p0, r2580; CHECK-NEXT:    vpst581; CHECK-NEXT:    vrmlaldavhaxt.s32 r0, r1, q0, q1582; CHECK-NEXT:    bx lr583entry:584  %0 = lshr i64 %a, 32585  %1 = trunc i64 %0 to i32586  %2 = trunc i64 %a to i32587  %3 = zext i16 %p to i32588  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)589  %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)590  %6 = extractvalue { i32, i32 } %5, 1591  %7 = zext i32 %6 to i64592  %8 = shl i64 %7, 32593  %9 = extractvalue { i32, i32 } %5, 0594  %10 = zext i32 %9 to i64595  %11 = or i64 %8, %10596  ret i64 %11597}598 599define arm_aapcs_vfpcc i64 @test_vrmlsldavhaq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {600; CHECK-LABEL: test_vrmlsldavhaq_p_s32:601; CHECK:       @ %bb.0: @ %entry602; CHECK-NEXT:    vmsr p0, r2603; CHECK-NEXT:    vpst604; CHECK-NEXT:    vrmlsldavhat.s32 r0, r1, q0, q1605; CHECK-NEXT:    bx lr606entry:607  %0 = lshr i64 %a, 32608  %1 = trunc i64 %0 to i32609  %2 = trunc i64 %a to i32610  %3 = zext i16 %p to i32611  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)612  %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)613  %6 = extractvalue { i32, i32 } %5, 1614  %7 = zext i32 %6 to i64615  %8 = shl i64 %7, 32616  %9 = extractvalue { i32, i32 } %5, 0617  %10 = zext i32 %9 to i64618  %11 = or i64 %8, %10619  ret i64 %11620}621 622define arm_aapcs_vfpcc i64 @test_vrmlsldavhaxq_p_s32(i64 %a, <4 x i32> %b, <4 x i32> %c, i16 zeroext %p) {623; CHECK-LABEL: test_vrmlsldavhaxq_p_s32:624; CHECK:       @ %bb.0: @ %entry625; CHECK-NEXT:    vmsr p0, r2626; CHECK-NEXT:    vpst627; CHECK-NEXT:    vrmlsldavhaxt.s32 r0, r1, q0, q1628; CHECK-NEXT:    bx lr629entry:630  %0 = lshr i64 %a, 32631  %1 = trunc i64 %0 to i32632  %2 = trunc i64 %a to i32633  %3 = zext i16 %p to i32634  %4 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %3)635  %5 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 %2, i32 %1, <4 x i32> %b, <4 x i32> %c, <4 x i1> %4)636  %6 = extractvalue { i32, i32 } %5, 1637  %7 = zext i32 %6 to i64638  %8 = shl i64 %7, 32639  %9 = extractvalue { i32, i32 } %5, 0640  %10 = zext i32 %9 to i64641  %11 = or i64 %8, %10642  ret i64 %11643}644 645define arm_aapcs_vfpcc i64 @test_vmlaldavq_s16(<8 x i16> %a, <8 x i16> %b) {646; CHECK-LABEL: test_vmlaldavq_s16:647; CHECK:       @ %bb.0: @ %entry648; CHECK-NEXT:    vmlalv.s16 r0, r1, q0, q1649; CHECK-NEXT:    bx lr650entry:651  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)652  %1 = extractvalue { i32, i32 } %0, 1653  %2 = zext i32 %1 to i64654  %3 = shl i64 %2, 32655  %4 = extractvalue { i32, i32 } %0, 0656  %5 = zext i32 %4 to i64657  %6 = or i64 %3, %5658  ret i64 %6659}660 661define arm_aapcs_vfpcc i64 @test_vmlaldavq_s32(<4 x i32> %a, <4 x i32> %b) {662; CHECK-LABEL: test_vmlaldavq_s32:663; CHECK:       @ %bb.0: @ %entry664; CHECK-NEXT:    vmlalv.s32 r0, r1, q0, q1665; CHECK-NEXT:    bx lr666entry:667  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)668  %1 = extractvalue { i32, i32 } %0, 1669  %2 = zext i32 %1 to i64670  %3 = shl i64 %2, 32671  %4 = extractvalue { i32, i32 } %0, 0672  %5 = zext i32 %4 to i64673  %6 = or i64 %3, %5674  ret i64 %6675}676 677define arm_aapcs_vfpcc i64 @test_vmlaldavq_u16(<8 x i16> %a, <8 x i16> %b) {678; CHECK-LABEL: test_vmlaldavq_u16:679; CHECK:       @ %bb.0: @ %entry680; CHECK-NEXT:    vmlalv.u16 r0, r1, q0, q1681; CHECK-NEXT:    bx lr682entry:683  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)684  %1 = extractvalue { i32, i32 } %0, 1685  %2 = zext i32 %1 to i64686  %3 = shl i64 %2, 32687  %4 = extractvalue { i32, i32 } %0, 0688  %5 = zext i32 %4 to i64689  %6 = or i64 %3, %5690  ret i64 %6691}692 693define arm_aapcs_vfpcc i64 @test_vmlaldavq_u32(<4 x i32> %a, <4 x i32> %b) {694; CHECK-LABEL: test_vmlaldavq_u32:695; CHECK:       @ %bb.0: @ %entry696; CHECK-NEXT:    vmlalv.u32 r0, r1, q0, q1697; CHECK-NEXT:    bx lr698entry:699  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)700  %1 = extractvalue { i32, i32 } %0, 1701  %2 = zext i32 %1 to i64702  %3 = shl i64 %2, 32703  %4 = extractvalue { i32, i32 } %0, 0704  %5 = zext i32 %4 to i64705  %6 = or i64 %3, %5706  ret i64 %6707}708 709define arm_aapcs_vfpcc i64 @test_vmlaldavxq_s16(<8 x i16> %a, <8 x i16> %b) {710; CHECK-LABEL: test_vmlaldavxq_s16:711; CHECK:       @ %bb.0: @ %entry712; CHECK-NEXT:    vmlaldavx.s16 r0, r1, q0, q1713; CHECK-NEXT:    bx lr714entry:715  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)716  %1 = extractvalue { i32, i32 } %0, 1717  %2 = zext i32 %1 to i64718  %3 = shl i64 %2, 32719  %4 = extractvalue { i32, i32 } %0, 0720  %5 = zext i32 %4 to i64721  %6 = or i64 %3, %5722  ret i64 %6723}724 725define arm_aapcs_vfpcc i64 @test_vmlaldavxq_s32(<4 x i32> %a, <4 x i32> %b) {726; CHECK-LABEL: test_vmlaldavxq_s32:727; CHECK:       @ %bb.0: @ %entry728; CHECK-NEXT:    vmlaldavx.s32 r0, r1, q0, q1729; CHECK-NEXT:    bx lr730entry:731  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)732  %1 = extractvalue { i32, i32 } %0, 1733  %2 = zext i32 %1 to i64734  %3 = shl i64 %2, 32735  %4 = extractvalue { i32, i32 } %0, 0736  %5 = zext i32 %4 to i64737  %6 = or i64 %3, %5738  ret i64 %6739}740 741define arm_aapcs_vfpcc i64 @test_vmlsldavq_s16(<8 x i16> %a, <8 x i16> %b) {742; CHECK-LABEL: test_vmlsldavq_s16:743; CHECK:       @ %bb.0: @ %entry744; CHECK-NEXT:    vmlsldav.s16 r0, r1, q0, q1745; CHECK-NEXT:    bx lr746entry:747  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)748  %1 = extractvalue { i32, i32 } %0, 1749  %2 = zext i32 %1 to i64750  %3 = shl i64 %2, 32751  %4 = extractvalue { i32, i32 } %0, 0752  %5 = zext i32 %4 to i64753  %6 = or i64 %3, %5754  ret i64 %6755}756 757define arm_aapcs_vfpcc i64 @test_vmlsldavq_s32(<4 x i32> %a, <4 x i32> %b) {758; CHECK-LABEL: test_vmlsldavq_s32:759; CHECK:       @ %bb.0: @ %entry760; CHECK-NEXT:    vmlsldav.s32 r0, r1, q0, q1761; CHECK-NEXT:    bx lr762entry:763  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)764  %1 = extractvalue { i32, i32 } %0, 1765  %2 = zext i32 %1 to i64766  %3 = shl i64 %2, 32767  %4 = extractvalue { i32, i32 } %0, 0768  %5 = zext i32 %4 to i64769  %6 = or i64 %3, %5770  ret i64 %6771}772 773define arm_aapcs_vfpcc i64 @test_vmlsldavxvq_s16(<8 x i16> %a, <8 x i16> %b) {774; CHECK-LABEL: test_vmlsldavxvq_s16:775; CHECK:       @ %bb.0: @ %entry776; CHECK-NEXT:    vmlsldavx.s16 r0, r1, q0, q1777; CHECK-NEXT:    bx lr778entry:779  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v8i16(i32 0, i32 1, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b)780  %1 = extractvalue { i32, i32 } %0, 1781  %2 = zext i32 %1 to i64782  %3 = shl i64 %2, 32783  %4 = extractvalue { i32, i32 } %0, 0784  %5 = zext i32 %4 to i64785  %6 = or i64 %3, %5786  ret i64 %6787}788 789define arm_aapcs_vfpcc i64 @test_vmlsldavxq_s32(<4 x i32> %a, <4 x i32> %b) {790; CHECK-LABEL: test_vmlsldavxq_s32:791; CHECK:       @ %bb.0: @ %entry792; CHECK-NEXT:    vmlsldavx.s32 r0, r1, q0, q1793; CHECK-NEXT:    bx lr794entry:795  %0 = call { i32, i32 } @llvm.arm.mve.vmlldava.v4i32(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)796  %1 = extractvalue { i32, i32 } %0, 1797  %2 = zext i32 %1 to i64798  %3 = shl i64 %2, 32799  %4 = extractvalue { i32, i32 } %0, 0800  %5 = zext i32 %4 to i64801  %6 = or i64 %3, %5802  ret i64 %6803}804 805define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_s32(<4 x i32> %a, <4 x i32> %b) {806; CHECK-LABEL: test_vrmlaldavhq_s32:807; CHECK:       @ %bb.0: @ %entry808; CHECK-NEXT:    vrmlalvh.s32 r0, r1, q0, q1809; CHECK-NEXT:    bx lr810entry:811  %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)812  %1 = extractvalue { i32, i32 } %0, 1813  %2 = zext i32 %1 to i64814  %3 = shl i64 %2, 32815  %4 = extractvalue { i32, i32 } %0, 0816  %5 = zext i32 %4 to i64817  %6 = or i64 %3, %5818  ret i64 %6819}820 821define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_u32(<4 x i32> %a, <4 x i32> %b) {822; CHECK-LABEL: test_vrmlaldavhq_u32:823; CHECK:       @ %bb.0: @ %entry824; CHECK-NEXT:    vrmlalvh.u32 r0, r1, q0, q1825; CHECK-NEXT:    bx lr826entry:827  %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)828  %1 = extractvalue { i32, i32 } %0, 1829  %2 = zext i32 %1 to i64830  %3 = shl i64 %2, 32831  %4 = extractvalue { i32, i32 } %0, 0832  %5 = zext i32 %4 to i64833  %6 = or i64 %3, %5834  ret i64 %6835}836 837define arm_aapcs_vfpcc i64 @test_vrmlaldavhxq_s32(<4 x i32> %a, <4 x i32> %b) {838; CHECK-LABEL: test_vrmlaldavhxq_s32:839; CHECK:       @ %bb.0: @ %entry840; CHECK-NEXT:    vrmlaldavhx.s32 r0, r1, q0, q1841; CHECK-NEXT:    bx lr842entry:843  %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)844  %1 = extractvalue { i32, i32 } %0, 1845  %2 = zext i32 %1 to i64846  %3 = shl i64 %2, 32847  %4 = extractvalue { i32, i32 } %0, 0848  %5 = zext i32 %4 to i64849  %6 = or i64 %3, %5850  ret i64 %6851}852 853define arm_aapcs_vfpcc i64 @test_vrmlsldavhq_s32(<4 x i32> %a, <4 x i32> %b) {854; CHECK-LABEL: test_vrmlsldavhq_s32:855; CHECK:       @ %bb.0: @ %entry856; CHECK-NEXT:    vrmlsldavh.s32 r0, r1, q0, q1857; CHECK-NEXT:    bx lr858entry:859  %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)860  %1 = extractvalue { i32, i32 } %0, 1861  %2 = zext i32 %1 to i64862  %3 = shl i64 %2, 32863  %4 = extractvalue { i32, i32 } %0, 0864  %5 = zext i32 %4 to i64865  %6 = or i64 %3, %5866  ret i64 %6867}868 869define arm_aapcs_vfpcc i64 @test_vrmlsldavhxq_s32(<4 x i32> %a, <4 x i32> %b) {870; CHECK-LABEL: test_vrmlsldavhxq_s32:871; CHECK:       @ %bb.0: @ %entry872; CHECK-NEXT:    vrmlsldavhx.s32 r0, r1, q0, q1873; CHECK-NEXT:    bx lr874entry:875  %0 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.v4i32(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b)876  %1 = extractvalue { i32, i32 } %0, 1877  %2 = zext i32 %1 to i64878  %3 = shl i64 %2, 32879  %4 = extractvalue { i32, i32 } %0, 0880  %5 = zext i32 %4 to i64881  %6 = or i64 %3, %5882  ret i64 %6883}884 885define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {886; CHECK-LABEL: test_vmlaldavq_p_s16:887; CHECK:       @ %bb.0: @ %entry888; CHECK-NEXT:    vmsr p0, r0889; CHECK-NEXT:    vpst890; CHECK-NEXT:    vmlalvt.s16 r0, r1, q0, q1891; CHECK-NEXT:    bx lr892entry:893  %0 = zext i16 %p to i32894  %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)895  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)896  %3 = extractvalue { i32, i32 } %2, 1897  %4 = zext i32 %3 to i64898  %5 = shl i64 %4, 32899  %6 = extractvalue { i32, i32 } %2, 0900  %7 = zext i32 %6 to i64901  %8 = or i64 %5, %7902  ret i64 %8903}904 905define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {906; CHECK-LABEL: test_vmlaldavq_p_s32:907; CHECK:       @ %bb.0: @ %entry908; CHECK-NEXT:    vmsr p0, r0909; CHECK-NEXT:    vpst910; CHECK-NEXT:    vmlalvt.s32 r0, r1, q0, q1911; CHECK-NEXT:    bx lr912entry:913  %0 = zext i16 %p to i32914  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)915  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)916  %3 = extractvalue { i32, i32 } %2, 1917  %4 = zext i32 %3 to i64918  %5 = shl i64 %4, 32919  %6 = extractvalue { i32, i32 } %2, 0920  %7 = zext i32 %6 to i64921  %8 = or i64 %5, %7922  ret i64 %8923}924 925define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_u16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {926; CHECK-LABEL: test_vmlaldavq_p_u16:927; CHECK:       @ %bb.0: @ %entry928; CHECK-NEXT:    vmsr p0, r0929; CHECK-NEXT:    vpst930; CHECK-NEXT:    vmlalvt.u16 r0, r1, q0, q1931; CHECK-NEXT:    bx lr932entry:933  %0 = zext i16 %p to i32934  %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)935  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 1, i32 0, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)936  %3 = extractvalue { i32, i32 } %2, 1937  %4 = zext i32 %3 to i64938  %5 = shl i64 %4, 32939  %6 = extractvalue { i32, i32 } %2, 0940  %7 = zext i32 %6 to i64941  %8 = or i64 %5, %7942  ret i64 %8943}944 945define arm_aapcs_vfpcc i64 @test_vmlaldavq_p_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {946; CHECK-LABEL: test_vmlaldavq_p_u32:947; CHECK:       @ %bb.0: @ %entry948; CHECK-NEXT:    vmsr p0, r0949; CHECK-NEXT:    vpst950; CHECK-NEXT:    vmlalvt.u32 r0, r1, q0, q1951; CHECK-NEXT:    bx lr952entry:953  %0 = zext i16 %p to i32954  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)955  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)956  %3 = extractvalue { i32, i32 } %2, 1957  %4 = zext i32 %3 to i64958  %5 = shl i64 %4, 32959  %6 = extractvalue { i32, i32 } %2, 0960  %7 = zext i32 %6 to i64961  %8 = or i64 %5, %7962  ret i64 %8963}964 965define arm_aapcs_vfpcc i64 @test_vmlaldavxq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {966; CHECK-LABEL: test_vmlaldavxq_p_s16:967; CHECK:       @ %bb.0: @ %entry968; CHECK-NEXT:    vmsr p0, r0969; CHECK-NEXT:    vpst970; CHECK-NEXT:    vmlaldavxt.s16 r0, r1, q0, q1971; CHECK-NEXT:    bx lr972entry:973  %0 = zext i16 %p to i32974  %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)975  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 0, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)976  %3 = extractvalue { i32, i32 } %2, 1977  %4 = zext i32 %3 to i64978  %5 = shl i64 %4, 32979  %6 = extractvalue { i32, i32 } %2, 0980  %7 = zext i32 %6 to i64981  %8 = or i64 %5, %7982  ret i64 %8983}984 985define arm_aapcs_vfpcc i64 @test_vmlaldavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {986; CHECK-LABEL: test_vmlaldavxq_p_s32:987; CHECK:       @ %bb.0: @ %entry988; CHECK-NEXT:    vmsr p0, r0989; CHECK-NEXT:    vpst990; CHECK-NEXT:    vmlaldavxt.s32 r0, r1, q0, q1991; CHECK-NEXT:    bx lr992entry:993  %0 = zext i16 %p to i32994  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)995  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)996  %3 = extractvalue { i32, i32 } %2, 1997  %4 = zext i32 %3 to i64998  %5 = shl i64 %4, 32999  %6 = extractvalue { i32, i32 } %2, 01000  %7 = zext i32 %6 to i641001  %8 = or i64 %5, %71002  ret i64 %81003}1004 1005define arm_aapcs_vfpcc i64 @test_vmlsldavq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {1006; CHECK-LABEL: test_vmlsldavq_p_s16:1007; CHECK:       @ %bb.0: @ %entry1008; CHECK-NEXT:    vmsr p0, r01009; CHECK-NEXT:    vpst1010; CHECK-NEXT:    vmlsldavt.s16 r0, r1, q0, q11011; CHECK-NEXT:    bx lr1012entry:1013  %0 = zext i16 %p to i321014  %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)1015  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 0, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)1016  %3 = extractvalue { i32, i32 } %2, 11017  %4 = zext i32 %3 to i641018  %5 = shl i64 %4, 321019  %6 = extractvalue { i32, i32 } %2, 01020  %7 = zext i32 %6 to i641021  %8 = or i64 %5, %71022  ret i64 %81023}1024 1025define arm_aapcs_vfpcc i64 @test_vmlsldavq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1026; CHECK-LABEL: test_vmlsldavq_p_s32:1027; CHECK:       @ %bb.0: @ %entry1028; CHECK-NEXT:    vmsr p0, r01029; CHECK-NEXT:    vpst1030; CHECK-NEXT:    vmlsldavt.s32 r0, r1, q0, q11031; CHECK-NEXT:    bx lr1032entry:1033  %0 = zext i16 %p to i321034  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1035  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1036  %3 = extractvalue { i32, i32 } %2, 11037  %4 = zext i32 %3 to i641038  %5 = shl i64 %4, 321039  %6 = extractvalue { i32, i32 } %2, 01040  %7 = zext i32 %6 to i641041  %8 = or i64 %5, %71042  ret i64 %81043}1044 1045define arm_aapcs_vfpcc i64 @test_vmlsldaxvq_p_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) {1046; CHECK-LABEL: test_vmlsldaxvq_p_s16:1047; CHECK:       @ %bb.0: @ %entry1048; CHECK-NEXT:    vmsr p0, r01049; CHECK-NEXT:    vpst1050; CHECK-NEXT:    vmlsldavxt.s16 r0, r1, q0, q11051; CHECK-NEXT:    bx lr1052entry:1053  %0 = zext i16 %p to i321054  %1 = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0)1055  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v8i16.v8i1(i32 0, i32 1, i32 1, i32 0, i32 0, <8 x i16> %a, <8 x i16> %b, <8 x i1> %1)1056  %3 = extractvalue { i32, i32 } %2, 11057  %4 = zext i32 %3 to i641058  %5 = shl i64 %4, 321059  %6 = extractvalue { i32, i32 } %2, 01060  %7 = zext i32 %6 to i641061  %8 = or i64 %5, %71062  ret i64 %81063}1064 1065define arm_aapcs_vfpcc i64 @test_vmlsldavxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1066; CHECK-LABEL: test_vmlsldavxq_p_s32:1067; CHECK:       @ %bb.0: @ %entry1068; CHECK-NEXT:    vmsr p0, r01069; CHECK-NEXT:    vpst1070; CHECK-NEXT:    vmlsldavxt.s32 r0, r1, q0, q11071; CHECK-NEXT:    bx lr1072entry:1073  %0 = zext i16 %p to i321074  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1075  %2 = call { i32, i32 } @llvm.arm.mve.vmlldava.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1076  %3 = extractvalue { i32, i32 } %2, 11077  %4 = zext i32 %3 to i641078  %5 = shl i64 %4, 321079  %6 = extractvalue { i32, i32 } %2, 01080  %7 = zext i32 %6 to i641081  %8 = or i64 %5, %71082  ret i64 %81083}1084 1085define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1086; CHECK-LABEL: test_vrmlaldavhq_p_s32:1087; CHECK:       @ %bb.0: @ %entry1088; CHECK-NEXT:    vmsr p0, r01089; CHECK-NEXT:    vpst1090; CHECK-NEXT:    vrmlalvht.s32 r0, r1, q0, q11091; CHECK-NEXT:    bx lr1092entry:1093  %0 = zext i16 %p to i321094  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1095  %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1096  %3 = extractvalue { i32, i32 } %2, 11097  %4 = zext i32 %3 to i641098  %5 = shl i64 %4, 321099  %6 = extractvalue { i32, i32 } %2, 01100  %7 = zext i32 %6 to i641101  %8 = or i64 %5, %71102  ret i64 %81103}1104 1105define arm_aapcs_vfpcc i64 @test_vrmlaldavhq_p_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1106; CHECK-LABEL: test_vrmlaldavhq_p_u32:1107; CHECK:       @ %bb.0: @ %entry1108; CHECK-NEXT:    vmsr p0, r01109; CHECK-NEXT:    vpst1110; CHECK-NEXT:    vrmlalvht.u32 r0, r1, q0, q11111; CHECK-NEXT:    bx lr1112entry:1113  %0 = zext i16 %p to i321114  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1115  %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 1, i32 0, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1116  %3 = extractvalue { i32, i32 } %2, 11117  %4 = zext i32 %3 to i641118  %5 = shl i64 %4, 321119  %6 = extractvalue { i32, i32 } %2, 01120  %7 = zext i32 %6 to i641121  %8 = or i64 %5, %71122  ret i64 %81123}1124 1125define arm_aapcs_vfpcc i64 @test_vrmlaldavhxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1126; CHECK-LABEL: test_vrmlaldavhxq_p_s32:1127; CHECK:       @ %bb.0: @ %entry1128; CHECK-NEXT:    vmsr p0, r01129; CHECK-NEXT:    vpst1130; CHECK-NEXT:    vrmlaldavhxt.s32 r0, r1, q0, q11131; CHECK-NEXT:    bx lr1132entry:1133  %0 = zext i16 %p to i321134  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1135  %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 0, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1136  %3 = extractvalue { i32, i32 } %2, 11137  %4 = zext i32 %3 to i641138  %5 = shl i64 %4, 321139  %6 = extractvalue { i32, i32 } %2, 01140  %7 = zext i32 %6 to i641141  %8 = or i64 %5, %71142  ret i64 %81143}1144 1145define arm_aapcs_vfpcc i64 @test_vrmlsldavhq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1146; CHECK-LABEL: test_vrmlsldavhq_p_s32:1147; CHECK:       @ %bb.0: @ %entry1148; CHECK-NEXT:    vmsr p0, r01149; CHECK-NEXT:    vpst1150; CHECK-NEXT:    vrmlsldavht.s32 r0, r1, q0, q11151; CHECK-NEXT:    bx lr1152entry:1153  %0 = zext i16 %p to i321154  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1155  %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 0, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1156  %3 = extractvalue { i32, i32 } %2, 11157  %4 = zext i32 %3 to i641158  %5 = shl i64 %4, 321159  %6 = extractvalue { i32, i32 } %2, 01160  %7 = zext i32 %6 to i641161  %8 = or i64 %5, %71162  ret i64 %81163}1164 1165define arm_aapcs_vfpcc i64 @test_vrmlsldavhxq_p_s32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) {1166; CHECK-LABEL: test_vrmlsldavhxq_p_s32:1167; CHECK:       @ %bb.0: @ %entry1168; CHECK-NEXT:    vmsr p0, r01169; CHECK-NEXT:    vpst1170; CHECK-NEXT:    vrmlsldavhxt.s32 r0, r1, q0, q11171; CHECK-NEXT:    bx lr1172entry:1173  %0 = zext i16 %p to i321174  %1 = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0)1175  %2 = call { i32, i32 } @llvm.arm.mve.vrmlldavha.predicated.v4i32.v4i1(i32 0, i32 1, i32 1, i32 0, i32 0, <4 x i32> %a, <4 x i32> %b, <4 x i1> %1)1176  %3 = extractvalue { i32, i32 } %2, 11177  %4 = zext i32 %3 to i641178  %5 = shl i64 %4, 321179  %6 = extractvalue { i32, i32 } %2, 01180  %7 = zext i32 %6 to i641181  %8 = or i64 %5, %71182  ret i64 %81183}1184