Skip to content

Commit 282ab54

Browse files
committed
[RISCV] Add additional mul strength reduction coverage with xtheadba
1 parent b4a0fd4 commit 282ab54

File tree

1 file changed

+177
-0
lines changed

1 file changed

+177
-0
lines changed

llvm/test/CodeGen/RISCV/rv64xtheadba.ll

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,183 @@ define i64 @addmul72(i64 %a, i64 %b) {
252252
ret i64 %d
253253
}
254254

255+
define i64 @mul11(i64 %a) {
256+
; RV64I-LABEL: mul11:
257+
; RV64I: # %bb.0:
258+
; RV64I-NEXT: li a1, 11
259+
; RV64I-NEXT: mul a0, a0, a1
260+
; RV64I-NEXT: ret
261+
;
262+
; RV64XTHEADBA-LABEL: mul11:
263+
; RV64XTHEADBA: # %bb.0:
264+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 2
265+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 1
266+
; RV64XTHEADBA-NEXT: ret
267+
%c = mul i64 %a, 11
268+
ret i64 %c
269+
}
270+
271+
define i64 @mul19(i64 %a) {
272+
; RV64I-LABEL: mul19:
273+
; RV64I: # %bb.0:
274+
; RV64I-NEXT: li a1, 19
275+
; RV64I-NEXT: mul a0, a0, a1
276+
; RV64I-NEXT: ret
277+
;
278+
; RV64XTHEADBA-LABEL: mul19:
279+
; RV64XTHEADBA: # %bb.0:
280+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 3
281+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 1
282+
; RV64XTHEADBA-NEXT: ret
283+
%c = mul i64 %a, 19
284+
ret i64 %c
285+
}
286+
287+
define i64 @mul13(i64 %a) {
288+
; RV64I-LABEL: mul13:
289+
; RV64I: # %bb.0:
290+
; RV64I-NEXT: li a1, 13
291+
; RV64I-NEXT: mul a0, a0, a1
292+
; RV64I-NEXT: ret
293+
;
294+
; RV64XTHEADBA-LABEL: mul13:
295+
; RV64XTHEADBA: # %bb.0:
296+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 1
297+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
298+
; RV64XTHEADBA-NEXT: ret
299+
%c = mul i64 %a, 13
300+
ret i64 %c
301+
}
302+
303+
define i64 @mul21(i64 %a) {
304+
; RV64I-LABEL: mul21:
305+
; RV64I: # %bb.0:
306+
; RV64I-NEXT: li a1, 21
307+
; RV64I-NEXT: mul a0, a0, a1
308+
; RV64I-NEXT: ret
309+
;
310+
; RV64XTHEADBA-LABEL: mul21:
311+
; RV64XTHEADBA: # %bb.0:
312+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 2
313+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
314+
; RV64XTHEADBA-NEXT: ret
315+
%c = mul i64 %a, 21
316+
ret i64 %c
317+
}
318+
319+
define i64 @mul37(i64 %a) {
320+
; RV64I-LABEL: mul37:
321+
; RV64I: # %bb.0:
322+
; RV64I-NEXT: li a1, 37
323+
; RV64I-NEXT: mul a0, a0, a1
324+
; RV64I-NEXT: ret
325+
;
326+
; RV64XTHEADBA-LABEL: mul37:
327+
; RV64XTHEADBA: # %bb.0:
328+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 3
329+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
330+
; RV64XTHEADBA-NEXT: ret
331+
%c = mul i64 %a, 37
332+
ret i64 %c
333+
}
334+
335+
define i64 @mul25(i64 %a) {
336+
; RV64I-LABEL: mul25:
337+
; RV64I: # %bb.0:
338+
; RV64I-NEXT: li a1, 25
339+
; RV64I-NEXT: mul a0, a0, a1
340+
; RV64I-NEXT: ret
341+
;
342+
; RV64XTHEADBA-LABEL: mul25:
343+
; RV64XTHEADBA: # %bb.0:
344+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 2
345+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 2
346+
; RV64XTHEADBA-NEXT: ret
347+
%c = mul i64 %a, 25
348+
ret i64 %c
349+
}
350+
351+
define i64 @mul41(i64 %a) {
352+
; RV64I-LABEL: mul41:
353+
; RV64I: # %bb.0:
354+
; RV64I-NEXT: li a1, 41
355+
; RV64I-NEXT: mul a0, a0, a1
356+
; RV64I-NEXT: ret
357+
;
358+
; RV64XTHEADBA-LABEL: mul41:
359+
; RV64XTHEADBA: # %bb.0:
360+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 2
361+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
362+
; RV64XTHEADBA-NEXT: ret
363+
%c = mul i64 %a, 41
364+
ret i64 %c
365+
}
366+
367+
define i64 @mul73(i64 %a) {
368+
; RV64I-LABEL: mul73:
369+
; RV64I: # %bb.0:
370+
; RV64I-NEXT: li a1, 73
371+
; RV64I-NEXT: mul a0, a0, a1
372+
; RV64I-NEXT: ret
373+
;
374+
; RV64XTHEADBA-LABEL: mul73:
375+
; RV64XTHEADBA: # %bb.0:
376+
; RV64XTHEADBA-NEXT: th.addsl a1, a0, a0, 3
377+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
378+
; RV64XTHEADBA-NEXT: ret
379+
%c = mul i64 %a, 73
380+
ret i64 %c
381+
}
382+
383+
define i64 @mul27(i64 %a) {
384+
; RV64I-LABEL: mul27:
385+
; RV64I: # %bb.0:
386+
; RV64I-NEXT: li a1, 27
387+
; RV64I-NEXT: mul a0, a0, a1
388+
; RV64I-NEXT: ret
389+
;
390+
; RV64XTHEADBA-LABEL: mul27:
391+
; RV64XTHEADBA: # %bb.0:
392+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 3
393+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 1
394+
; RV64XTHEADBA-NEXT: ret
395+
%c = mul i64 %a, 27
396+
ret i64 %c
397+
}
398+
399+
define i64 @mul45(i64 %a) {
400+
; RV64I-LABEL: mul45:
401+
; RV64I: # %bb.0:
402+
; RV64I-NEXT: li a1, 45
403+
; RV64I-NEXT: mul a0, a0, a1
404+
; RV64I-NEXT: ret
405+
;
406+
; RV64XTHEADBA-LABEL: mul45:
407+
; RV64XTHEADBA: # %bb.0:
408+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 3
409+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 2
410+
; RV64XTHEADBA-NEXT: ret
411+
%c = mul i64 %a, 45
412+
ret i64 %c
413+
}
414+
415+
define i64 @mul81(i64 %a) {
416+
; RV64I-LABEL: mul81:
417+
; RV64I: # %bb.0:
418+
; RV64I-NEXT: li a1, 81
419+
; RV64I-NEXT: mul a0, a0, a1
420+
; RV64I-NEXT: ret
421+
;
422+
; RV64XTHEADBA-LABEL: mul81:
423+
; RV64XTHEADBA: # %bb.0:
424+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 3
425+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a0, 3
426+
; RV64XTHEADBA-NEXT: ret
427+
%c = mul i64 %a, 81
428+
ret i64 %c
429+
}
430+
431+
255432
define i64 @mul96(i64 %a) {
256433
; RV64I-LABEL: mul96:
257434
; RV64I: # %bb.0:

0 commit comments

Comments
 (0)