[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-intrinsics-matmul-int8.ll
blob2d672c86cb6ac99f6b3897daa6c5ea406ac4604d
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve,+i8mm -asm-verbose=0 < %s -o - | FileCheck %s
3 define <vscale x 4 x i32> @smmla(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
4 entry:
5 ; CHECK-LABEL: smmla:
6 ; CHECK-NEXT:  smmla   z0.s, z1.b, z2.b
7 ; CHECK-NEXT:  ret
8   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.smmla.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
9   ret <vscale x 4 x i32> %val
12 define <vscale x 4 x i32> @ummla(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
13 entry:
14 ; CHECK-LABEL: ummla:
15 ; CHECK-NEXT:  ummla   z0.s, z1.b, z2.b
16 ; CHECK-NEXT:  ret
17   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ummla.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
18   ret <vscale x 4 x i32> %val
21 define <vscale x 4 x i32> @usmmla(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
22 entry:
23 ; CHECK-LABEL: usmmla:
24 ; CHECK-NEXT:  usmmla   z0.s, z1.b, z2.b
25 ; CHECK-NEXT:  ret
26   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usmmla.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
27   ret <vscale x 4 x i32> %val
30 define <vscale x 4 x i32> @usdot(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
31 entry:
32 ; CHECK-LABEL: usdot:
33 ; CHECK-NEXT:  usdot   z0.s, z1.b, z2.b
34 ; CHECK-NEXT:  ret
35   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usdot.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
36   ret <vscale x 4 x i32> %val
39 define <vscale x 4 x i32> @usdot_lane_0(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
40 entry:
41 ; CHECK-LABEL: usdot_lane_0:
42 ; CHECK-NEXT:  usdot   z0.s, z1.b, z2.b[0]
43 ; CHECK-NEXT:  ret
44   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usdot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 0)
45   ret <vscale x 4 x i32> %val
48 define <vscale x 4 x i32> @usdot_lane_1(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
49 entry:
50 ; CHECK-LABEL: usdot_lane_1:
51 ; CHECK-NEXT:  usdot   z0.s, z1.b, z2.b[1]
52 ; CHECK-NEXT:  ret
53   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usdot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 1)
54   ret <vscale x 4 x i32> %val
57 define <vscale x 4 x i32> @usdot_lane_2(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
58 entry:
59 ; CHECK-LABEL: usdot_lane_2:
60 ; CHECK-NEXT:  usdot   z0.s, z1.b, z2.b[2]
61 ; CHECK-NEXT:  ret
62   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usdot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 2)
63   ret <vscale x 4 x i32> %val
66 define <vscale x 4 x i32> @usdot_lane_3(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
67 entry:
68 ; CHECK-LABEL: usdot_lane_3:
69 ; CHECK-NEXT:  usdot   z0.s, z1.b, z2.b[3]
70 ; CHECK-NEXT:  ret
71   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.usdot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 3)
72   ret <vscale x 4 x i32> %val
75 define <vscale x 4 x i32> @sudot_lane_0(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
76 entry:
77 ; CHECK-LABEL: sudot_lane_0:
78 ; CHECK-NEXT:  sudot   z0.s, z1.b, z2.b[0]
79 ; CHECK-NEXT:  ret
80   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sudot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 0)
81   ret <vscale x 4 x i32> %val
84 define <vscale x 4 x i32> @sudot_lane_1(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
85 entry:
86 ; CHECK-LABEL: sudot_lane_1:
87 ; CHECK-NEXT:  sudot   z0.s, z1.b, z2.b[1]
88 ; CHECK-NEXT:  ret
89   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sudot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 1)
90   ret <vscale x 4 x i32> %val
93 define <vscale x 4 x i32> @sudot_lane_2(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
94 entry:
95 ; CHECK-LABEL: sudot_lane_2:
96 ; CHECK-NEXT:  sudot   z0.s, z1.b, z2.b[2]
97 ; CHECK-NEXT:  ret
98   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sudot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 2)
99   ret <vscale x 4 x i32> %val
102 define <vscale x 4 x i32> @sudot_lane_3(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) nounwind {
103 entry:
104 ; CHECK-LABEL: sudot_lane_3:
105 ; CHECK-NEXT:  sudot   z0.s, z1.b, z2.b[3]
106 ; CHECK-NEXT:  ret
107   %val = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sudot.lane.nxv4i32(<vscale x 4 x i32> %r, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 3)
108   ret <vscale x 4 x i32> %val
112 declare <vscale x 4 x i32> @llvm.aarch64.sve.smmla.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>)
113 declare <vscale x 4 x i32> @llvm.aarch64.sve.ummla.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>)
114 declare <vscale x 4 x i32> @llvm.aarch64.sve.usmmla.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>)
116 declare <vscale x 4 x i32> @llvm.aarch64.sve.usdot.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>)
117 declare <vscale x 4 x i32> @llvm.aarch64.sve.usdot.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>, i32)
118 declare <vscale x 4 x i32> @llvm.aarch64.sve.sudot.lane.nxv4i32(<vscale x 4 x i32>, <vscale x 16 x i8>, <vscale x 16 x i8>, i32)