Skip to content

Commit 8b010e8

Browse files
committed
pre-commit tests
1 parent 5d136f9 commit 8b010e8

File tree

2 files changed

+421
-4
lines changed

2 files changed

+421
-4
lines changed

llvm/test/CodeGen/RISCV/mul-expand.ll

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3+
; RUN: | FileCheck -check-prefix=RV32I %s
4+
; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
5+
; RUN: | FileCheck -check-prefix=RV64I %s
6+
7+
define i32 @muli32_0x555(i32 %a) nounwind {
8+
; RV32I-LABEL: muli32_0x555:
9+
; RV32I: # %bb.0:
10+
; RV32I-NEXT: li a1, 1365
11+
; RV32I-NEXT: tail __mulsi3
12+
;
13+
; RV64I-LABEL: muli32_0x555:
14+
; RV64I: # %bb.0:
15+
; RV64I-NEXT: addi sp, sp, -16
16+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
17+
; RV64I-NEXT: li a1, 1365
18+
; RV64I-NEXT: call __muldi3
19+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
20+
; RV64I-NEXT: addi sp, sp, 16
21+
; RV64I-NEXT: ret
22+
%a1 = mul i32 %a, 1365
23+
ret i32 %a1
24+
}
25+
26+
define i64 @muli64_0x555(i64 %a) nounwind {
27+
; RV32I-LABEL: muli64_0x555:
28+
; RV32I: # %bb.0:
29+
; RV32I-NEXT: addi sp, sp, -16
30+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
31+
; RV32I-NEXT: li a2, 1365
32+
; RV32I-NEXT: li a3, 0
33+
; RV32I-NEXT: call __muldi3
34+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
35+
; RV32I-NEXT: addi sp, sp, 16
36+
; RV32I-NEXT: ret
37+
;
38+
; RV64I-LABEL: muli64_0x555:
39+
; RV64I: # %bb.0:
40+
; RV64I-NEXT: li a1, 1365
41+
; RV64I-NEXT: tail __muldi3
42+
%a1 = mul i64 %a, 1365
43+
ret i64 %a1
44+
}
45+
46+
define i32 @muli32_0x33333333(i32 %a) nounwind {
47+
; RV32I-LABEL: muli32_0x33333333:
48+
; RV32I: # %bb.0:
49+
; RV32I-NEXT: lui a1, 209715
50+
; RV32I-NEXT: addi a1, a1, 819
51+
; RV32I-NEXT: tail __mulsi3
52+
;
53+
; RV64I-LABEL: muli32_0x33333333:
54+
; RV64I: # %bb.0:
55+
; RV64I-NEXT: addi sp, sp, -16
56+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
57+
; RV64I-NEXT: lui a1, 209715
58+
; RV64I-NEXT: addiw a1, a1, 819
59+
; RV64I-NEXT: call __muldi3
60+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
61+
; RV64I-NEXT: addi sp, sp, 16
62+
; RV64I-NEXT: ret
63+
%a1 = mul i32 %a, 858993459
64+
ret i32 %a1
65+
}
66+
67+
define i64 @muli64_0x33333333(i64 %a) nounwind {
68+
; RV32I-LABEL: muli64_0x33333333:
69+
; RV32I: # %bb.0:
70+
; RV32I-NEXT: addi sp, sp, -16
71+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
72+
; RV32I-NEXT: lui a2, 209715
73+
; RV32I-NEXT: addi a2, a2, 819
74+
; RV32I-NEXT: li a3, 0
75+
; RV32I-NEXT: call __muldi3
76+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
77+
; RV32I-NEXT: addi sp, sp, 16
78+
; RV32I-NEXT: ret
79+
;
80+
; RV64I-LABEL: muli64_0x33333333:
81+
; RV64I: # %bb.0:
82+
; RV64I-NEXT: lui a1, 209715
83+
; RV64I-NEXT: addiw a1, a1, 819
84+
; RV64I-NEXT: tail __muldi3
85+
%a1 = mul i64 %a, 858993459
86+
ret i64 %a1
87+
}
88+
89+
define i32 @muli32_0xaaaaaaaa(i32 %a) nounwind {
90+
; RV32I-LABEL: muli32_0xaaaaaaaa:
91+
; RV32I: # %bb.0:
92+
; RV32I-NEXT: lui a1, 699051
93+
; RV32I-NEXT: addi a1, a1, -1366
94+
; RV32I-NEXT: tail __mulsi3
95+
;
96+
; RV64I-LABEL: muli32_0xaaaaaaaa:
97+
; RV64I: # %bb.0:
98+
; RV64I-NEXT: addi sp, sp, -16
99+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
100+
; RV64I-NEXT: lui a1, 699051
101+
; RV64I-NEXT: addiw a1, a1, -1366
102+
; RV64I-NEXT: call __muldi3
103+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
104+
; RV64I-NEXT: addi sp, sp, 16
105+
; RV64I-NEXT: ret
106+
%a1 = mul i32 %a, -1431655766
107+
ret i32 %a1
108+
}
109+
110+
define i64 @muli64_0xaaaaaaaa(i64 %a) nounwind {
111+
; RV32I-LABEL: muli64_0xaaaaaaaa:
112+
; RV32I: # %bb.0:
113+
; RV32I-NEXT: addi sp, sp, -16
114+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
115+
; RV32I-NEXT: lui a2, 699051
116+
; RV32I-NEXT: addi a2, a2, -1366
117+
; RV32I-NEXT: li a3, -1
118+
; RV32I-NEXT: call __muldi3
119+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
120+
; RV32I-NEXT: addi sp, sp, 16
121+
; RV32I-NEXT: ret
122+
;
123+
; RV64I-LABEL: muli64_0xaaaaaaaa:
124+
; RV64I: # %bb.0:
125+
; RV64I-NEXT: lui a1, 699051
126+
; RV64I-NEXT: addiw a1, a1, -1366
127+
; RV64I-NEXT: tail __muldi3
128+
%a1 = mul i64 %a, -1431655766
129+
ret i64 %a1
130+
}
131+
132+
define i32 @muli32_0x0fffffff(i32 %a) nounwind {
133+
; RV32I-LABEL: muli32_0x0fffffff:
134+
; RV32I: # %bb.0:
135+
; RV32I-NEXT: slli a1, a0, 28
136+
; RV32I-NEXT: sub a0, a1, a0
137+
; RV32I-NEXT: ret
138+
;
139+
; RV64I-LABEL: muli32_0x0fffffff:
140+
; RV64I: # %bb.0:
141+
; RV64I-NEXT: slli a1, a0, 28
142+
; RV64I-NEXT: subw a0, a1, a0
143+
; RV64I-NEXT: ret
144+
%a1 = mul i32 %a, 268435455
145+
ret i32 %a1
146+
}
147+
148+
define i64 @muli64_0x0fffffff(i64 %a) nounwind {
149+
; RV32I-LABEL: muli64_0x0fffffff:
150+
; RV32I: # %bb.0:
151+
; RV32I-NEXT: slli a2, a0, 28
152+
; RV32I-NEXT: srli a3, a0, 4
153+
; RV32I-NEXT: slli a4, a1, 28
154+
; RV32I-NEXT: sltu a5, a2, a0
155+
; RV32I-NEXT: or a3, a4, a3
156+
; RV32I-NEXT: sub a1, a3, a1
157+
; RV32I-NEXT: sub a1, a1, a5
158+
; RV32I-NEXT: sub a0, a2, a0
159+
; RV32I-NEXT: ret
160+
;
161+
; RV64I-LABEL: muli64_0x0fffffff:
162+
; RV64I: # %bb.0:
163+
; RV64I-NEXT: slli a1, a0, 28
164+
; RV64I-NEXT: sub a0, a1, a0
165+
; RV64I-NEXT: ret
166+
%a1 = mul i64 %a, 268435455
167+
ret i64 %a1
168+
}
169+
170+
define i32 @muli32_0xf0f0f0f0f0(i32 %a) nounwind {
171+
; RV32I-LABEL: muli32_0xf0f0f0f0f0:
172+
; RV32I: # %bb.0:
173+
; RV32I-NEXT: lui a1, 986895
174+
; RV32I-NEXT: addi a1, a1, 240
175+
; RV32I-NEXT: tail __mulsi3
176+
;
177+
; RV64I-LABEL: muli32_0xf0f0f0f0f0:
178+
; RV64I: # %bb.0:
179+
; RV64I-NEXT: addi sp, sp, -16
180+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
181+
; RV64I-NEXT: lui a1, 986895
182+
; RV64I-NEXT: addiw a1, a1, 240
183+
; RV64I-NEXT: call __muldi3
184+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
185+
; RV64I-NEXT: addi sp, sp, 16
186+
; RV64I-NEXT: ret
187+
%a1 = mul i32 %a, -252645136
188+
ret i32 %a1
189+
}
190+
191+
define i64 @muli64_0xf0f0f0f0f0(i64 %a) nounwind {
192+
; RV32I-LABEL: muli64_0xf0f0f0f0f0:
193+
; RV32I: # %bb.0:
194+
; RV32I-NEXT: addi sp, sp, -16
195+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
196+
; RV32I-NEXT: lui a2, 986895
197+
; RV32I-NEXT: addi a2, a2, 240
198+
; RV32I-NEXT: li a3, -1
199+
; RV32I-NEXT: call __muldi3
200+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
201+
; RV32I-NEXT: addi sp, sp, 16
202+
; RV32I-NEXT: ret
203+
;
204+
; RV64I-LABEL: muli64_0xf0f0f0f0f0:
205+
; RV64I: # %bb.0:
206+
; RV64I-NEXT: lui a1, 986895
207+
; RV64I-NEXT: addiw a1, a1, 240
208+
; RV64I-NEXT: tail __muldi3
209+
%a1 = mul i64 %a, -252645136
210+
ret i64 %a1
211+
}
212+
213+
define i32 @muli32_0xf7f7f7f7(i32 %a) nounwind {
214+
; RV32I-LABEL: muli32_0xf7f7f7f7:
215+
; RV32I: # %bb.0:
216+
; RV32I-NEXT: lui a1, 1015679
217+
; RV32I-NEXT: addi a1, a1, 2039
218+
; RV32I-NEXT: tail __mulsi3
219+
;
220+
; RV64I-LABEL: muli32_0xf7f7f7f7:
221+
; RV64I: # %bb.0:
222+
; RV64I-NEXT: addi sp, sp, -16
223+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
224+
; RV64I-NEXT: lui a1, 1015679
225+
; RV64I-NEXT: addiw a1, a1, 2039
226+
; RV64I-NEXT: call __muldi3
227+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
228+
; RV64I-NEXT: addi sp, sp, 16
229+
; RV64I-NEXT: ret
230+
%a1 = mul i32 %a, -134744073
231+
ret i32 %a1
232+
}
233+
234+
define i64 @muli64_0xf7f7f7f7(i64 %a) nounwind {
235+
; RV32I-LABEL: muli64_0xf7f7f7f7:
236+
; RV32I: # %bb.0:
237+
; RV32I-NEXT: addi sp, sp, -16
238+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
239+
; RV32I-NEXT: lui a2, 1015679
240+
; RV32I-NEXT: addi a2, a2, 2039
241+
; RV32I-NEXT: li a3, -1
242+
; RV32I-NEXT: call __muldi3
243+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
244+
; RV32I-NEXT: addi sp, sp, 16
245+
; RV32I-NEXT: ret
246+
;
247+
; RV64I-LABEL: muli64_0xf7f7f7f7:
248+
; RV64I: # %bb.0:
249+
; RV64I-NEXT: lui a1, 1015679
250+
; RV64I-NEXT: addiw a1, a1, 2039
251+
; RV64I-NEXT: tail __muldi3
252+
%a1 = mul i64 %a, -134744073
253+
ret i64 %a1
254+
}

0 commit comments

Comments
 (0)