xref: /llvm-project/llvm/test/CodeGen/AArch64/sve-intrinsics-matmul-int8.ll (revision fadea4413ecbfffa4d28ad8298e0628165b543f1)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve,+i8mm < %s -o - | FileCheck %s
3
4define <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 {
5; CHECK-LABEL: smmla:
6; CHECK:       // %bb.0: // %entry
7; CHECK-NEXT:    smmla z0.s, z1.b, z2.b
8; CHECK-NEXT:    ret
9entry:
10  %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)
11  ret <vscale x 4 x i32> %val
12}
13
14define <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 {
15; CHECK-LABEL: ummla:
16; CHECK:       // %bb.0: // %entry
17; CHECK-NEXT:    ummla z0.s, z1.b, z2.b
18; CHECK-NEXT:    ret
19entry:
20  %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)
21  ret <vscale x 4 x i32> %val
22}
23
24define <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 {
25; CHECK-LABEL: usmmla:
26; CHECK:       // %bb.0: // %entry
27; CHECK-NEXT:    usmmla z0.s, z1.b, z2.b
28; CHECK-NEXT:    ret
29entry:
30  %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)
31  ret <vscale x 4 x i32> %val
32}
33
34define <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 {
35; CHECK-LABEL: usdot:
36; CHECK:       // %bb.0: // %entry
37; CHECK-NEXT:    usdot z0.s, z1.b, z2.b
38; CHECK-NEXT:    ret
39entry:
40  %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)
41  ret <vscale x 4 x i32> %val
42}
43
44define <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 {
45; CHECK-LABEL: usdot_lane_0:
46; CHECK:       // %bb.0: // %entry
47; CHECK-NEXT:    usdot z0.s, z1.b, z2.b[0]
48; CHECK-NEXT:    ret
49entry:
50  %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)
51  ret <vscale x 4 x i32> %val
52}
53
54define <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 {
55; CHECK-LABEL: usdot_lane_1:
56; CHECK:       // %bb.0: // %entry
57; CHECK-NEXT:    usdot z0.s, z1.b, z2.b[1]
58; CHECK-NEXT:    ret
59entry:
60  %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)
61  ret <vscale x 4 x i32> %val
62}
63
64define <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 {
65; CHECK-LABEL: usdot_lane_2:
66; CHECK:       // %bb.0: // %entry
67; CHECK-NEXT:    usdot z0.s, z1.b, z2.b[2]
68; CHECK-NEXT:    ret
69entry:
70  %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)
71  ret <vscale x 4 x i32> %val
72}
73
74define <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 {
75; CHECK-LABEL: usdot_lane_3:
76; CHECK:       // %bb.0: // %entry
77; CHECK-NEXT:    usdot z0.s, z1.b, z2.b[3]
78; CHECK-NEXT:    ret
79entry:
80  %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)
81  ret <vscale x 4 x i32> %val
82}
83
84define <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 {
85; CHECK-LABEL: sudot_lane_0:
86; CHECK:       // %bb.0: // %entry
87; CHECK-NEXT:    sudot z0.s, z1.b, z2.b[0]
88; CHECK-NEXT:    ret
89entry:
90  %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)
91  ret <vscale x 4 x i32> %val
92}
93
94define <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 {
95; CHECK-LABEL: sudot_lane_1:
96; CHECK:       // %bb.0: // %entry
97; CHECK-NEXT:    sudot z0.s, z1.b, z2.b[1]
98; CHECK-NEXT:    ret
99entry:
100  %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)
101  ret <vscale x 4 x i32> %val
102}
103
104define <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 {
105; CHECK-LABEL: sudot_lane_2:
106; CHECK:       // %bb.0: // %entry
107; CHECK-NEXT:    sudot z0.s, z1.b, z2.b[2]
108; CHECK-NEXT:    ret
109entry:
110  %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)
111  ret <vscale x 4 x i32> %val
112}
113
114define <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 {
115; CHECK-LABEL: sudot_lane_3:
116; CHECK:       // %bb.0: // %entry
117; CHECK-NEXT:    sudot z0.s, z1.b, z2.b[3]
118; CHECK-NEXT:    ret
119entry:
120  %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)
121  ret <vscale x 4 x i32> %val
122}
123
124
125declare <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>)
126declare <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>)
127declare <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>)
128
129declare <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>)
130declare <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)
131declare <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)
132
133