xref: /llvm-project/llvm/test/CodeGen/RISCV/xcvmac.ll (revision 6441df3b5930ff9f8b3b9af6fd5d2684cf9a337b)
1*6441df3bSrealqhc; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*6441df3bSrealqhc; RUN: llc -mtriple=riscv32 -mattr=+m -mattr=+xcvmac -verify-machineinstrs < %s \
3*6441df3bSrealqhc; RUN:   | FileCheck %s
4*6441df3bSrealqhc
5*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mac(i32, i32, i32)
6*6441df3bSrealqhc
7*6441df3bSrealqhcdefine i32 @test.mac(i32 %a, i32 %b, i32 %c) {
8*6441df3bSrealqhc; CHECK-LABEL: test.mac:
9*6441df3bSrealqhc; CHECK:       # %bb.0:
10*6441df3bSrealqhc; CHECK-NEXT:    cv.mac a2, a0, a1
11*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
12*6441df3bSrealqhc; CHECK-NEXT:    ret
13*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mac(i32 %a, i32 %b, i32 %c)
14*6441df3bSrealqhc  ret i32 %1
15*6441df3bSrealqhc}
16*6441df3bSrealqhc
17*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.msu(i32, i32, i32)
18*6441df3bSrealqhc
19*6441df3bSrealqhcdefine i32 @test.msu(i32 %a, i32 %b, i32 %c) {
20*6441df3bSrealqhc; CHECK-LABEL: test.msu:
21*6441df3bSrealqhc; CHECK:       # %bb.0:
22*6441df3bSrealqhc; CHECK-NEXT:    cv.msu a2, a0, a1
23*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
24*6441df3bSrealqhc; CHECK-NEXT:    ret
25*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.msu(i32 %a, i32 %b, i32 %c)
26*6441df3bSrealqhc  ret i32 %1
27*6441df3bSrealqhc}
28*6441df3bSrealqhc
29*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.muluN(i32, i32, i32)
30*6441df3bSrealqhc
31*6441df3bSrealqhcdefine i32 @test.muluN(i32 %a, i32 %b) {
32*6441df3bSrealqhc; CHECK-LABEL: test.muluN:
33*6441df3bSrealqhc; CHECK:       # %bb.0:
34*6441df3bSrealqhc; CHECK-NEXT:    cv.mulun a0, a0, a1, 5
35*6441df3bSrealqhc; CHECK-NEXT:    ret
36*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.muluN(i32 %a, i32 %b, i32 5)
37*6441df3bSrealqhc  ret i32 %1
38*6441df3bSrealqhc}
39*6441df3bSrealqhc
40*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhuN(i32, i32, i32)
41*6441df3bSrealqhc
42*6441df3bSrealqhcdefine i32 @test.mulhhuN(i32 %a, i32 %b) {
43*6441df3bSrealqhc; CHECK-LABEL: test.mulhhuN:
44*6441df3bSrealqhc; CHECK:       # %bb.0:
45*6441df3bSrealqhc; CHECK-NEXT:    cv.mulhhun a0, a0, a1, 5
46*6441df3bSrealqhc; CHECK-NEXT:    ret
47*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulhhuN(i32 %a, i32 %b, i32 5)
48*6441df3bSrealqhc  ret i32 %1
49*6441df3bSrealqhc}
50*6441df3bSrealqhc
51*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulsN(i32, i32, i32)
52*6441df3bSrealqhc
53*6441df3bSrealqhcdefine i32 @test.mulsN(i32 %a, i32 %b) {
54*6441df3bSrealqhc; CHECK-LABEL: test.mulsN:
55*6441df3bSrealqhc; CHECK:       # %bb.0:
56*6441df3bSrealqhc; CHECK-NEXT:    cv.mulsn a0, a0, a1, 5
57*6441df3bSrealqhc; CHECK-NEXT:    ret
58*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulsN(i32 %a, i32 %b, i32 5)
59*6441df3bSrealqhc  ret i32 %1
60*6441df3bSrealqhc}
61*6441df3bSrealqhc
62*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhsN(i32, i32, i32)
63*6441df3bSrealqhc
64*6441df3bSrealqhcdefine i32 @test.mulhhsN(i32 %a, i32 %b) {
65*6441df3bSrealqhc; CHECK-LABEL: test.mulhhsN:
66*6441df3bSrealqhc; CHECK:       # %bb.0:
67*6441df3bSrealqhc; CHECK-NEXT:    cv.mulhhsn a0, a0, a1, 5
68*6441df3bSrealqhc; CHECK-NEXT:    ret
69*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulhhsN(i32 %a, i32 %b, i32 5)
70*6441df3bSrealqhc  ret i32 %1
71*6441df3bSrealqhc}
72*6441df3bSrealqhc
73*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.muluRN(i32, i32, i32)
74*6441df3bSrealqhc
75*6441df3bSrealqhcdefine i32 @test.muluRN(i32 %a, i32 %b) {
76*6441df3bSrealqhc; CHECK-LABEL: test.muluRN:
77*6441df3bSrealqhc; CHECK:       # %bb.0:
78*6441df3bSrealqhc; CHECK-NEXT:    cv.mulurn a0, a0, a1, 5
79*6441df3bSrealqhc; CHECK-NEXT:    ret
80*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.muluRN(i32 %a, i32 %b, i32 5)
81*6441df3bSrealqhc  ret i32 %1
82*6441df3bSrealqhc}
83*6441df3bSrealqhc
84*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhuRN(i32, i32, i32)
85*6441df3bSrealqhc
86*6441df3bSrealqhcdefine i32 @test.mulhhuRN(i32 %a, i32 %b) {
87*6441df3bSrealqhc; CHECK-LABEL: test.mulhhuRN:
88*6441df3bSrealqhc; CHECK:       # %bb.0:
89*6441df3bSrealqhc; CHECK-NEXT:    cv.mulhhurn a0, a0, a1, 5
90*6441df3bSrealqhc; CHECK-NEXT:    ret
91*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulhhuRN(i32 %a, i32 %b, i32 5)
92*6441df3bSrealqhc  ret i32 %1
93*6441df3bSrealqhc}
94*6441df3bSrealqhc
95*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulsRN(i32, i32, i32)
96*6441df3bSrealqhc
97*6441df3bSrealqhcdefine i32 @test.mulsRN(i32 %a, i32 %b) {
98*6441df3bSrealqhc; CHECK-LABEL: test.mulsRN:
99*6441df3bSrealqhc; CHECK:       # %bb.0:
100*6441df3bSrealqhc; CHECK-NEXT:    cv.mulsrn a0, a0, a1, 5
101*6441df3bSrealqhc; CHECK-NEXT:    ret
102*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulsRN(i32 %a, i32 %b, i32 5)
103*6441df3bSrealqhc  ret i32 %1
104*6441df3bSrealqhc}
105*6441df3bSrealqhc
106*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhsRN(i32, i32, i32)
107*6441df3bSrealqhc
108*6441df3bSrealqhcdefine i32 @test.mulhhsRN(i32 %a, i32 %b) {
109*6441df3bSrealqhc; CHECK-LABEL: test.mulhhsRN:
110*6441df3bSrealqhc; CHECK:       # %bb.0:
111*6441df3bSrealqhc; CHECK-NEXT:    cv.mulhhsrn a0, a0, a1, 5
112*6441df3bSrealqhc; CHECK-NEXT:    ret
113*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.mulhhsRN(i32 %a, i32 %b, i32 5)
114*6441df3bSrealqhc  ret i32 %1
115*6441df3bSrealqhc}
116*6441df3bSrealqhc
117*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macuN(i32, i32, i32, i32)
118*6441df3bSrealqhc
119*6441df3bSrealqhcdefine i32 @test.macuN(i32 %a, i32 %b, i32 %c) {
120*6441df3bSrealqhc; CHECK-LABEL: test.macuN:
121*6441df3bSrealqhc; CHECK:       # %bb.0:
122*6441df3bSrealqhc; CHECK-NEXT:    cv.macun a2, a0, a1, 5
123*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
124*6441df3bSrealqhc; CHECK-NEXT:    ret
125*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.macuN(i32 %a, i32 %b, i32 %c, i32 5)
126*6441df3bSrealqhc  ret i32 %1
127*6441df3bSrealqhc}
128*6441df3bSrealqhc
129*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhuN(i32, i32, i32, i32)
130*6441df3bSrealqhc
131*6441df3bSrealqhcdefine i32 @test.machhuN(i32 %a, i32 %b, i32 %c) {
132*6441df3bSrealqhc; CHECK-LABEL: test.machhuN:
133*6441df3bSrealqhc; CHECK:       # %bb.0:
134*6441df3bSrealqhc; CHECK-NEXT:    cv.machhun a2, a0, a1, 5
135*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
136*6441df3bSrealqhc; CHECK-NEXT:    ret
137*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.machhuN(i32 %a, i32 %b, i32 %c, i32 5)
138*6441df3bSrealqhc  ret i32 %1
139*6441df3bSrealqhc}
140*6441df3bSrealqhc
141*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macsN(i32, i32, i32, i32)
142*6441df3bSrealqhc
143*6441df3bSrealqhcdefine i32 @test.macsN(i32 %a, i32 %b, i32 %c) {
144*6441df3bSrealqhc; CHECK-LABEL: test.macsN:
145*6441df3bSrealqhc; CHECK:       # %bb.0:
146*6441df3bSrealqhc; CHECK-NEXT:    cv.macsn a2, a0, a1, 5
147*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
148*6441df3bSrealqhc; CHECK-NEXT:    ret
149*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.macsN(i32 %a, i32 %b, i32 %c, i32 5)
150*6441df3bSrealqhc  ret i32 %1
151*6441df3bSrealqhc}
152*6441df3bSrealqhc
153*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhsN(i32, i32, i32, i32)
154*6441df3bSrealqhc
155*6441df3bSrealqhcdefine i32 @test.machhsN(i32 %a, i32 %b, i32 %c) {
156*6441df3bSrealqhc; CHECK-LABEL: test.machhsN:
157*6441df3bSrealqhc; CHECK:       # %bb.0:
158*6441df3bSrealqhc; CHECK-NEXT:    cv.machhsn a2, a0, a1, 5
159*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
160*6441df3bSrealqhc; CHECK-NEXT:    ret
161*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.machhsN(i32 %a, i32 %b, i32 %c, i32 5)
162*6441df3bSrealqhc  ret i32 %1
163*6441df3bSrealqhc}
164*6441df3bSrealqhc
165*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macuRN(i32, i32, i32, i32)
166*6441df3bSrealqhc
167*6441df3bSrealqhcdefine i32 @test.macuRN(i32 %a, i32 %b, i32 %c) {
168*6441df3bSrealqhc; CHECK-LABEL: test.macuRN:
169*6441df3bSrealqhc; CHECK:       # %bb.0:
170*6441df3bSrealqhc; CHECK-NEXT:    cv.macurn a2, a0, a1, 5
171*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
172*6441df3bSrealqhc; CHECK-NEXT:    ret
173*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.macuRN(i32 %a, i32 %b, i32 %c, i32 5)
174*6441df3bSrealqhc  ret i32 %1
175*6441df3bSrealqhc}
176*6441df3bSrealqhc
177*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhuRN(i32, i32, i32, i32)
178*6441df3bSrealqhc
179*6441df3bSrealqhcdefine i32 @test.machhuRN(i32 %a, i32 %b, i32 %c) {
180*6441df3bSrealqhc; CHECK-LABEL: test.machhuRN:
181*6441df3bSrealqhc; CHECK:       # %bb.0:
182*6441df3bSrealqhc; CHECK-NEXT:    cv.machhurn a2, a0, a1, 5
183*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
184*6441df3bSrealqhc; CHECK-NEXT:    ret
185*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.machhuRN(i32 %a, i32 %b, i32 %c, i32 5)
186*6441df3bSrealqhc  ret i32 %1
187*6441df3bSrealqhc}
188*6441df3bSrealqhc
189*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macsRN(i32, i32, i32, i32)
190*6441df3bSrealqhc
191*6441df3bSrealqhcdefine i32 @test.macsRN(i32 %a, i32 %b, i32 %c) {
192*6441df3bSrealqhc; CHECK-LABEL: test.macsRN:
193*6441df3bSrealqhc; CHECK:       # %bb.0:
194*6441df3bSrealqhc; CHECK-NEXT:    cv.macsrn a2, a0, a1, 5
195*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
196*6441df3bSrealqhc; CHECK-NEXT:    ret
197*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.macsRN(i32 %a, i32 %b, i32 %c, i32 5)
198*6441df3bSrealqhc  ret i32 %1
199*6441df3bSrealqhc}
200*6441df3bSrealqhc
201*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhsRN(i32, i32, i32, i32)
202*6441df3bSrealqhc
203*6441df3bSrealqhcdefine i32 @test.machhsRN(i32 %a, i32 %b, i32 %c) {
204*6441df3bSrealqhc; CHECK-LABEL: test.machhsRN:
205*6441df3bSrealqhc; CHECK:       # %bb.0:
206*6441df3bSrealqhc; CHECK-NEXT:    cv.machhsrn a2, a0, a1, 5
207*6441df3bSrealqhc; CHECK-NEXT:    mv a0, a2
208*6441df3bSrealqhc; CHECK-NEXT:    ret
209*6441df3bSrealqhc  %1 = call i32 @llvm.riscv.cv.mac.machhsRN(i32 %a, i32 %b, i32 %c, i32 5)
210*6441df3bSrealqhc  ret i32 %1
211*6441df3bSrealqhc}
212