xref: /llvm-project/llvm/test/CodeGen/Thumb2/mve-intrinsics/vmullbq.ll (revision ab0c5cea0b1a9a1227fea840184dd7b5983c22a5)
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