12eb61fa5SMark Murray; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 22eb61fa5SMark Murray; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s 32eb61fa5SMark Murray 42eb61fa5SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vmullbq_int_u8(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 52eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_u8: 62eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 734817e04SSimon Tatham; CHECK-NEXT: vmullb.u8 q0, q0, q1 82eb61fa5SMark Murray; CHECK-NEXT: bx lr 92eb61fa5SMark Murrayentry: 1034817e04SSimon Tatham %0 = tail call <8 x i16> @llvm.arm.mve.vmull.v8i16.v16i8(<16 x i8> %a, <16 x i8> %b, i32 1, i32 0) 112eb61fa5SMark Murray ret <8 x i16> %0 122eb61fa5SMark Murray} 132eb61fa5SMark Murray 1434817e04SSimon Tathamdeclare <8 x i16> @llvm.arm.mve.vmull.v8i16.v16i8(<16 x i8>, <16 x i8>, i32, i32) #1 152eb61fa5SMark Murray 162eb61fa5SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vmullbq_int_s16(<8 x i16> %a, <8 x i16> %b) local_unnamed_addr #0 { 172eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_s16: 182eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 192eb61fa5SMark Murray; CHECK-NEXT: vmullb.s16 q0, q0, q1 202eb61fa5SMark Murray; CHECK-NEXT: bx lr 212eb61fa5SMark Murrayentry: 2234817e04SSimon Tatham %0 = tail call <4 x i32> @llvm.arm.mve.vmull.v4i32.v8i16(<8 x i16> %a, <8 x i16> %b, i32 0, i32 0) 232eb61fa5SMark Murray ret <4 x i32> %0 242eb61fa5SMark Murray} 252eb61fa5SMark Murray 2634817e04SSimon Tathamdeclare <4 x i32> @llvm.arm.mve.vmull.v4i32.v8i16(<8 x i16>, <8 x i16>, i32, i32) #1 272eb61fa5SMark Murray 282eb61fa5SMark Murraydefine arm_aapcs_vfpcc <2 x i64> @test_vmullbq_int_u32(<4 x i32> %a, <4 x i32> %b) local_unnamed_addr #0 { 292eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_u32: 302eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 3134817e04SSimon Tatham; CHECK-NEXT: vmullb.u32 q2, q0, q1 322eb61fa5SMark Murray; CHECK-NEXT: vmov q0, q2 332eb61fa5SMark Murray; CHECK-NEXT: bx lr 342eb61fa5SMark Murrayentry: 3534817e04SSimon Tatham %0 = tail call <2 x i64> @llvm.arm.mve.vmull.v2i64.v4i32(<4 x i32> %a, <4 x i32> %b, i32 1, i32 0) 362eb61fa5SMark Murray ret <2 x i64> %0 372eb61fa5SMark Murray} 382eb61fa5SMark Murray 3934817e04SSimon Tathamdeclare <2 x i64> @llvm.arm.mve.vmull.v2i64.v4i32(<4 x i32>, <4 x i32>, i32, i32) #1 402eb61fa5SMark Murray 412eb61fa5SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vmullbq_poly_p16(<8 x i16> %a, <8 x i16> %b) local_unnamed_addr #0 { 422eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_poly_p16: 432eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 442eb61fa5SMark Murray; CHECK-NEXT: vmullb.p16 q0, q0, q1 452eb61fa5SMark Murray; CHECK-NEXT: bx lr 462eb61fa5SMark Murrayentry: 472eb61fa5SMark Murray %0 = tail call <4 x i32> @llvm.arm.mve.vmull.poly.v4i32.v8i16(<8 x i16> %a, <8 x i16> %b, i32 0) 482eb61fa5SMark Murray ret <4 x i32> %0 492eb61fa5SMark Murray} 502eb61fa5SMark Murray 512eb61fa5SMark Murraydeclare <4 x i32> @llvm.arm.mve.vmull.poly.v4i32.v8i16(<8 x i16>, <8 x i16>, i32) #1 522eb61fa5SMark Murray 53228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vmullbq_int_m_s8(<8 x i16> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #0 { 542eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_m_s8: 552eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 562eb61fa5SMark Murray; CHECK-NEXT: vmsr p0, r0 572eb61fa5SMark Murray; CHECK-NEXT: vpst 582eb61fa5SMark Murray; CHECK-NEXT: vmullbt.s8 q0, q1, q2 592eb61fa5SMark Murray; CHECK-NEXT: bx lr 602eb61fa5SMark Murrayentry: 612eb61fa5SMark Murray %0 = zext i16 %p to i32 62461fd94fSMikhail Maltsev %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 63461fd94fSMikhail Maltsev %2 = tail call <8 x i16> @llvm.arm.mve.mull.int.predicated.v8i16.v16i8.v8i1(<16 x i8> %a, <16 x i8> %b, i32 0, i32 0, <8 x i1> %1, <8 x i16> %inactive) 642eb61fa5SMark Murray ret <8 x i16> %2 652eb61fa5SMark Murray} 662eb61fa5SMark Murray 67461fd94fSMikhail Maltsevdeclare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32) #1 682eb61fa5SMark Murray 69461fd94fSMikhail Maltsevdeclare <8 x i16> @llvm.arm.mve.mull.int.predicated.v8i16.v16i8.v8i1(<16 x i8>, <16 x i8>, i32, i32, <8 x i1>, <8 x i16>) #1 702eb61fa5SMark Murray 71461fd94fSMikhail Maltsevdefine arm_aapcs_vfpcc <4 x i32> @test_vmullbq_int_m_u16(<4 x i32> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) #0 { 722eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_m_u16: 732eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 742eb61fa5SMark Murray; CHECK-NEXT: vmsr p0, r0 752eb61fa5SMark Murray; CHECK-NEXT: vpst 7634817e04SSimon Tatham; CHECK-NEXT: vmullbt.u16 q0, q1, q2 772eb61fa5SMark Murray; CHECK-NEXT: bx lr 782eb61fa5SMark Murrayentry: 792eb61fa5SMark Murray %0 = zext i16 %p to i32 80461fd94fSMikhail Maltsev %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 81461fd94fSMikhail Maltsev %2 = tail call <4 x i32> @llvm.arm.mve.mull.int.predicated.v4i32.v8i16.v4i1(<8 x i16> %a, <8 x i16> %b, i32 1, i32 0, <4 x i1> %1, <4 x i32> %inactive) 822eb61fa5SMark Murray ret <4 x i32> %2 832eb61fa5SMark Murray} 842eb61fa5SMark Murray 85461fd94fSMikhail Maltsevdeclare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32) #1 862eb61fa5SMark Murray 87461fd94fSMikhail Maltsevdeclare <4 x i32> @llvm.arm.mve.mull.int.predicated.v4i32.v8i16.v4i1(<8 x i16>, <8 x i16>, i32, i32, <4 x i1>, <4 x i32>) #1 882eb61fa5SMark Murray 89228c7407SMark Murraydefine arm_aapcs_vfpcc <2 x i64> @test_vmullbq_int_m_s32(<2 x i64> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #0 { 902eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_int_m_s32: 912eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 922eb61fa5SMark Murray; CHECK-NEXT: vmsr p0, r0 932eb61fa5SMark Murray; CHECK-NEXT: vpst 942eb61fa5SMark Murray; CHECK-NEXT: vmullbt.s32 q0, q1, q2 952eb61fa5SMark Murray; CHECK-NEXT: bx lr 962eb61fa5SMark Murrayentry: 972eb61fa5SMark Murray %0 = zext i16 %p to i32 98*ab0c5ceaSDavid Green %1 = tail call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %0) 99*ab0c5ceaSDavid Green %2 = tail call <2 x i64> @llvm.arm.mve.mull.int.predicated.v2i64.v4i32.v2i1(<4 x i32> %a, <4 x i32> %b, i32 0, i32 0, <2 x i1> %1, <2 x i64> %inactive) 1002eb61fa5SMark Murray ret <2 x i64> %2 1012eb61fa5SMark Murray} 1022eb61fa5SMark Murray 103*ab0c5ceaSDavid Greendeclare <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32) 104*ab0c5ceaSDavid Greendeclare <2 x i64> @llvm.arm.mve.mull.int.predicated.v2i64.v4i32.v2i1(<4 x i32>, <4 x i32>, i32, i32, <2 x i1>, <2 x i64>) #1 1052eb61fa5SMark Murray 106228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vmullbq_poly_m_p8(<8 x i16> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #0 { 1072eb61fa5SMark Murray; CHECK-LABEL: test_vmullbq_poly_m_p8: 1082eb61fa5SMark Murray; CHECK: @ %bb.0: @ %entry 1092eb61fa5SMark Murray; CHECK-NEXT: vmsr p0, r0 1102eb61fa5SMark Murray; CHECK-NEXT: vpst 1112eb61fa5SMark Murray; CHECK-NEXT: vmullbt.p8 q0, q1, q2 1122eb61fa5SMark Murray; CHECK-NEXT: bx lr 1132eb61fa5SMark Murrayentry: 1142eb61fa5SMark Murray %0 = zext i16 %p to i32 115461fd94fSMikhail Maltsev %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 116461fd94fSMikhail Maltsev %2 = tail call <8 x i16> @llvm.arm.mve.mull.poly.predicated.v8i16.v16i8.v8i1(<16 x i8> %a, <16 x i8> %b, i32 0, <8 x i1> %1, <8 x i16> %inactive) 1172eb61fa5SMark Murray ret <8 x i16> %2 1182eb61fa5SMark Murray} 1192eb61fa5SMark Murray 120461fd94fSMikhail Maltsevdeclare <8 x i16> @llvm.arm.mve.mull.poly.predicated.v8i16.v16i8.v8i1(<16 x i8>, <16 x i8>, i32, <8 x i1>, <8 x i16>) #1 121228c7407SMark Murray 122228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vmullbq_int_x_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #0 { 123228c7407SMark Murray; CHECK-LABEL: test_vmullbq_int_x_u8: 124228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 125228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 126228c7407SMark Murray; CHECK-NEXT: vpst 12734817e04SSimon Tatham; CHECK-NEXT: vmullbt.u8 q0, q0, q1 128228c7407SMark Murray; CHECK-NEXT: bx lr 129228c7407SMark Murrayentry: 130228c7407SMark Murray %0 = zext i16 %p to i32 131461fd94fSMikhail Maltsev %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 132461fd94fSMikhail Maltsev %2 = tail call <8 x i16> @llvm.arm.mve.mull.int.predicated.v8i16.v16i8.v8i1(<16 x i8> %a, <16 x i8> %b, i32 1, i32 0, <8 x i1> %1, <8 x i16> undef) 133228c7407SMark Murray ret <8 x i16> %2 134228c7407SMark Murray} 135228c7407SMark Murray 136228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vmullbq_int_x_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #0 { 137228c7407SMark Murray; CHECK-LABEL: test_vmullbq_int_x_s16: 138228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 139228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 140228c7407SMark Murray; CHECK-NEXT: vpst 141228c7407SMark Murray; CHECK-NEXT: vmullbt.s16 q0, q0, q1 142228c7407SMark Murray; CHECK-NEXT: bx lr 143228c7407SMark Murrayentry: 144228c7407SMark Murray %0 = zext i16 %p to i32 145461fd94fSMikhail Maltsev %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 146461fd94fSMikhail Maltsev %2 = tail call <4 x i32> @llvm.arm.mve.mull.int.predicated.v4i32.v8i16.v4i1(<8 x i16> %a, <8 x i16> %b, i32 0, i32 0, <4 x i1> %1, <4 x i32> undef) 147228c7407SMark Murray ret <4 x i32> %2 148228c7407SMark Murray} 149228c7407SMark Murray 150228c7407SMark Murraydefine arm_aapcs_vfpcc <2 x i64> @test_vmullbq_int_x_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #0 { 151228c7407SMark Murray; CHECK-LABEL: test_vmullbq_int_x_u32: 152228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 153228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 154228c7407SMark Murray; CHECK-NEXT: vpst 15534817e04SSimon Tatham; CHECK-NEXT: vmullbt.u32 q2, q0, q1 156228c7407SMark Murray; CHECK-NEXT: vmov q0, q2 157228c7407SMark Murray; CHECK-NEXT: bx lr 158228c7407SMark Murrayentry: 159228c7407SMark Murray %0 = zext i16 %p to i32 160*ab0c5ceaSDavid Green %1 = tail call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %0) 161*ab0c5ceaSDavid Green %2 = tail call <2 x i64> @llvm.arm.mve.mull.int.predicated.v2i64.v4i32.v2i1(<4 x i32> %a, <4 x i32> %b, i32 1, i32 0, <2 x i1> %1, <2 x i64> undef) 162228c7407SMark Murray ret <2 x i64> %2 163228c7407SMark Murray} 164228c7407SMark Murray 165228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vmullbq_poly_x_p16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #0 { 166228c7407SMark Murray; CHECK-LABEL: test_vmullbq_poly_x_p16: 167228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 168228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 169228c7407SMark Murray; CHECK-NEXT: vpst 170228c7407SMark Murray; CHECK-NEXT: vmullbt.p16 q0, q0, q1 171228c7407SMark Murray; CHECK-NEXT: bx lr 172228c7407SMark Murrayentry: 173228c7407SMark Murray %0 = zext i16 %p to i32 174461fd94fSMikhail Maltsev %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 175461fd94fSMikhail Maltsev %2 = tail call <4 x i32> @llvm.arm.mve.mull.poly.predicated.v4i32.v8i16.v4i1(<8 x i16> %a, <8 x i16> %b, i32 0, <4 x i1> %1, <4 x i32> undef) 176228c7407SMark Murray ret <4 x i32> %2 177228c7407SMark Murray} 178228c7407SMark Murray 179461fd94fSMikhail Maltsevdeclare <4 x i32> @llvm.arm.mve.mull.poly.predicated.v4i32.v8i16.v4i1(<8 x i16>, <8 x i16>, i32, <4 x i1>, <4 x i32>) #1 180