@@ -2596,3 +2596,179 @@ entry:
25962596 tail call void asm sideeffect "li s4, 0" , "~{s4}" ()
25972597 ret void
25982598}
2599+
2600+ define void @varargs (...) {
2601+ ; RV32I-LABEL: varargs:
2602+ ; RV32I: # %bb.0:
2603+ ; RV32I-NEXT: addi sp, sp, -48
2604+ ; RV32I-NEXT: .cfi_def_cfa_offset 48
2605+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2606+ ; RV32I-NEXT: .cfi_offset ra, -36
2607+ ; RV32I-NEXT: sw a7, 44(sp)
2608+ ; RV32I-NEXT: sw a6, 40(sp)
2609+ ; RV32I-NEXT: sw a5, 36(sp)
2610+ ; RV32I-NEXT: sw a4, 32(sp)
2611+ ; RV32I-NEXT: sw a3, 28(sp)
2612+ ; RV32I-NEXT: sw a2, 24(sp)
2613+ ; RV32I-NEXT: sw a1, 20(sp)
2614+ ; RV32I-NEXT: sw a0, 16(sp)
2615+ ; RV32I-NEXT: call callee@plt
2616+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2617+ ; RV32I-NEXT: addi sp, sp, 48
2618+ ; RV32I-NEXT: ret
2619+ ;
2620+ ; RV32I-WITH-FP-LABEL: varargs:
2621+ ; RV32I-WITH-FP: # %bb.0:
2622+ ; RV32I-WITH-FP-NEXT: addi sp, sp, -48
2623+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa_offset 48
2624+ ; RV32I-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2625+ ; RV32I-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2626+ ; RV32I-WITH-FP-NEXT: .cfi_offset ra, -36
2627+ ; RV32I-WITH-FP-NEXT: .cfi_offset s0, -40
2628+ ; RV32I-WITH-FP-NEXT: addi s0, sp, 16
2629+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa s0, 32
2630+ ; RV32I-WITH-FP-NEXT: sw a7, 28(s0)
2631+ ; RV32I-WITH-FP-NEXT: sw a6, 24(s0)
2632+ ; RV32I-WITH-FP-NEXT: sw a5, 20(s0)
2633+ ; RV32I-WITH-FP-NEXT: sw a4, 16(s0)
2634+ ; RV32I-WITH-FP-NEXT: sw a3, 12(s0)
2635+ ; RV32I-WITH-FP-NEXT: sw a2, 8(s0)
2636+ ; RV32I-WITH-FP-NEXT: sw a1, 4(s0)
2637+ ; RV32I-WITH-FP-NEXT: sw a0, 0(s0)
2638+ ; RV32I-WITH-FP-NEXT: call callee@plt
2639+ ; RV32I-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2640+ ; RV32I-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2641+ ; RV32I-WITH-FP-NEXT: addi sp, sp, 48
2642+ ; RV32I-WITH-FP-NEXT: ret
2643+ ;
2644+ ; RV32IZCMP-LABEL: varargs:
2645+ ; RV32IZCMP: # %bb.0:
2646+ ; RV32IZCMP-NEXT: addi sp, sp, -48
2647+ ; RV32IZCMP-NEXT: .cfi_def_cfa_offset 48
2648+ ; RV32IZCMP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2649+ ; RV32IZCMP-NEXT: .cfi_offset ra, -36
2650+ ; RV32IZCMP-NEXT: sw a7, 44(sp)
2651+ ; RV32IZCMP-NEXT: sw a6, 40(sp)
2652+ ; RV32IZCMP-NEXT: sw a5, 36(sp)
2653+ ; RV32IZCMP-NEXT: sw a4, 32(sp)
2654+ ; RV32IZCMP-NEXT: sw a3, 28(sp)
2655+ ; RV32IZCMP-NEXT: sw a2, 24(sp)
2656+ ; RV32IZCMP-NEXT: sw a1, 20(sp)
2657+ ; RV32IZCMP-NEXT: sw a0, 16(sp)
2658+ ; RV32IZCMP-NEXT: call callee@plt
2659+ ; RV32IZCMP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2660+ ; RV32IZCMP-NEXT: addi sp, sp, 48
2661+ ; RV32IZCMP-NEXT: ret
2662+ ;
2663+ ; RV32IZCMP-WITH-FP-LABEL: varargs:
2664+ ; RV32IZCMP-WITH-FP: # %bb.0:
2665+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, -48
2666+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 48
2667+ ; RV32IZCMP-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2668+ ; RV32IZCMP-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2669+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset ra, -36
2670+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s0, -40
2671+ ; RV32IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2672+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 32
2673+ ; RV32IZCMP-WITH-FP-NEXT: sw a7, 28(s0)
2674+ ; RV32IZCMP-WITH-FP-NEXT: sw a6, 24(s0)
2675+ ; RV32IZCMP-WITH-FP-NEXT: sw a5, 20(s0)
2676+ ; RV32IZCMP-WITH-FP-NEXT: sw a4, 16(s0)
2677+ ; RV32IZCMP-WITH-FP-NEXT: sw a3, 12(s0)
2678+ ; RV32IZCMP-WITH-FP-NEXT: sw a2, 8(s0)
2679+ ; RV32IZCMP-WITH-FP-NEXT: sw a1, 4(s0)
2680+ ; RV32IZCMP-WITH-FP-NEXT: sw a0, 0(s0)
2681+ ; RV32IZCMP-WITH-FP-NEXT: call callee@plt
2682+ ; RV32IZCMP-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2683+ ; RV32IZCMP-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2684+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, 48
2685+ ; RV32IZCMP-WITH-FP-NEXT: ret
2686+ ;
2687+ ; RV64I-LABEL: varargs:
2688+ ; RV64I: # %bb.0:
2689+ ; RV64I-NEXT: addi sp, sp, -80
2690+ ; RV64I-NEXT: .cfi_def_cfa_offset 80
2691+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2692+ ; RV64I-NEXT: .cfi_offset ra, -72
2693+ ; RV64I-NEXT: sd a7, 72(sp)
2694+ ; RV64I-NEXT: sd a6, 64(sp)
2695+ ; RV64I-NEXT: sd a5, 56(sp)
2696+ ; RV64I-NEXT: sd a4, 48(sp)
2697+ ; RV64I-NEXT: sd a3, 40(sp)
2698+ ; RV64I-NEXT: sd a2, 32(sp)
2699+ ; RV64I-NEXT: sd a1, 24(sp)
2700+ ; RV64I-NEXT: sd a0, 16(sp)
2701+ ; RV64I-NEXT: call callee@plt
2702+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2703+ ; RV64I-NEXT: addi sp, sp, 80
2704+ ; RV64I-NEXT: ret
2705+ ;
2706+ ; RV64I-WITH-FP-LABEL: varargs:
2707+ ; RV64I-WITH-FP: # %bb.0:
2708+ ; RV64I-WITH-FP-NEXT: addi sp, sp, -80
2709+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa_offset 80
2710+ ; RV64I-WITH-FP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2711+ ; RV64I-WITH-FP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
2712+ ; RV64I-WITH-FP-NEXT: .cfi_offset ra, -72
2713+ ; RV64I-WITH-FP-NEXT: .cfi_offset s0, -80
2714+ ; RV64I-WITH-FP-NEXT: addi s0, sp, 16
2715+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa s0, 64
2716+ ; RV64I-WITH-FP-NEXT: sd a7, 56(s0)
2717+ ; RV64I-WITH-FP-NEXT: sd a6, 48(s0)
2718+ ; RV64I-WITH-FP-NEXT: sd a5, 40(s0)
2719+ ; RV64I-WITH-FP-NEXT: sd a4, 32(s0)
2720+ ; RV64I-WITH-FP-NEXT: sd a3, 24(s0)
2721+ ; RV64I-WITH-FP-NEXT: sd a2, 16(s0)
2722+ ; RV64I-WITH-FP-NEXT: sd a1, 8(s0)
2723+ ; RV64I-WITH-FP-NEXT: sd a0, 0(s0)
2724+ ; RV64I-WITH-FP-NEXT: call callee@plt
2725+ ; RV64I-WITH-FP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2726+ ; RV64I-WITH-FP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
2727+ ; RV64I-WITH-FP-NEXT: addi sp, sp, 80
2728+ ; RV64I-WITH-FP-NEXT: ret
2729+ ;
2730+ ; RV64IZCMP-LABEL: varargs:
2731+ ; RV64IZCMP: # %bb.0:
2732+ ; RV64IZCMP-NEXT: addi sp, sp, -80
2733+ ; RV64IZCMP-NEXT: .cfi_def_cfa_offset 80
2734+ ; RV64IZCMP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2735+ ; RV64IZCMP-NEXT: .cfi_offset ra, -72
2736+ ; RV64IZCMP-NEXT: sd a7, 72(sp)
2737+ ; RV64IZCMP-NEXT: sd a6, 64(sp)
2738+ ; RV64IZCMP-NEXT: sd a5, 56(sp)
2739+ ; RV64IZCMP-NEXT: sd a4, 48(sp)
2740+ ; RV64IZCMP-NEXT: sd a3, 40(sp)
2741+ ; RV64IZCMP-NEXT: sd a2, 32(sp)
2742+ ; RV64IZCMP-NEXT: sd a1, 24(sp)
2743+ ; RV64IZCMP-NEXT: sd a0, 16(sp)
2744+ ; RV64IZCMP-NEXT: call callee@plt
2745+ ; RV64IZCMP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2746+ ; RV64IZCMP-NEXT: addi sp, sp, 80
2747+ ; RV64IZCMP-NEXT: ret
2748+ ;
2749+ ; RV64IZCMP-WITH-FP-LABEL: varargs:
2750+ ; RV64IZCMP-WITH-FP: # %bb.0:
2751+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, -80
2752+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 80
2753+ ; RV64IZCMP-WITH-FP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2754+ ; RV64IZCMP-WITH-FP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
2755+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset ra, -72
2756+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s0, -80
2757+ ; RV64IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2758+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 64
2759+ ; RV64IZCMP-WITH-FP-NEXT: sd a7, 56(s0)
2760+ ; RV64IZCMP-WITH-FP-NEXT: sd a6, 48(s0)
2761+ ; RV64IZCMP-WITH-FP-NEXT: sd a5, 40(s0)
2762+ ; RV64IZCMP-WITH-FP-NEXT: sd a4, 32(s0)
2763+ ; RV64IZCMP-WITH-FP-NEXT: sd a3, 24(s0)
2764+ ; RV64IZCMP-WITH-FP-NEXT: sd a2, 16(s0)
2765+ ; RV64IZCMP-WITH-FP-NEXT: sd a1, 8(s0)
2766+ ; RV64IZCMP-WITH-FP-NEXT: sd a0, 0(s0)
2767+ ; RV64IZCMP-WITH-FP-NEXT: call callee@plt
2768+ ; RV64IZCMP-WITH-FP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2769+ ; RV64IZCMP-WITH-FP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
2770+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, 80
2771+ ; RV64IZCMP-WITH-FP-NEXT: ret
2772+ call void @callee ()
2773+ ret void
2774+ }
0 commit comments