xref: /llvm-project/llvm/test/CodeGen/RISCV/xcvmem.ll (revision 2afea7296812b7e12c6ec683e6858bd4cbe8dd8d)
1*2afea729SLiao Chunyu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*2afea729SLiao Chunyu; RUN: llc -O3 -mtriple=riscv32 -mattr=+xcvmem -verify-machineinstrs < %s \
3*2afea729SLiao Chunyu; RUN:   | FileCheck %s --check-prefixes=CHECK
4*2afea729SLiao Chunyu
5*2afea729SLiao Chunyudefine <2 x i32> @lb_ri_inc(i8* %a) {
6*2afea729SLiao Chunyu; CHECK-LABEL: lb_ri_inc:
7*2afea729SLiao Chunyu; CHECK:       # %bb.0:
8*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lb a1, (a0), 42
9*2afea729SLiao Chunyu; CHECK-NEXT:    ret
10*2afea729SLiao Chunyu  %1 = load i8, i8* %a
11*2afea729SLiao Chunyu  %2 = sext i8 %1 to i32
12*2afea729SLiao Chunyu  %3 = getelementptr i8, i8* %a, i32 42
13*2afea729SLiao Chunyu  %4 = ptrtoint i8* %3 to i32
14*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
15*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
16*2afea729SLiao Chunyu  ret <2 x i32> %6
17*2afea729SLiao Chunyu}
18*2afea729SLiao Chunyu
19*2afea729SLiao Chunyudefine <2 x i32> @lb_rr_inc(i8* %a, i32 %b) {
20*2afea729SLiao Chunyu; CHECK-LABEL: lb_rr_inc:
21*2afea729SLiao Chunyu; CHECK:       # %bb.0:
22*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lb a1, (a0), a1
23*2afea729SLiao Chunyu; CHECK-NEXT:    ret
24*2afea729SLiao Chunyu  %1 = load i8, i8* %a
25*2afea729SLiao Chunyu  %2 = sext i8 %1 to i32
26*2afea729SLiao Chunyu  %3 = getelementptr i8, i8* %a, i32 %b
27*2afea729SLiao Chunyu  %4 = ptrtoint i8* %3 to i32
28*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
29*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
30*2afea729SLiao Chunyu  ret <2 x i32> %6
31*2afea729SLiao Chunyu}
32*2afea729SLiao Chunyu
33*2afea729SLiao Chunyudefine i32 @lb_rr(i8* %a, i32 %b) {
34*2afea729SLiao Chunyu; CHECK-LABEL: lb_rr:
35*2afea729SLiao Chunyu; CHECK:       # %bb.0:
36*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lb a0, a1(a0)
37*2afea729SLiao Chunyu; CHECK-NEXT:    ret
38*2afea729SLiao Chunyu  %1 = getelementptr i8, i8* %a, i32 %b
39*2afea729SLiao Chunyu  %2 = load i8, i8* %1
40*2afea729SLiao Chunyu  %3 = sext i8 %2 to i32
41*2afea729SLiao Chunyu  ret i32 %3
42*2afea729SLiao Chunyu}
43*2afea729SLiao Chunyu
44*2afea729SLiao Chunyudefine <2 x i32> @lbu_ri_inc(i8* %a) {
45*2afea729SLiao Chunyu; CHECK-LABEL: lbu_ri_inc:
46*2afea729SLiao Chunyu; CHECK:       # %bb.0:
47*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lbu a1, (a0), 42
48*2afea729SLiao Chunyu; CHECK-NEXT:    ret
49*2afea729SLiao Chunyu  %1 = load i8, i8* %a
50*2afea729SLiao Chunyu  %2 = zext i8 %1 to i32
51*2afea729SLiao Chunyu  %3 = getelementptr i8, i8* %a, i32 42
52*2afea729SLiao Chunyu  %4 = ptrtoint i8* %3 to i32
53*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
54*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
55*2afea729SLiao Chunyu  ret <2 x i32> %6
56*2afea729SLiao Chunyu}
57*2afea729SLiao Chunyu
58*2afea729SLiao Chunyudefine <2 x i32> @lbu_rr_inc(i8* %a, i32 %b) {
59*2afea729SLiao Chunyu; CHECK-LABEL: lbu_rr_inc:
60*2afea729SLiao Chunyu; CHECK:       # %bb.0:
61*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lbu a1, (a0), a1
62*2afea729SLiao Chunyu; CHECK-NEXT:    ret
63*2afea729SLiao Chunyu  %1 = load i8, i8* %a
64*2afea729SLiao Chunyu  %2 = zext i8 %1 to i32
65*2afea729SLiao Chunyu  %3 = getelementptr i8, i8* %a, i32 %b
66*2afea729SLiao Chunyu  %4 = ptrtoint i8* %3 to i32
67*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
68*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
69*2afea729SLiao Chunyu  ret <2 x i32> %6
70*2afea729SLiao Chunyu}
71*2afea729SLiao Chunyu
72*2afea729SLiao Chunyudefine i32 @lbu_rr(i8* %a, i32 %b) {
73*2afea729SLiao Chunyu; CHECK-LABEL: lbu_rr:
74*2afea729SLiao Chunyu; CHECK:       # %bb.0:
75*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lbu a0, a1(a0)
76*2afea729SLiao Chunyu; CHECK-NEXT:    ret
77*2afea729SLiao Chunyu  %1 = getelementptr i8, i8* %a, i32 %b
78*2afea729SLiao Chunyu  %2 = load i8, i8* %1
79*2afea729SLiao Chunyu  %3 = zext i8 %2 to i32
80*2afea729SLiao Chunyu  ret i32 %3
81*2afea729SLiao Chunyu}
82*2afea729SLiao Chunyu
83*2afea729SLiao Chunyudefine <2 x i32> @lh_ri_inc(i16* %a) {
84*2afea729SLiao Chunyu; CHECK-LABEL: lh_ri_inc:
85*2afea729SLiao Chunyu; CHECK:       # %bb.0:
86*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lh a1, (a0), 84
87*2afea729SLiao Chunyu; CHECK-NEXT:    ret
88*2afea729SLiao Chunyu  %1 = load i16, i16* %a
89*2afea729SLiao Chunyu  %2 = sext i16 %1 to i32
90*2afea729SLiao Chunyu  %3 = getelementptr i16, i16* %a, i32 42
91*2afea729SLiao Chunyu  %4 = ptrtoint i16* %3 to i32
92*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
93*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
94*2afea729SLiao Chunyu  ret <2 x i32> %6
95*2afea729SLiao Chunyu}
96*2afea729SLiao Chunyu
97*2afea729SLiao Chunyudefine <2 x i32> @lh_rr_inc(i16* %a, i32 %b) {
98*2afea729SLiao Chunyu; CHECK-LABEL: lh_rr_inc:
99*2afea729SLiao Chunyu; CHECK:       # %bb.0:
100*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 1
101*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lh a1, (a0), a1
102*2afea729SLiao Chunyu; CHECK-NEXT:    ret
103*2afea729SLiao Chunyu  %1 = load i16, i16* %a
104*2afea729SLiao Chunyu  %2 = sext i16 %1 to i32
105*2afea729SLiao Chunyu  %3 = getelementptr i16, i16* %a, i32 %b
106*2afea729SLiao Chunyu  %4 = ptrtoint i16* %3 to i32
107*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
108*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
109*2afea729SLiao Chunyu  ret <2 x i32> %6
110*2afea729SLiao Chunyu}
111*2afea729SLiao Chunyu
112*2afea729SLiao Chunyudefine i32 @lh_rr(i16* %a, i32 %b) {
113*2afea729SLiao Chunyu; CHECK-LABEL: lh_rr:
114*2afea729SLiao Chunyu; CHECK:       # %bb.0:
115*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 1
116*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lh a0, a1(a0)
117*2afea729SLiao Chunyu; CHECK-NEXT:    ret
118*2afea729SLiao Chunyu  %1 = getelementptr i16, i16* %a, i32 %b
119*2afea729SLiao Chunyu  %2 = load i16, i16* %1
120*2afea729SLiao Chunyu  %3 = sext i16 %2 to i32
121*2afea729SLiao Chunyu  ret i32 %3
122*2afea729SLiao Chunyu}
123*2afea729SLiao Chunyu
124*2afea729SLiao Chunyudefine <2 x i32> @lhu_ri_inc(i16* %a) {
125*2afea729SLiao Chunyu; CHECK-LABEL: lhu_ri_inc:
126*2afea729SLiao Chunyu; CHECK:       # %bb.0:
127*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lhu a1, (a0), 84
128*2afea729SLiao Chunyu; CHECK-NEXT:    ret
129*2afea729SLiao Chunyu  %1 = load i16, i16* %a
130*2afea729SLiao Chunyu  %2 = zext i16 %1 to i32
131*2afea729SLiao Chunyu  %3 = getelementptr i16, i16* %a, i32 42
132*2afea729SLiao Chunyu  %4 = ptrtoint i16* %3 to i32
133*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
134*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
135*2afea729SLiao Chunyu  ret <2 x i32> %6
136*2afea729SLiao Chunyu}
137*2afea729SLiao Chunyu
138*2afea729SLiao Chunyudefine <2 x i32> @lhu_rr_inc(i16* %a, i32 %b) {
139*2afea729SLiao Chunyu; CHECK-LABEL: lhu_rr_inc:
140*2afea729SLiao Chunyu; CHECK:       # %bb.0:
141*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 1
142*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lhu a1, (a0), a1
143*2afea729SLiao Chunyu; CHECK-NEXT:    ret
144*2afea729SLiao Chunyu  %1 = load i16, i16* %a
145*2afea729SLiao Chunyu  %2 = zext i16 %1 to i32
146*2afea729SLiao Chunyu  %3 = getelementptr i16, i16* %a, i32 %b
147*2afea729SLiao Chunyu  %4 = ptrtoint i16* %3 to i32
148*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> undef, i32 %4, i32 0
149*2afea729SLiao Chunyu  %6 = insertelement <2 x i32> %5, i32 %2, i32 1
150*2afea729SLiao Chunyu  ret <2 x i32> %6
151*2afea729SLiao Chunyu}
152*2afea729SLiao Chunyu
153*2afea729SLiao Chunyudefine i32 @lhu_rr(i16* %a, i32 %b) {
154*2afea729SLiao Chunyu; CHECK-LABEL: lhu_rr:
155*2afea729SLiao Chunyu; CHECK:       # %bb.0:
156*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 1
157*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lhu a0, a1(a0)
158*2afea729SLiao Chunyu; CHECK-NEXT:    ret
159*2afea729SLiao Chunyu  %1 = getelementptr i16, i16* %a, i32 %b
160*2afea729SLiao Chunyu  %2 = load i16, i16* %1
161*2afea729SLiao Chunyu  %3 = zext i16 %2 to i32
162*2afea729SLiao Chunyu  ret i32 %3
163*2afea729SLiao Chunyu}
164*2afea729SLiao Chunyu
165*2afea729SLiao Chunyudefine <2 x i32> @lw_ri_inc(i32* %a) {
166*2afea729SLiao Chunyu; CHECK-LABEL: lw_ri_inc:
167*2afea729SLiao Chunyu; CHECK:       # %bb.0:
168*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lw a1, (a0), 168
169*2afea729SLiao Chunyu; CHECK-NEXT:    ret
170*2afea729SLiao Chunyu  %1 = load i32, i32* %a
171*2afea729SLiao Chunyu  %2 = getelementptr i32, i32* %a, i32 42
172*2afea729SLiao Chunyu  %3 = ptrtoint i32* %2 to i32
173*2afea729SLiao Chunyu  %4 = insertelement <2 x i32> undef, i32 %3, i32 0
174*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> %4, i32 %1, i32 1
175*2afea729SLiao Chunyu  ret <2 x i32> %5
176*2afea729SLiao Chunyu}
177*2afea729SLiao Chunyu
178*2afea729SLiao Chunyudefine <2 x i32> @lw_rr_inc(i32* %a, i32 %b) {
179*2afea729SLiao Chunyu; CHECK-LABEL: lw_rr_inc:
180*2afea729SLiao Chunyu; CHECK:       # %bb.0:
181*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 2
182*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lw a1, (a0), a1
183*2afea729SLiao Chunyu; CHECK-NEXT:    ret
184*2afea729SLiao Chunyu  %1 = load i32, i32* %a
185*2afea729SLiao Chunyu  %2 = getelementptr i32, i32* %a, i32 %b
186*2afea729SLiao Chunyu  %3 = ptrtoint i32* %2 to i32
187*2afea729SLiao Chunyu  %4 = insertelement <2 x i32> undef, i32 %3, i32 0
188*2afea729SLiao Chunyu  %5 = insertelement <2 x i32> %4, i32 %1, i32 1
189*2afea729SLiao Chunyu  ret <2 x i32> %5
190*2afea729SLiao Chunyu}
191*2afea729SLiao Chunyu
192*2afea729SLiao Chunyudefine i32 @lw_rr(i32* %a, i32 %b) {
193*2afea729SLiao Chunyu; CHECK-LABEL: lw_rr:
194*2afea729SLiao Chunyu; CHECK:       # %bb.0:
195*2afea729SLiao Chunyu; CHECK-NEXT:    slli a1, a1, 2
196*2afea729SLiao Chunyu; CHECK-NEXT:    cv.lw a0, a1(a0)
197*2afea729SLiao Chunyu; CHECK-NEXT:    ret
198*2afea729SLiao Chunyu  %1 = getelementptr i32, i32* %a, i32 %b
199*2afea729SLiao Chunyu  %2 = load i32, i32* %1
200*2afea729SLiao Chunyu  ret i32 %2
201*2afea729SLiao Chunyu}
202*2afea729SLiao Chunyu
203*2afea729SLiao Chunyudefine i8* @sb_ri_inc(i8* %a, i8 %b) {
204*2afea729SLiao Chunyu; CHECK-LABEL: sb_ri_inc:
205*2afea729SLiao Chunyu; CHECK:       # %bb.0:
206*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sb a1, (a0), 42
207*2afea729SLiao Chunyu; CHECK-NEXT:    ret
208*2afea729SLiao Chunyu  store i8 %b, i8* %a
209*2afea729SLiao Chunyu  %1 = getelementptr i8, i8* %a, i32 42
210*2afea729SLiao Chunyu  ret i8* %1
211*2afea729SLiao Chunyu}
212*2afea729SLiao Chunyu
213*2afea729SLiao Chunyudefine i8* @sb_rr_inc(i8* %a, i8 %b, i32 %c) {
214*2afea729SLiao Chunyu; CHECK-LABEL: sb_rr_inc:
215*2afea729SLiao Chunyu; CHECK:       # %bb.0:
216*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sb a1, (a0), a2
217*2afea729SLiao Chunyu; CHECK-NEXT:    ret
218*2afea729SLiao Chunyu  store i8 %b, i8* %a
219*2afea729SLiao Chunyu  %1 = getelementptr i8, i8* %a, i32 %c
220*2afea729SLiao Chunyu  ret i8* %1
221*2afea729SLiao Chunyu}
222*2afea729SLiao Chunyu
223*2afea729SLiao Chunyudefine void @sb_rr(i8* %a, i8 %b, i32 %c) {
224*2afea729SLiao Chunyu; CHECK-LABEL: sb_rr:
225*2afea729SLiao Chunyu; CHECK:       # %bb.0:
226*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sb a1, a2(a0)
227*2afea729SLiao Chunyu; CHECK-NEXT:    ret
228*2afea729SLiao Chunyu  %1 = getelementptr i8, i8* %a, i32 %c
229*2afea729SLiao Chunyu  store i8 %b, i8* %1
230*2afea729SLiao Chunyu  ret void
231*2afea729SLiao Chunyu}
232*2afea729SLiao Chunyu
233*2afea729SLiao Chunyudefine i16* @sh_ri_inc(i16* %a, i16 %b) {
234*2afea729SLiao Chunyu; CHECK-LABEL: sh_ri_inc:
235*2afea729SLiao Chunyu; CHECK:       # %bb.0:
236*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sh a1, (a0), 84
237*2afea729SLiao Chunyu; CHECK-NEXT:    ret
238*2afea729SLiao Chunyu  store i16 %b, i16* %a
239*2afea729SLiao Chunyu  %1 = getelementptr i16, i16* %a, i32 42
240*2afea729SLiao Chunyu  ret i16* %1
241*2afea729SLiao Chunyu}
242*2afea729SLiao Chunyu
243*2afea729SLiao Chunyudefine i16* @sh_rr_inc(i16* %a, i16 %b, i32 %c) {
244*2afea729SLiao Chunyu; CHECK-LABEL: sh_rr_inc:
245*2afea729SLiao Chunyu; CHECK:       # %bb.0:
246*2afea729SLiao Chunyu; CHECK-NEXT:    slli a2, a2, 1
247*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sh a1, (a0), a2
248*2afea729SLiao Chunyu; CHECK-NEXT:    ret
249*2afea729SLiao Chunyu  store i16 %b, i16* %a
250*2afea729SLiao Chunyu  %1 = getelementptr i16, i16* %a, i32 %c
251*2afea729SLiao Chunyu  ret i16* %1
252*2afea729SLiao Chunyu}
253*2afea729SLiao Chunyu
254*2afea729SLiao Chunyudefine void @sh_rr(i16* %a, i16 %b, i32 %c) {
255*2afea729SLiao Chunyu; CHECK-LABEL: sh_rr:
256*2afea729SLiao Chunyu; CHECK:       # %bb.0:
257*2afea729SLiao Chunyu; CHECK-NEXT:    slli a2, a2, 1
258*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sh a1, a2(a0)
259*2afea729SLiao Chunyu; CHECK-NEXT:    ret
260*2afea729SLiao Chunyu  %1 = getelementptr i16, i16* %a, i32 %c
261*2afea729SLiao Chunyu  store i16 %b, i16* %1
262*2afea729SLiao Chunyu  ret void
263*2afea729SLiao Chunyu}
264*2afea729SLiao Chunyu
265*2afea729SLiao Chunyudefine i32* @sw_ri_inc(i32* %a, i32 %b) {
266*2afea729SLiao Chunyu; CHECK-LABEL: sw_ri_inc:
267*2afea729SLiao Chunyu; CHECK:       # %bb.0:
268*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sw a1, (a0), 168
269*2afea729SLiao Chunyu; CHECK-NEXT:    ret
270*2afea729SLiao Chunyu  store i32 %b, i32* %a
271*2afea729SLiao Chunyu  %1 = getelementptr i32, i32* %a, i32 42
272*2afea729SLiao Chunyu  ret i32* %1
273*2afea729SLiao Chunyu}
274*2afea729SLiao Chunyu
275*2afea729SLiao Chunyudefine i32* @sw_rr_inc(i32* %a, i32 %b, i32 %c) {
276*2afea729SLiao Chunyu; CHECK-LABEL: sw_rr_inc:
277*2afea729SLiao Chunyu; CHECK:       # %bb.0:
278*2afea729SLiao Chunyu; CHECK-NEXT:    slli a2, a2, 2
279*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sw a1, (a0), a2
280*2afea729SLiao Chunyu; CHECK-NEXT:    ret
281*2afea729SLiao Chunyu  store i32 %b, i32* %a
282*2afea729SLiao Chunyu  %1 = getelementptr i32, i32* %a, i32 %c
283*2afea729SLiao Chunyu  ret i32* %1
284*2afea729SLiao Chunyu}
285*2afea729SLiao Chunyu
286*2afea729SLiao Chunyudefine void @sw_rr(i32* %a, i32 %b, i32 %c) {
287*2afea729SLiao Chunyu; CHECK-LABEL: sw_rr:
288*2afea729SLiao Chunyu; CHECK:       # %bb.0:
289*2afea729SLiao Chunyu; CHECK-NEXT:    slli a2, a2, 2
290*2afea729SLiao Chunyu; CHECK-NEXT:    cv.sw a1, a2(a0)
291*2afea729SLiao Chunyu; CHECK-NEXT:    ret
292*2afea729SLiao Chunyu  %1 = getelementptr i32, i32* %a, i32 %c
293*2afea729SLiao Chunyu  store i32 %b, i32* %1
294*2afea729SLiao Chunyu  ret void
295*2afea729SLiao Chunyu}
296