11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; testd and testf look for bonding only.
32; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
43; RUN: | FileCheck %s -check-prefix=RV32I
5- ; RUN: llc -mtriple=riscv32 -target-abi ilp32d -mattr=+d -verify-machineinstrs < %s \
4+ ; RUN: llc -mtriple=riscv32 -target-abi= ilp32d -mattr=+d -verify-machineinstrs < %s \
65; RUN: | FileCheck %s -check-prefix=RV32D
76; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
87; RUN: | FileCheck %s -check-prefix=RV64I
9- ; RUN: llc -mtriple=riscv64 -target-abi lp64d -mattr=+d -verify-machineinstrs < %s \
8+ ; RUN: llc -mtriple=riscv64 -target-abi= lp64d -mattr=+d -verify-machineinstrs < %s \
109; RUN: | FileCheck %s -check-prefix=RV64D
11- ; RUN: llc -mtriple=riscv32 -mattr=+Xmipslsp -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
10+ ; RUN: llc -mtriple=riscv32 -mattr=+Xmipslsp -use- riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
1211; RUN: | FileCheck %s -check-prefix=RV32I_PAIR
13- ; RUN: llc -mtriple=riscv32 -target-abi ilp32d -mattr=+d,+Xmipslsp -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
12+ ; RUN: llc -mtriple=riscv32 -target-abi= ilp32d -mattr=+d,+Xmipslsp -use -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
1413; RUN: | FileCheck %s -check-prefix=RV32D_PAIR
15- ; RUN: llc -mtriple=riscv64 -mattr=+Xmipslsp -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
14+ ; RUN: llc -mtriple=riscv64 -mattr=+Xmipslsp -use- riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
1615; RUN: | FileCheck %s -check-prefix=RV64I_PAIR
17- ; RUN: llc -mtriple=riscv64 -mcpu mips-p8700 -mattr=+Xmipslsp -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
16+ ; RUN: llc -mtriple=riscv64 -mcpu= mips-p8700 -mattr=+Xmipslsp -use -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
1817; RUN: | FileCheck %s -check-prefix=RV64P_8700
19- ; RUN: llc -mtriple=riscv64 -target-abi lp64d -mattr=+d,+Xmipslsp -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
18+ ; RUN: llc -mtriple=riscv64 -target-abi= lp64d -mattr=+d,+Xmipslsp -use -riscv-mips-load-store-pairs=1 -verify-machineinstrs < %s \
2019; RUN: | FileCheck %s -check-prefix=RV64D_PAIR
21- ; RUN: llc -mtriple=riscv64 -target-abi lp64d -mattr=+d -verify-machineinstrs < %s \
22- ; RUN: | FileCheck %s -check-prefix=RV64D_8700
20+ ; RUN: llc -mtriple=riscv64 -target-abi= lp64d -mattr=+d -verify-machineinstrs < %s \
21+ ; RUN: | FileCheck %s -check-prefix=RV64D_NOPAIR
2322
2423define dso_local void @testi (i8** nocapture noundef readonly %a ) local_unnamed_addr #0 {
2524; RV32I-LABEL: testi:
@@ -268,35 +267,35 @@ define dso_local void @testi(i8** nocapture noundef readonly %a) local_unnamed_a
268267; RV64D_PAIR-NEXT: .cfi_def_cfa_offset 0
269268; RV64D_PAIR-NEXT: ret
270269;
271- ; RV64D_8700 -LABEL: testi:
272- ; RV64D_8700 : # %bb.0: # %entry
273- ; RV64D_8700 -NEXT: addi sp, sp, -32
274- ; RV64D_8700 -NEXT: .cfi_def_cfa_offset 32
275- ; RV64D_8700 -NEXT: sd s2, 24(sp) # 8-byte Folded Spill
276- ; RV64D_8700 -NEXT: sd s3, 16(sp) # 8-byte Folded Spill
277- ; RV64D_8700 -NEXT: sd s4, 8(sp) # 8-byte Folded Spill
278- ; RV64D_8700 -NEXT: sd s5, 0(sp) # 8-byte Folded Spill
279- ; RV64D_8700 -NEXT: .cfi_offset s2, -8
280- ; RV64D_8700 -NEXT: .cfi_offset s3, -16
281- ; RV64D_8700 -NEXT: .cfi_offset s4, -24
282- ; RV64D_8700 -NEXT: .cfi_offset s5, -32
283- ; RV64D_8700 -NEXT: ld s3, 0(a0)
284- ; RV64D_8700 -NEXT: ld s2, 8(a0)
285- ; RV64D_8700 -NEXT: ld s5, 16(a0)
286- ; RV64D_8700 -NEXT: ld s4, 24(a0)
287- ; RV64D_8700 -NEXT: #APP
288- ; RV64D_8700 -NEXT: #NO_APP
289- ; RV64D_8700 -NEXT: ld s2, 24(sp) # 8-byte Folded Reload
290- ; RV64D_8700 -NEXT: ld s3, 16(sp) # 8-byte Folded Reload
291- ; RV64D_8700 -NEXT: ld s4, 8(sp) # 8-byte Folded Reload
292- ; RV64D_8700 -NEXT: ld s5, 0(sp) # 8-byte Folded Reload
293- ; RV64D_8700 -NEXT: .cfi_restore s2
294- ; RV64D_8700 -NEXT: .cfi_restore s3
295- ; RV64D_8700 -NEXT: .cfi_restore s4
296- ; RV64D_8700 -NEXT: .cfi_restore s5
297- ; RV64D_8700 -NEXT: addi sp, sp, 32
298- ; RV64D_8700 -NEXT: .cfi_def_cfa_offset 0
299- ; RV64D_8700 -NEXT: ret
270+ ; RV64D_NOPAIR -LABEL: testi:
271+ ; RV64D_NOPAIR : # %bb.0: # %entry
272+ ; RV64D_NOPAIR -NEXT: addi sp, sp, -32
273+ ; RV64D_NOPAIR -NEXT: .cfi_def_cfa_offset 32
274+ ; RV64D_NOPAIR -NEXT: sd s2, 24(sp) # 8-byte Folded Spill
275+ ; RV64D_NOPAIR -NEXT: sd s3, 16(sp) # 8-byte Folded Spill
276+ ; RV64D_NOPAIR -NEXT: sd s4, 8(sp) # 8-byte Folded Spill
277+ ; RV64D_NOPAIR -NEXT: sd s5, 0(sp) # 8-byte Folded Spill
278+ ; RV64D_NOPAIR -NEXT: .cfi_offset s2, -8
279+ ; RV64D_NOPAIR -NEXT: .cfi_offset s3, -16
280+ ; RV64D_NOPAIR -NEXT: .cfi_offset s4, -24
281+ ; RV64D_NOPAIR -NEXT: .cfi_offset s5, -32
282+ ; RV64D_NOPAIR -NEXT: ld s3, 0(a0)
283+ ; RV64D_NOPAIR -NEXT: ld s2, 8(a0)
284+ ; RV64D_NOPAIR -NEXT: ld s5, 16(a0)
285+ ; RV64D_NOPAIR -NEXT: ld s4, 24(a0)
286+ ; RV64D_NOPAIR -NEXT: #APP
287+ ; RV64D_NOPAIR -NEXT: #NO_APP
288+ ; RV64D_NOPAIR -NEXT: ld s2, 24(sp) # 8-byte Folded Reload
289+ ; RV64D_NOPAIR -NEXT: ld s3, 16(sp) # 8-byte Folded Reload
290+ ; RV64D_NOPAIR -NEXT: ld s4, 8(sp) # 8-byte Folded Reload
291+ ; RV64D_NOPAIR -NEXT: ld s5, 0(sp) # 8-byte Folded Reload
292+ ; RV64D_NOPAIR -NEXT: .cfi_restore s2
293+ ; RV64D_NOPAIR -NEXT: .cfi_restore s3
294+ ; RV64D_NOPAIR -NEXT: .cfi_restore s4
295+ ; RV64D_NOPAIR -NEXT: .cfi_restore s5
296+ ; RV64D_NOPAIR -NEXT: addi sp, sp, 32
297+ ; RV64D_NOPAIR -NEXT: .cfi_def_cfa_offset 0
298+ ; RV64D_NOPAIR -NEXT: ret
300299entry:
301300 %arrayidx = getelementptr inbounds i8* , i8** %a , i64 1
302301 %0 = load i8* , i8** %arrayidx , align 8
@@ -308,203 +307,3 @@ entry:
308307 tail call void asm sideeffect "" , "{x18},{x19},{x20},{x21}" (i8* %0 , i8* %1 , i8* %2 , i8* %3 )
309308 ret void
310309}
311-
312-
313- define dso_local void @testf (float * nocapture noundef readonly %a ) local_unnamed_addr #0 {
314- ; RV32I-LABEL: testf:
315- ; RV32I: # %bb.0: # %entry
316- ; RV32I-NEXT: lw a3, 0(a0)
317- ; RV32I-NEXT: lw a4, 4(a0)
318- ; RV32I-NEXT: lw a2, 8(a0)
319- ; RV32I-NEXT: lw a1, 12(a0)
320- ; RV32I-NEXT: mv a0, a4
321- ; RV32I-NEXT: tail sinkf
322- ;
323- ; RV32D-LABEL: testf:
324- ; RV32D: # %bb.0: # %entry
325- ; RV32D-NEXT: flw fa3, 0(a0)
326- ; RV32D-NEXT: flw fa0, 4(a0)
327- ; RV32D-NEXT: flw fa2, 8(a0)
328- ; RV32D-NEXT: flw fa1, 12(a0)
329- ; RV32D-NEXT: tail sinkf
330- ;
331- ; RV64I-LABEL: testf:
332- ; RV64I: # %bb.0: # %entry
333- ; RV64I-NEXT: lw a3, 0(a0)
334- ; RV64I-NEXT: lw a4, 4(a0)
335- ; RV64I-NEXT: lw a2, 8(a0)
336- ; RV64I-NEXT: lw a1, 12(a0)
337- ; RV64I-NEXT: mv a0, a4
338- ; RV64I-NEXT: tail sinkf
339- ;
340- ; RV64D-LABEL: testf:
341- ; RV64D: # %bb.0: # %entry
342- ; RV64D-NEXT: flw fa3, 0(a0)
343- ; RV64D-NEXT: flw fa0, 4(a0)
344- ; RV64D-NEXT: flw fa2, 8(a0)
345- ; RV64D-NEXT: flw fa1, 12(a0)
346- ; RV64D-NEXT: tail sinkf
347- ;
348- ; RV32I_PAIR-LABEL: testf:
349- ; RV32I_PAIR: # %bb.0: # %entry
350- ; RV32I_PAIR-NEXT: lw a3, 0(a0)
351- ; RV32I_PAIR-NEXT: lw a4, 4(a0)
352- ; RV32I_PAIR-NEXT: lw a2, 8(a0)
353- ; RV32I_PAIR-NEXT: lw a1, 12(a0)
354- ; RV32I_PAIR-NEXT: mv a0, a4
355- ; RV32I_PAIR-NEXT: tail sinkf
356- ;
357- ; RV32D_PAIR-LABEL: testf:
358- ; RV32D_PAIR: # %bb.0: # %entry
359- ; RV32D_PAIR-NEXT: flw fa3, 0(a0)
360- ; RV32D_PAIR-NEXT: flw fa0, 4(a0)
361- ; RV32D_PAIR-NEXT: flw fa2, 8(a0)
362- ; RV32D_PAIR-NEXT: flw fa1, 12(a0)
363- ; RV32D_PAIR-NEXT: tail sinkf
364- ;
365- ; RV64I_PAIR-LABEL: testf:
366- ; RV64I_PAIR: # %bb.0: # %entry
367- ; RV64I_PAIR-NEXT: lw a3, 0(a0)
368- ; RV64I_PAIR-NEXT: lw a4, 4(a0)
369- ; RV64I_PAIR-NEXT: lw a2, 8(a0)
370- ; RV64I_PAIR-NEXT: lw a1, 12(a0)
371- ; RV64I_PAIR-NEXT: mv a0, a4
372- ; RV64I_PAIR-NEXT: tail sinkf
373- ;
374- ; RV64P_8700-LABEL: testf:
375- ; RV64P_8700: # %bb.0: # %entry
376- ; RV64P_8700-NEXT: flw fa3, 0(a0)
377- ; RV64P_8700-NEXT: flw fa0, 4(a0)
378- ; RV64P_8700-NEXT: flw fa2, 8(a0)
379- ; RV64P_8700-NEXT: flw fa1, 12(a0)
380- ; RV64P_8700-NEXT: tail sinkf
381- ;
382- ; RV64D_PAIR-LABEL: testf:
383- ; RV64D_PAIR: # %bb.0: # %entry
384- ; RV64D_PAIR-NEXT: flw fa3, 0(a0)
385- ; RV64D_PAIR-NEXT: flw fa0, 4(a0)
386- ; RV64D_PAIR-NEXT: flw fa2, 8(a0)
387- ; RV64D_PAIR-NEXT: flw fa1, 12(a0)
388- ; RV64D_PAIR-NEXT: tail sinkf
389- ;
390- ; RV64D_8700-LABEL: testf:
391- ; RV64D_8700: # %bb.0: # %entry
392- ; RV64D_8700-NEXT: flw fa3, 0(a0)
393- ; RV64D_8700-NEXT: flw fa0, 4(a0)
394- ; RV64D_8700-NEXT: flw fa2, 8(a0)
395- ; RV64D_8700-NEXT: flw fa1, 12(a0)
396- ; RV64D_8700-NEXT: tail sinkf
397- entry:
398- %arrayidx = getelementptr inbounds float , float * %a , i64 1
399- %0 = load float , float * %arrayidx , align 4
400- %arrayidx1 = getelementptr inbounds float , float * %a , i64 3
401- %1 = load float , float * %arrayidx1 , align 4
402- %arrayidx2 = getelementptr inbounds float , float * %a , i64 2
403- %2 = load float , float * %arrayidx2 , align 4
404- %3 = load float , float * %a , align 4
405- tail call void @sinkf (float noundef %0 , float noundef %1 , float noundef %2 , float noundef %3 )
406- ret void
407- }
408-
409- declare dso_local void @sinkf (float noundef, float noundef, float noundef, float noundef) local_unnamed_addr
410-
411- define dso_local void @testd (double * nocapture noundef readonly %a ) local_unnamed_addr #0 {
412- ; RV32I-LABEL: testd:
413- ; RV32I: # %bb.0: # %entry
414- ; RV32I-NEXT: lw a4, 16(a0)
415- ; RV32I-NEXT: lw a5, 20(a0)
416- ; RV32I-NEXT: lw a2, 24(a0)
417- ; RV32I-NEXT: lw a3, 28(a0)
418- ; RV32I-NEXT: lw a6, 0(a0)
419- ; RV32I-NEXT: lw a7, 4(a0)
420- ; RV32I-NEXT: lw t0, 8(a0)
421- ; RV32I-NEXT: lw a1, 12(a0)
422- ; RV32I-NEXT: mv a0, t0
423- ; RV32I-NEXT: tail sinkd
424- ;
425- ; RV32D-LABEL: testd:
426- ; RV32D: # %bb.0: # %entry
427- ; RV32D-NEXT: fld fa3, 0(a0)
428- ; RV32D-NEXT: fld fa0, 8(a0)
429- ; RV32D-NEXT: fld fa2, 16(a0)
430- ; RV32D-NEXT: fld fa1, 24(a0)
431- ; RV32D-NEXT: tail sinkd
432- ;
433- ; RV64I-LABEL: testd:
434- ; RV64I: # %bb.0: # %entry
435- ; RV64I-NEXT: ld a3, 0(a0)
436- ; RV64I-NEXT: ld a4, 8(a0)
437- ; RV64I-NEXT: ld a2, 16(a0)
438- ; RV64I-NEXT: ld a1, 24(a0)
439- ; RV64I-NEXT: mv a0, a4
440- ; RV64I-NEXT: tail sinkd
441- ;
442- ; RV64D-LABEL: testd:
443- ; RV64D: # %bb.0: # %entry
444- ; RV64D-NEXT: fld fa3, 0(a0)
445- ; RV64D-NEXT: fld fa0, 8(a0)
446- ; RV64D-NEXT: fld fa2, 16(a0)
447- ; RV64D-NEXT: fld fa1, 24(a0)
448- ; RV64D-NEXT: tail sinkd
449- ;
450- ; RV32I_PAIR-LABEL: testd:
451- ; RV32I_PAIR: # %bb.0: # %entry
452- ; RV32I_PAIR-NEXT: mips.lwp a4, a5, 16(a0)
453- ; RV32I_PAIR-NEXT: mips.lwp a2, a3, 24(a0)
454- ; RV32I_PAIR-NEXT: mips.lwp a6, a7, 0(a0)
455- ; RV32I_PAIR-NEXT: mips.lwp a0, a1, 8(a0)
456- ; RV32I_PAIR-NEXT: tail sinkd
457- ;
458- ; RV32D_PAIR-LABEL: testd:
459- ; RV32D_PAIR: # %bb.0: # %entry
460- ; RV32D_PAIR-NEXT: fld fa3, 0(a0)
461- ; RV32D_PAIR-NEXT: fld fa0, 8(a0)
462- ; RV32D_PAIR-NEXT: fld fa2, 16(a0)
463- ; RV32D_PAIR-NEXT: fld fa1, 24(a0)
464- ; RV32D_PAIR-NEXT: tail sinkd
465- ;
466- ; RV64I_PAIR-LABEL: testd:
467- ; RV64I_PAIR: # %bb.0: # %entry
468- ; RV64I_PAIR-NEXT: ld a3, 0(a0)
469- ; RV64I_PAIR-NEXT: ld a4, 8(a0)
470- ; RV64I_PAIR-NEXT: ld a2, 16(a0)
471- ; RV64I_PAIR-NEXT: ld a1, 24(a0)
472- ; RV64I_PAIR-NEXT: mv a0, a4
473- ; RV64I_PAIR-NEXT: tail sinkd
474- ;
475- ; RV64P_8700-LABEL: testd:
476- ; RV64P_8700: # %bb.0: # %entry
477- ; RV64P_8700-NEXT: fld fa3, 0(a0)
478- ; RV64P_8700-NEXT: fld fa0, 8(a0)
479- ; RV64P_8700-NEXT: fld fa2, 16(a0)
480- ; RV64P_8700-NEXT: fld fa1, 24(a0)
481- ; RV64P_8700-NEXT: tail sinkd
482- ;
483- ; RV64D_PAIR-LABEL: testd:
484- ; RV64D_PAIR: # %bb.0: # %entry
485- ; RV64D_PAIR-NEXT: fld fa3, 0(a0)
486- ; RV64D_PAIR-NEXT: fld fa0, 8(a0)
487- ; RV64D_PAIR-NEXT: fld fa2, 16(a0)
488- ; RV64D_PAIR-NEXT: fld fa1, 24(a0)
489- ; RV64D_PAIR-NEXT: tail sinkd
490- ;
491- ; RV64D_8700-LABEL: testd:
492- ; RV64D_8700: # %bb.0: # %entry
493- ; RV64D_8700-NEXT: fld fa3, 0(a0)
494- ; RV64D_8700-NEXT: fld fa0, 8(a0)
495- ; RV64D_8700-NEXT: fld fa2, 16(a0)
496- ; RV64D_8700-NEXT: fld fa1, 24(a0)
497- ; RV64D_8700-NEXT: tail sinkd
498- entry:
499- %arrayidx = getelementptr inbounds double , double * %a , i64 1
500- %0 = load double , double * %arrayidx , align 8
501- %arrayidx1 = getelementptr inbounds double , double * %a , i64 3
502- %1 = load double , double * %arrayidx1 , align 8
503- %arrayidx2 = getelementptr inbounds double , double * %a , i64 2
504- %2 = load double , double * %arrayidx2 , align 8
505- %3 = load double , double * %a , align 8
506- tail call void @sinkd (double noundef %0 , double noundef %1 , double noundef %2 , double noundef %3 )
507- ret void
508- }
509-
510- declare dso_local void @sinkd (double noundef, double noundef, double noundef, double noundef) local_unnamed_addr
0 commit comments