xref: /llvm-project/llvm/test/CodeGen/RISCV/sdiv-pow2-cmov.ll (revision 650026897c38ffebabd8c8377596141c37b65699)
1*65002689SYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*65002689SYingwei Zheng; RUN: llc -mtriple=riscv64 -mattr=+c,+m -verify-machineinstrs < %s \
3*65002689SYingwei Zheng; RUN:   | FileCheck -check-prefixes=CHECK,NOSFB %s
4*65002689SYingwei Zheng; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -verify-machineinstrs < %s \
5*65002689SYingwei Zheng; RUN:   | FileCheck -check-prefixes=CHECK,SFB %s
6*65002689SYingwei Zheng
7*65002689SYingwei Zhengdefine signext i32 @sdiv2_32(i32 signext %0) {
8*65002689SYingwei Zheng; NOSFB-LABEL: sdiv2_32:
9*65002689SYingwei Zheng; NOSFB:       # %bb.0:
10*65002689SYingwei Zheng; NOSFB-NEXT:    srliw a1, a0, 31
11*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
12*65002689SYingwei Zheng; NOSFB-NEXT:    sraiw a0, a0, 1
13*65002689SYingwei Zheng; NOSFB-NEXT:    ret
14*65002689SYingwei Zheng;
15*65002689SYingwei Zheng; SFB-LABEL: sdiv2_32:
16*65002689SYingwei Zheng; SFB:       # %bb.0:
17*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB0_2
18*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
19*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 1
20*65002689SYingwei Zheng; SFB-NEXT:  .LBB0_2:
21*65002689SYingwei Zheng; SFB-NEXT:    sraiw a0, a0, 1
22*65002689SYingwei Zheng; SFB-NEXT:    ret
23*65002689SYingwei Zheng  %res = sdiv i32 %0, 2
24*65002689SYingwei Zheng  ret i32 %res
25*65002689SYingwei Zheng}
26*65002689SYingwei Zheng
27*65002689SYingwei Zhengdefine signext i32 @sdivneg2_32(i32 signext %0) {
28*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg2_32:
29*65002689SYingwei Zheng; NOSFB:       # %bb.0:
30*65002689SYingwei Zheng; NOSFB-NEXT:    srliw a1, a0, 31
31*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
32*65002689SYingwei Zheng; NOSFB-NEXT:    sraiw a0, a0, 1
33*65002689SYingwei Zheng; NOSFB-NEXT:    neg a0, a0
34*65002689SYingwei Zheng; NOSFB-NEXT:    ret
35*65002689SYingwei Zheng;
36*65002689SYingwei Zheng; SFB-LABEL: sdivneg2_32:
37*65002689SYingwei Zheng; SFB:       # %bb.0:
38*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB1_2
39*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
40*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 1
41*65002689SYingwei Zheng; SFB-NEXT:  .LBB1_2:
42*65002689SYingwei Zheng; SFB-NEXT:    sraiw a0, a0, 1
43*65002689SYingwei Zheng; SFB-NEXT:    neg a0, a0
44*65002689SYingwei Zheng; SFB-NEXT:    ret
45*65002689SYingwei Zheng  %res = sdiv i32 %0, -2
46*65002689SYingwei Zheng  ret i32 %res
47*65002689SYingwei Zheng}
48*65002689SYingwei Zheng
49*65002689SYingwei Zhengdefine i64 @sdiv2_64(i64 %0) {
50*65002689SYingwei Zheng; NOSFB-LABEL: sdiv2_64:
51*65002689SYingwei Zheng; NOSFB:       # %bb.0:
52*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a0, 63
53*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
54*65002689SYingwei Zheng; NOSFB-NEXT:    srai a0, a0, 1
55*65002689SYingwei Zheng; NOSFB-NEXT:    ret
56*65002689SYingwei Zheng;
57*65002689SYingwei Zheng; SFB-LABEL: sdiv2_64:
58*65002689SYingwei Zheng; SFB:       # %bb.0:
59*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB2_2
60*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
61*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 1
62*65002689SYingwei Zheng; SFB-NEXT:  .LBB2_2:
63*65002689SYingwei Zheng; SFB-NEXT:    srai a0, a0, 1
64*65002689SYingwei Zheng; SFB-NEXT:    ret
65*65002689SYingwei Zheng  %res = sdiv i64 %0, 2
66*65002689SYingwei Zheng  ret i64 %res
67*65002689SYingwei Zheng}
68*65002689SYingwei Zheng
69*65002689SYingwei Zhengdefine i64 @sdivneg2_64(i64 %0) {
70*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg2_64:
71*65002689SYingwei Zheng; NOSFB:       # %bb.0:
72*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a0, 63
73*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
74*65002689SYingwei Zheng; NOSFB-NEXT:    srai a0, a0, 1
75*65002689SYingwei Zheng; NOSFB-NEXT:    neg a0, a0
76*65002689SYingwei Zheng; NOSFB-NEXT:    ret
77*65002689SYingwei Zheng;
78*65002689SYingwei Zheng; SFB-LABEL: sdivneg2_64:
79*65002689SYingwei Zheng; SFB:       # %bb.0:
80*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB3_2
81*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
82*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 1
83*65002689SYingwei Zheng; SFB-NEXT:  .LBB3_2:
84*65002689SYingwei Zheng; SFB-NEXT:    srai a0, a0, 1
85*65002689SYingwei Zheng; SFB-NEXT:    neg a0, a0
86*65002689SYingwei Zheng; SFB-NEXT:    ret
87*65002689SYingwei Zheng  %res = sdiv i64 %0, -2
88*65002689SYingwei Zheng  ret i64 %res
89*65002689SYingwei Zheng}
90*65002689SYingwei Zheng
91*65002689SYingwei Zhengdefine signext i32 @srem2_32(i32 signext %0) {
92*65002689SYingwei Zheng; NOSFB-LABEL: srem2_32:
93*65002689SYingwei Zheng; NOSFB:       # %bb.0:
94*65002689SYingwei Zheng; NOSFB-NEXT:    srliw a1, a0, 31
95*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
96*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -2
97*65002689SYingwei Zheng; NOSFB-NEXT:    subw a0, a0, a1
98*65002689SYingwei Zheng; NOSFB-NEXT:    ret
99*65002689SYingwei Zheng;
100*65002689SYingwei Zheng; SFB-LABEL: srem2_32:
101*65002689SYingwei Zheng; SFB:       # %bb.0:
102*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
103*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB4_2
104*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
105*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 1
106*65002689SYingwei Zheng; SFB-NEXT:  .LBB4_2:
107*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -2
108*65002689SYingwei Zheng; SFB-NEXT:    subw a0, a0, a1
109*65002689SYingwei Zheng; SFB-NEXT:    ret
110*65002689SYingwei Zheng  %res = srem i32 %0, 2
111*65002689SYingwei Zheng  ret i32 %res
112*65002689SYingwei Zheng}
113*65002689SYingwei Zheng
114*65002689SYingwei Zhengdefine signext i32 @sremneg2_32(i32 signext %0) {
115*65002689SYingwei Zheng; NOSFB-LABEL: sremneg2_32:
116*65002689SYingwei Zheng; NOSFB:       # %bb.0:
117*65002689SYingwei Zheng; NOSFB-NEXT:    srliw a1, a0, 31
118*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
119*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -2
120*65002689SYingwei Zheng; NOSFB-NEXT:    subw a0, a0, a1
121*65002689SYingwei Zheng; NOSFB-NEXT:    ret
122*65002689SYingwei Zheng;
123*65002689SYingwei Zheng; SFB-LABEL: sremneg2_32:
124*65002689SYingwei Zheng; SFB:       # %bb.0:
125*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
126*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB5_2
127*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
128*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 1
129*65002689SYingwei Zheng; SFB-NEXT:  .LBB5_2:
130*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -2
131*65002689SYingwei Zheng; SFB-NEXT:    subw a0, a0, a1
132*65002689SYingwei Zheng; SFB-NEXT:    ret
133*65002689SYingwei Zheng  %res = srem i32 %0, -2
134*65002689SYingwei Zheng  ret i32 %res
135*65002689SYingwei Zheng}
136*65002689SYingwei Zheng
137*65002689SYingwei Zhengdefine i64 @srem2_64(i64 %0) {
138*65002689SYingwei Zheng; NOSFB-LABEL: srem2_64:
139*65002689SYingwei Zheng; NOSFB:       # %bb.0:
140*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a0, 63
141*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
142*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -2
143*65002689SYingwei Zheng; NOSFB-NEXT:    sub a0, a0, a1
144*65002689SYingwei Zheng; NOSFB-NEXT:    ret
145*65002689SYingwei Zheng;
146*65002689SYingwei Zheng; SFB-LABEL: srem2_64:
147*65002689SYingwei Zheng; SFB:       # %bb.0:
148*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
149*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB6_2
150*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
151*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 1
152*65002689SYingwei Zheng; SFB-NEXT:  .LBB6_2:
153*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -2
154*65002689SYingwei Zheng; SFB-NEXT:    sub a0, a0, a1
155*65002689SYingwei Zheng; SFB-NEXT:    ret
156*65002689SYingwei Zheng  %res = srem i64 %0, 2
157*65002689SYingwei Zheng  ret i64 %res
158*65002689SYingwei Zheng}
159*65002689SYingwei Zheng
160*65002689SYingwei Zhengdefine i64 @sremneg2_64(i64 %0) {
161*65002689SYingwei Zheng; NOSFB-LABEL: sremneg2_64:
162*65002689SYingwei Zheng; NOSFB:       # %bb.0:
163*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a0, 63
164*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
165*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -2
166*65002689SYingwei Zheng; NOSFB-NEXT:    sub a0, a0, a1
167*65002689SYingwei Zheng; NOSFB-NEXT:    ret
168*65002689SYingwei Zheng;
169*65002689SYingwei Zheng; SFB-LABEL: sremneg2_64:
170*65002689SYingwei Zheng; SFB:       # %bb.0:
171*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
172*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB7_2
173*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
174*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 1
175*65002689SYingwei Zheng; SFB-NEXT:  .LBB7_2:
176*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -2
177*65002689SYingwei Zheng; SFB-NEXT:    sub a0, a0, a1
178*65002689SYingwei Zheng; SFB-NEXT:    ret
179*65002689SYingwei Zheng  %res = srem i64 %0, -2
180*65002689SYingwei Zheng  ret i64 %res
181*65002689SYingwei Zheng}
182*65002689SYingwei Zheng
183*65002689SYingwei Zhengdefine signext i32 @sdiv8_32(i32 signext %0) {
184*65002689SYingwei Zheng; NOSFB-LABEL: sdiv8_32:
185*65002689SYingwei Zheng; NOSFB:       # %bb.0:
186*65002689SYingwei Zheng; NOSFB-NEXT:    slli a1, a0, 1
187*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
188*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
189*65002689SYingwei Zheng; NOSFB-NEXT:    sraiw a0, a0, 3
190*65002689SYingwei Zheng; NOSFB-NEXT:    ret
191*65002689SYingwei Zheng;
192*65002689SYingwei Zheng; SFB-LABEL: sdiv8_32:
193*65002689SYingwei Zheng; SFB:       # %bb.0:
194*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB8_2
195*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
196*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 7
197*65002689SYingwei Zheng; SFB-NEXT:  .LBB8_2:
198*65002689SYingwei Zheng; SFB-NEXT:    sraiw a0, a0, 3
199*65002689SYingwei Zheng; SFB-NEXT:    ret
200*65002689SYingwei Zheng  %res = sdiv i32 %0, 8
201*65002689SYingwei Zheng  ret i32 %res
202*65002689SYingwei Zheng}
203*65002689SYingwei Zheng
204*65002689SYingwei Zhengdefine signext i32 @sdivneg8_32(i32 signext %0) {
205*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg8_32:
206*65002689SYingwei Zheng; NOSFB:       # %bb.0:
207*65002689SYingwei Zheng; NOSFB-NEXT:    slli a1, a0, 1
208*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
209*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
210*65002689SYingwei Zheng; NOSFB-NEXT:    sraiw a0, a0, 3
211*65002689SYingwei Zheng; NOSFB-NEXT:    neg a0, a0
212*65002689SYingwei Zheng; NOSFB-NEXT:    ret
213*65002689SYingwei Zheng;
214*65002689SYingwei Zheng; SFB-LABEL: sdivneg8_32:
215*65002689SYingwei Zheng; SFB:       # %bb.0:
216*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB9_2
217*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
218*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 7
219*65002689SYingwei Zheng; SFB-NEXT:  .LBB9_2:
220*65002689SYingwei Zheng; SFB-NEXT:    sraiw a0, a0, 3
221*65002689SYingwei Zheng; SFB-NEXT:    neg a0, a0
222*65002689SYingwei Zheng; SFB-NEXT:    ret
223*65002689SYingwei Zheng  %res = sdiv i32 %0, -8
224*65002689SYingwei Zheng  ret i32 %res
225*65002689SYingwei Zheng}
226*65002689SYingwei Zheng
227*65002689SYingwei Zhengdefine i64 @sdiv8_64(i64 %0) {
228*65002689SYingwei Zheng; NOSFB-LABEL: sdiv8_64:
229*65002689SYingwei Zheng; NOSFB:       # %bb.0:
230*65002689SYingwei Zheng; NOSFB-NEXT:    srai a1, a0, 63
231*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
232*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
233*65002689SYingwei Zheng; NOSFB-NEXT:    srai a0, a0, 3
234*65002689SYingwei Zheng; NOSFB-NEXT:    ret
235*65002689SYingwei Zheng;
236*65002689SYingwei Zheng; SFB-LABEL: sdiv8_64:
237*65002689SYingwei Zheng; SFB:       # %bb.0:
238*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB10_2
239*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
240*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 7
241*65002689SYingwei Zheng; SFB-NEXT:  .LBB10_2:
242*65002689SYingwei Zheng; SFB-NEXT:    srai a0, a0, 3
243*65002689SYingwei Zheng; SFB-NEXT:    ret
244*65002689SYingwei Zheng  %res = sdiv i64 %0, 8
245*65002689SYingwei Zheng  ret i64 %res
246*65002689SYingwei Zheng}
247*65002689SYingwei Zheng
248*65002689SYingwei Zhengdefine i64 @sdivneg8_64(i64 %0) {
249*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg8_64:
250*65002689SYingwei Zheng; NOSFB:       # %bb.0:
251*65002689SYingwei Zheng; NOSFB-NEXT:    srai a1, a0, 63
252*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
253*65002689SYingwei Zheng; NOSFB-NEXT:    add a0, a0, a1
254*65002689SYingwei Zheng; NOSFB-NEXT:    srai a0, a0, 3
255*65002689SYingwei Zheng; NOSFB-NEXT:    neg a0, a0
256*65002689SYingwei Zheng; NOSFB-NEXT:    ret
257*65002689SYingwei Zheng;
258*65002689SYingwei Zheng; SFB-LABEL: sdivneg8_64:
259*65002689SYingwei Zheng; SFB:       # %bb.0:
260*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB11_2
261*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
262*65002689SYingwei Zheng; SFB-NEXT:    addi a0, a0, 7
263*65002689SYingwei Zheng; SFB-NEXT:  .LBB11_2:
264*65002689SYingwei Zheng; SFB-NEXT:    srai a0, a0, 3
265*65002689SYingwei Zheng; SFB-NEXT:    neg a0, a0
266*65002689SYingwei Zheng; SFB-NEXT:    ret
267*65002689SYingwei Zheng  %res = sdiv i64 %0, -8
268*65002689SYingwei Zheng  ret i64 %res
269*65002689SYingwei Zheng}
270*65002689SYingwei Zheng
271*65002689SYingwei Zhengdefine signext i32 @srem8_32(i32 signext %0) {
272*65002689SYingwei Zheng; NOSFB-LABEL: srem8_32:
273*65002689SYingwei Zheng; NOSFB:       # %bb.0:
274*65002689SYingwei Zheng; NOSFB-NEXT:    slli a1, a0, 1
275*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
276*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
277*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -8
278*65002689SYingwei Zheng; NOSFB-NEXT:    subw a0, a0, a1
279*65002689SYingwei Zheng; NOSFB-NEXT:    ret
280*65002689SYingwei Zheng;
281*65002689SYingwei Zheng; SFB-LABEL: srem8_32:
282*65002689SYingwei Zheng; SFB:       # %bb.0:
283*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
284*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB12_2
285*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
286*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 7
287*65002689SYingwei Zheng; SFB-NEXT:  .LBB12_2:
288*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -8
289*65002689SYingwei Zheng; SFB-NEXT:    subw a0, a0, a1
290*65002689SYingwei Zheng; SFB-NEXT:    ret
291*65002689SYingwei Zheng  %res = srem i32 %0, 8
292*65002689SYingwei Zheng  ret i32 %res
293*65002689SYingwei Zheng}
294*65002689SYingwei Zheng
295*65002689SYingwei Zhengdefine signext i32 @sremneg8_32(i32 signext %0) {
296*65002689SYingwei Zheng; NOSFB-LABEL: sremneg8_32:
297*65002689SYingwei Zheng; NOSFB:       # %bb.0:
298*65002689SYingwei Zheng; NOSFB-NEXT:    slli a1, a0, 1
299*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
300*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
301*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -8
302*65002689SYingwei Zheng; NOSFB-NEXT:    subw a0, a0, a1
303*65002689SYingwei Zheng; NOSFB-NEXT:    ret
304*65002689SYingwei Zheng;
305*65002689SYingwei Zheng; SFB-LABEL: sremneg8_32:
306*65002689SYingwei Zheng; SFB:       # %bb.0:
307*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
308*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB13_2
309*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
310*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 7
311*65002689SYingwei Zheng; SFB-NEXT:  .LBB13_2:
312*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -8
313*65002689SYingwei Zheng; SFB-NEXT:    subw a0, a0, a1
314*65002689SYingwei Zheng; SFB-NEXT:    ret
315*65002689SYingwei Zheng  %res = srem i32 %0, -8
316*65002689SYingwei Zheng  ret i32 %res
317*65002689SYingwei Zheng}
318*65002689SYingwei Zheng
319*65002689SYingwei Zhengdefine i64 @srem8_64(i64 %0) {
320*65002689SYingwei Zheng; NOSFB-LABEL: srem8_64:
321*65002689SYingwei Zheng; NOSFB:       # %bb.0:
322*65002689SYingwei Zheng; NOSFB-NEXT:    srai a1, a0, 63
323*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
324*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
325*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -8
326*65002689SYingwei Zheng; NOSFB-NEXT:    sub a0, a0, a1
327*65002689SYingwei Zheng; NOSFB-NEXT:    ret
328*65002689SYingwei Zheng;
329*65002689SYingwei Zheng; SFB-LABEL: srem8_64:
330*65002689SYingwei Zheng; SFB:       # %bb.0:
331*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
332*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB14_2
333*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
334*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 7
335*65002689SYingwei Zheng; SFB-NEXT:  .LBB14_2:
336*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -8
337*65002689SYingwei Zheng; SFB-NEXT:    sub a0, a0, a1
338*65002689SYingwei Zheng; SFB-NEXT:    ret
339*65002689SYingwei Zheng  %res = srem i64 %0, 8
340*65002689SYingwei Zheng  ret i64 %res
341*65002689SYingwei Zheng}
342*65002689SYingwei Zheng
343*65002689SYingwei Zhengdefine i64 @sremneg8_64(i64 %0) {
344*65002689SYingwei Zheng; NOSFB-LABEL: sremneg8_64:
345*65002689SYingwei Zheng; NOSFB:       # %bb.0:
346*65002689SYingwei Zheng; NOSFB-NEXT:    srai a1, a0, 63
347*65002689SYingwei Zheng; NOSFB-NEXT:    srli a1, a1, 61
348*65002689SYingwei Zheng; NOSFB-NEXT:    add a1, a1, a0
349*65002689SYingwei Zheng; NOSFB-NEXT:    andi a1, a1, -8
350*65002689SYingwei Zheng; NOSFB-NEXT:    sub a0, a0, a1
351*65002689SYingwei Zheng; NOSFB-NEXT:    ret
352*65002689SYingwei Zheng;
353*65002689SYingwei Zheng; SFB-LABEL: sremneg8_64:
354*65002689SYingwei Zheng; SFB:       # %bb.0:
355*65002689SYingwei Zheng; SFB-NEXT:    mv a1, a0
356*65002689SYingwei Zheng; SFB-NEXT:    bgez a0, .LBB15_2
357*65002689SYingwei Zheng; SFB-NEXT:  # %bb.1:
358*65002689SYingwei Zheng; SFB-NEXT:    addi a1, a0, 7
359*65002689SYingwei Zheng; SFB-NEXT:  .LBB15_2:
360*65002689SYingwei Zheng; SFB-NEXT:    andi a1, a1, -8
361*65002689SYingwei Zheng; SFB-NEXT:    sub a0, a0, a1
362*65002689SYingwei Zheng; SFB-NEXT:    ret
363*65002689SYingwei Zheng  %res = srem i64 %0, -8
364*65002689SYingwei Zheng  ret i64 %res
365*65002689SYingwei Zheng}
366*65002689SYingwei Zheng
367*65002689SYingwei Zheng; Negative tests
368*65002689SYingwei Zhengdefine i64 @sdiv4096(i64 %0) {
369*65002689SYingwei Zheng; CHECK-LABEL: sdiv4096:
370*65002689SYingwei Zheng; CHECK:       # %bb.0:
371*65002689SYingwei Zheng; CHECK-NEXT:    srai a1, a0, 63
372*65002689SYingwei Zheng; CHECK-NEXT:    srli a1, a1, 52
373*65002689SYingwei Zheng; CHECK-NEXT:    add a0, a0, a1
374*65002689SYingwei Zheng; CHECK-NEXT:    srai a0, a0, 12
375*65002689SYingwei Zheng; CHECK-NEXT:    ret
376*65002689SYingwei Zheng  %res = sdiv i64 %0, 4096
377*65002689SYingwei Zheng  ret i64 %res
378*65002689SYingwei Zheng}
379