@@ -2597,6 +2597,142 @@ entry:
25972597 ret void
25982598}
25992599
2600+ ; Check .cfi_offset of s11 is correct for Zcmp.
2601+ define void @bar () {
2602+ ; RV32I-LABEL: bar:
2603+ ; RV32I: # %bb.0: # %entry
2604+ ; RV32I-NEXT: addi sp, sp, -16
2605+ ; RV32I-NEXT: .cfi_def_cfa_offset 16
2606+ ; RV32I-NEXT: sw s11, 12(sp) # 4-byte Folded Spill
2607+ ; RV32I-NEXT: .cfi_offset s11, -4
2608+ ; RV32I-NEXT: #APP
2609+ ; RV32I-NEXT: li s11, 0
2610+ ; RV32I-NEXT: #NO_APP
2611+ ; RV32I-NEXT: lw s11, 12(sp) # 4-byte Folded Reload
2612+ ; RV32I-NEXT: addi sp, sp, 16
2613+ ; RV32I-NEXT: ret
2614+ ;
2615+ ; RV32I-WITH-FP-LABEL: bar:
2616+ ; RV32I-WITH-FP: # %bb.0: # %entry
2617+ ; RV32I-WITH-FP-NEXT: addi sp, sp, -16
2618+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa_offset 16
2619+ ; RV32I-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2620+ ; RV32I-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2621+ ; RV32I-WITH-FP-NEXT: sw s11, 4(sp) # 4-byte Folded Spill
2622+ ; RV32I-WITH-FP-NEXT: .cfi_offset ra, -4
2623+ ; RV32I-WITH-FP-NEXT: .cfi_offset s0, -8
2624+ ; RV32I-WITH-FP-NEXT: .cfi_offset s11, -12
2625+ ; RV32I-WITH-FP-NEXT: addi s0, sp, 16
2626+ ; RV32I-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2627+ ; RV32I-WITH-FP-NEXT: #APP
2628+ ; RV32I-WITH-FP-NEXT: li s11, 0
2629+ ; RV32I-WITH-FP-NEXT: #NO_APP
2630+ ; RV32I-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2631+ ; RV32I-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2632+ ; RV32I-WITH-FP-NEXT: lw s11, 4(sp) # 4-byte Folded Reload
2633+ ; RV32I-WITH-FP-NEXT: addi sp, sp, 16
2634+ ; RV32I-WITH-FP-NEXT: ret
2635+ ;
2636+ ; RV32IZCMP-LABEL: bar:
2637+ ; RV32IZCMP: # %bb.0: # %entry
2638+ ; RV32IZCMP-NEXT: cm.push {ra, s0-s11}, -64
2639+ ; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64
2640+ ; RV32IZCMP-NEXT: .cfi_offset s11, -4
2641+ ; RV32IZCMP-NEXT: #APP
2642+ ; RV32IZCMP-NEXT: li s11, 0
2643+ ; RV32IZCMP-NEXT: #NO_APP
2644+ ; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 64
2645+ ;
2646+ ; RV32IZCMP-WITH-FP-LABEL: bar:
2647+ ; RV32IZCMP-WITH-FP: # %bb.0: # %entry
2648+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, -16
2649+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 16
2650+ ; RV32IZCMP-WITH-FP-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2651+ ; RV32IZCMP-WITH-FP-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2652+ ; RV32IZCMP-WITH-FP-NEXT: sw s11, 4(sp) # 4-byte Folded Spill
2653+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset ra, -4
2654+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s0, -8
2655+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_offset s11, -12
2656+ ; RV32IZCMP-WITH-FP-NEXT: addi s0, sp, 16
2657+ ; RV32IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2658+ ; RV32IZCMP-WITH-FP-NEXT: #APP
2659+ ; RV32IZCMP-WITH-FP-NEXT: li s11, 0
2660+ ; RV32IZCMP-WITH-FP-NEXT: #NO_APP
2661+ ; RV32IZCMP-WITH-FP-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2662+ ; RV32IZCMP-WITH-FP-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2663+ ; RV32IZCMP-WITH-FP-NEXT: lw s11, 4(sp) # 4-byte Folded Reload
2664+ ; RV32IZCMP-WITH-FP-NEXT: addi sp, sp, 16
2665+ ; RV32IZCMP-WITH-FP-NEXT: ret
2666+ ;
2667+ ; RV64I-LABEL: bar:
2668+ ; RV64I: # %bb.0: # %entry
2669+ ; RV64I-NEXT: addi sp, sp, -16
2670+ ; RV64I-NEXT: .cfi_def_cfa_offset 16
2671+ ; RV64I-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2672+ ; RV64I-NEXT: .cfi_offset s11, -8
2673+ ; RV64I-NEXT: #APP
2674+ ; RV64I-NEXT: li s11, 0
2675+ ; RV64I-NEXT: #NO_APP
2676+ ; RV64I-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2677+ ; RV64I-NEXT: addi sp, sp, 16
2678+ ; RV64I-NEXT: ret
2679+ ;
2680+ ; RV64I-WITH-FP-LABEL: bar:
2681+ ; RV64I-WITH-FP: # %bb.0: # %entry
2682+ ; RV64I-WITH-FP-NEXT: addi sp, sp, -32
2683+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa_offset 32
2684+ ; RV64I-WITH-FP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
2685+ ; RV64I-WITH-FP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
2686+ ; RV64I-WITH-FP-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2687+ ; RV64I-WITH-FP-NEXT: .cfi_offset ra, -8
2688+ ; RV64I-WITH-FP-NEXT: .cfi_offset s0, -16
2689+ ; RV64I-WITH-FP-NEXT: .cfi_offset s11, -24
2690+ ; RV64I-WITH-FP-NEXT: addi s0, sp, 32
2691+ ; RV64I-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2692+ ; RV64I-WITH-FP-NEXT: #APP
2693+ ; RV64I-WITH-FP-NEXT: li s11, 0
2694+ ; RV64I-WITH-FP-NEXT: #NO_APP
2695+ ; RV64I-WITH-FP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
2696+ ; RV64I-WITH-FP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
2697+ ; RV64I-WITH-FP-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2698+ ; RV64I-WITH-FP-NEXT: addi sp, sp, 32
2699+ ; RV64I-WITH-FP-NEXT: ret
2700+ ;
2701+ ; RV64IZCMP-LABEL: bar:
2702+ ; RV64IZCMP: # %bb.0: # %entry
2703+ ; RV64IZCMP-NEXT: cm.push {ra, s0-s11}, -112
2704+ ; RV64IZCMP-NEXT: .cfi_def_cfa_offset 112
2705+ ; RV64IZCMP-NEXT: .cfi_offset s11, -8
2706+ ; RV64IZCMP-NEXT: #APP
2707+ ; RV64IZCMP-NEXT: li s11, 0
2708+ ; RV64IZCMP-NEXT: #NO_APP
2709+ ; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 112
2710+ ;
2711+ ; RV64IZCMP-WITH-FP-LABEL: bar:
2712+ ; RV64IZCMP-WITH-FP: # %bb.0: # %entry
2713+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, -32
2714+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa_offset 32
2715+ ; RV64IZCMP-WITH-FP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
2716+ ; RV64IZCMP-WITH-FP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
2717+ ; RV64IZCMP-WITH-FP-NEXT: sd s11, 8(sp) # 8-byte Folded Spill
2718+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset ra, -8
2719+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s0, -16
2720+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_offset s11, -24
2721+ ; RV64IZCMP-WITH-FP-NEXT: addi s0, sp, 32
2722+ ; RV64IZCMP-WITH-FP-NEXT: .cfi_def_cfa s0, 0
2723+ ; RV64IZCMP-WITH-FP-NEXT: #APP
2724+ ; RV64IZCMP-WITH-FP-NEXT: li s11, 0
2725+ ; RV64IZCMP-WITH-FP-NEXT: #NO_APP
2726+ ; RV64IZCMP-WITH-FP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
2727+ ; RV64IZCMP-WITH-FP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
2728+ ; RV64IZCMP-WITH-FP-NEXT: ld s11, 8(sp) # 8-byte Folded Reload
2729+ ; RV64IZCMP-WITH-FP-NEXT: addi sp, sp, 32
2730+ ; RV64IZCMP-WITH-FP-NEXT: ret
2731+ entry:
2732+ tail call void asm sideeffect "li s11, 0" , "~{s11}" ()
2733+ ret void
2734+ }
2735+
26002736define void @varargs (...) {
26012737; RV32I-LABEL: varargs:
26022738; RV32I: # %bb.0:
0 commit comments