Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 237d6cc

Browse files
committed
Use CSR_Interrupt
1 parent 2900358 commit 237d6cc

File tree

2 files changed

+81
-57
lines changed

2 files changed

+81
-57
lines changed

llvm/lib/Target/RISCV/RISCVCallingConv.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,6 @@ def CSR_XLEN_F32_V_Interrupt_RVE: CalleeSavedRegs<(sub CSR_XLEN_F32_V_Interrupt,
9696
def CSR_XLEN_F64_V_Interrupt_RVE: CalleeSavedRegs<(sub CSR_XLEN_F64_V_Interrupt,
9797
(sequence "X%u", 16, 31))>;
9898

99-
def CSR_RT_MostRegs : CalleeSavedRegs<(sub (sequence "X%u", 5, 31), X6, X7, X28)>;
99+
def CSR_RT_MostRegs : CalleeSavedRegs<(sub CSR_Interrupt, X6, X7, X28)>;
100100
def CSR_RT_MostRegs_RVE : CalleeSavedRegs<(sub CSR_RT_MostRegs,
101101
(sequence "X%u", 16, 31))>;

llvm/test/CodeGen/RISCV/calling-conv-preserve-most.ll

Lines changed: 80 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -12,69 +12,74 @@ declare preserve_mostcc void @preserve_mostcc_func()
1212
define preserve_mostcc void @preserve_mostcc1() nounwind {
1313
; RV32I-LABEL: preserve_mostcc1:
1414
; RV32I: # %bb.0: # %entry
15-
; RV32I-NEXT: addi sp, sp, -48
16-
; RV32I-NEXT: sw t0, 44(sp) # 4-byte Folded Spill
17-
; RV32I-NEXT: sw a0, 40(sp) # 4-byte Folded Spill
18-
; RV32I-NEXT: sw a1, 36(sp) # 4-byte Folded Spill
19-
; RV32I-NEXT: sw a2, 32(sp) # 4-byte Folded Spill
20-
; RV32I-NEXT: sw a3, 28(sp) # 4-byte Folded Spill
21-
; RV32I-NEXT: sw a4, 24(sp) # 4-byte Folded Spill
22-
; RV32I-NEXT: sw a5, 20(sp) # 4-byte Folded Spill
23-
; RV32I-NEXT: sw a6, 16(sp) # 4-byte Folded Spill
24-
; RV32I-NEXT: sw a7, 12(sp) # 4-byte Folded Spill
25-
; RV32I-NEXT: sw t4, 8(sp) # 4-byte Folded Spill
26-
; RV32I-NEXT: sw t5, 4(sp) # 4-byte Folded Spill
27-
; RV32I-NEXT: sw t6, 0(sp) # 4-byte Folded Spill
15+
; RV32I-NEXT: addi sp, sp, -64
16+
; RV32I-NEXT: sw ra, 60(sp) # 4-byte Folded Spill
17+
; RV32I-NEXT: sw t0, 56(sp) # 4-byte Folded Spill
18+
; RV32I-NEXT: sw a0, 52(sp) # 4-byte Folded Spill
19+
; RV32I-NEXT: sw a1, 48(sp) # 4-byte Folded Spill
20+
; RV32I-NEXT: sw a2, 44(sp) # 4-byte Folded Spill
21+
; RV32I-NEXT: sw a3, 40(sp) # 4-byte Folded Spill
22+
; RV32I-NEXT: sw a4, 36(sp) # 4-byte Folded Spill
23+
; RV32I-NEXT: sw a5, 32(sp) # 4-byte Folded Spill
24+
; RV32I-NEXT: sw a6, 28(sp) # 4-byte Folded Spill
25+
; RV32I-NEXT: sw a7, 24(sp) # 4-byte Folded Spill
26+
; RV32I-NEXT: sw t4, 20(sp) # 4-byte Folded Spill
27+
; RV32I-NEXT: sw t5, 16(sp) # 4-byte Folded Spill
28+
; RV32I-NEXT: sw t6, 12(sp) # 4-byte Folded Spill
2829
; RV32I-NEXT: call standard_cc_func
29-
; RV32I-NEXT: lw t0, 44(sp) # 4-byte Folded Reload
30-
; RV32I-NEXT: lw a0, 40(sp) # 4-byte Folded Reload
31-
; RV32I-NEXT: lw a1, 36(sp) # 4-byte Folded Reload
32-
; RV32I-NEXT: lw a2, 32(sp) # 4-byte Folded Reload
33-
; RV32I-NEXT: lw a3, 28(sp) # 4-byte Folded Reload
34-
; RV32I-NEXT: lw a4, 24(sp) # 4-byte Folded Reload
35-
; RV32I-NEXT: lw a5, 20(sp) # 4-byte Folded Reload
36-
; RV32I-NEXT: lw a6, 16(sp) # 4-byte Folded Reload
37-
; RV32I-NEXT: lw a7, 12(sp) # 4-byte Folded Reload
38-
; RV32I-NEXT: lw t4, 8(sp) # 4-byte Folded Reload
39-
; RV32I-NEXT: lw t5, 4(sp) # 4-byte Folded Reload
40-
; RV32I-NEXT: lw t6, 0(sp) # 4-byte Folded Reload
41-
; RV32I-NEXT: addi sp, sp, 48
30+
; RV32I-NEXT: lw ra, 60(sp) # 4-byte Folded Reload
31+
; RV32I-NEXT: lw t0, 56(sp) # 4-byte Folded Reload
32+
; RV32I-NEXT: lw a0, 52(sp) # 4-byte Folded Reload
33+
; RV32I-NEXT: lw a1, 48(sp) # 4-byte Folded Reload
34+
; RV32I-NEXT: lw a2, 44(sp) # 4-byte Folded Reload
35+
; RV32I-NEXT: lw a3, 40(sp) # 4-byte Folded Reload
36+
; RV32I-NEXT: lw a4, 36(sp) # 4-byte Folded Reload
37+
; RV32I-NEXT: lw a5, 32(sp) # 4-byte Folded Reload
38+
; RV32I-NEXT: lw a6, 28(sp) # 4-byte Folded Reload
39+
; RV32I-NEXT: lw a7, 24(sp) # 4-byte Folded Reload
40+
; RV32I-NEXT: lw t4, 20(sp) # 4-byte Folded Reload
41+
; RV32I-NEXT: lw t5, 16(sp) # 4-byte Folded Reload
42+
; RV32I-NEXT: lw t6, 12(sp) # 4-byte Folded Reload
43+
; RV32I-NEXT: addi sp, sp, 64
4244
; RV32I-NEXT: ret
4345
;
4446
; RV64I-LABEL: preserve_mostcc1:
4547
; RV64I: # %bb.0: # %entry
46-
; RV64I-NEXT: addi sp, sp, -96
47-
; RV64I-NEXT: sd t0, 88(sp) # 8-byte Folded Spill
48-
; RV64I-NEXT: sd a0, 80(sp) # 8-byte Folded Spill
49-
; RV64I-NEXT: sd a1, 72(sp) # 8-byte Folded Spill
50-
; RV64I-NEXT: sd a2, 64(sp) # 8-byte Folded Spill
51-
; RV64I-NEXT: sd a3, 56(sp) # 8-byte Folded Spill
52-
; RV64I-NEXT: sd a4, 48(sp) # 8-byte Folded Spill
53-
; RV64I-NEXT: sd a5, 40(sp) # 8-byte Folded Spill
54-
; RV64I-NEXT: sd a6, 32(sp) # 8-byte Folded Spill
55-
; RV64I-NEXT: sd a7, 24(sp) # 8-byte Folded Spill
56-
; RV64I-NEXT: sd t4, 16(sp) # 8-byte Folded Spill
57-
; RV64I-NEXT: sd t5, 8(sp) # 8-byte Folded Spill
58-
; RV64I-NEXT: sd t6, 0(sp) # 8-byte Folded Spill
48+
; RV64I-NEXT: addi sp, sp, -112
49+
; RV64I-NEXT: sd ra, 104(sp) # 8-byte Folded Spill
50+
; RV64I-NEXT: sd t0, 96(sp) # 8-byte Folded Spill
51+
; RV64I-NEXT: sd a0, 88(sp) # 8-byte Folded Spill
52+
; RV64I-NEXT: sd a1, 80(sp) # 8-byte Folded Spill
53+
; RV64I-NEXT: sd a2, 72(sp) # 8-byte Folded Spill
54+
; RV64I-NEXT: sd a3, 64(sp) # 8-byte Folded Spill
55+
; RV64I-NEXT: sd a4, 56(sp) # 8-byte Folded Spill
56+
; RV64I-NEXT: sd a5, 48(sp) # 8-byte Folded Spill
57+
; RV64I-NEXT: sd a6, 40(sp) # 8-byte Folded Spill
58+
; RV64I-NEXT: sd a7, 32(sp) # 8-byte Folded Spill
59+
; RV64I-NEXT: sd t4, 24(sp) # 8-byte Folded Spill
60+
; RV64I-NEXT: sd t5, 16(sp) # 8-byte Folded Spill
61+
; RV64I-NEXT: sd t6, 8(sp) # 8-byte Folded Spill
5962
; RV64I-NEXT: call standard_cc_func
60-
; RV64I-NEXT: ld t0, 88(sp) # 8-byte Folded Reload
61-
; RV64I-NEXT: ld a0, 80(sp) # 8-byte Folded Reload
62-
; RV64I-NEXT: ld a1, 72(sp) # 8-byte Folded Reload
63-
; RV64I-NEXT: ld a2, 64(sp) # 8-byte Folded Reload
64-
; RV64I-NEXT: ld a3, 56(sp) # 8-byte Folded Reload
65-
; RV64I-NEXT: ld a4, 48(sp) # 8-byte Folded Reload
66-
; RV64I-NEXT: ld a5, 40(sp) # 8-byte Folded Reload
67-
; RV64I-NEXT: ld a6, 32(sp) # 8-byte Folded Reload
68-
; RV64I-NEXT: ld a7, 24(sp) # 8-byte Folded Reload
69-
; RV64I-NEXT: ld t4, 16(sp) # 8-byte Folded Reload
70-
; RV64I-NEXT: ld t5, 8(sp) # 8-byte Folded Reload
71-
; RV64I-NEXT: ld t6, 0(sp) # 8-byte Folded Reload
72-
; RV64I-NEXT: addi sp, sp, 96
63+
; RV64I-NEXT: ld ra, 104(sp) # 8-byte Folded Reload
64+
; RV64I-NEXT: ld t0, 96(sp) # 8-byte Folded Reload
65+
; RV64I-NEXT: ld a0, 88(sp) # 8-byte Folded Reload
66+
; RV64I-NEXT: ld a1, 80(sp) # 8-byte Folded Reload
67+
; RV64I-NEXT: ld a2, 72(sp) # 8-byte Folded Reload
68+
; RV64I-NEXT: ld a3, 64(sp) # 8-byte Folded Reload
69+
; RV64I-NEXT: ld a4, 56(sp) # 8-byte Folded Reload
70+
; RV64I-NEXT: ld a5, 48(sp) # 8-byte Folded Reload
71+
; RV64I-NEXT: ld a6, 40(sp) # 8-byte Folded Reload
72+
; RV64I-NEXT: ld a7, 32(sp) # 8-byte Folded Reload
73+
; RV64I-NEXT: ld t4, 24(sp) # 8-byte Folded Reload
74+
; RV64I-NEXT: ld t5, 16(sp) # 8-byte Folded Reload
75+
; RV64I-NEXT: ld t6, 8(sp) # 8-byte Folded Reload
76+
; RV64I-NEXT: addi sp, sp, 112
7377
; RV64I-NEXT: ret
7478
;
7579
; RV32E-LABEL: preserve_mostcc1:
7680
; RV32E: # %bb.0: # %entry
77-
; RV32E-NEXT: addi sp, sp, -28
81+
; RV32E-NEXT: addi sp, sp, -32
82+
; RV32E-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
7883
; RV32E-NEXT: sw t0, 24(sp) # 4-byte Folded Spill
7984
; RV32E-NEXT: sw a0, 20(sp) # 4-byte Folded Spill
8085
; RV32E-NEXT: sw a1, 16(sp) # 4-byte Folded Spill
@@ -83,19 +88,21 @@ define preserve_mostcc void @preserve_mostcc1() nounwind {
8388
; RV32E-NEXT: sw a4, 4(sp) # 4-byte Folded Spill
8489
; RV32E-NEXT: sw a5, 0(sp) # 4-byte Folded Spill
8590
; RV32E-NEXT: call standard_cc_func
91+
; RV32E-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
8692
; RV32E-NEXT: lw t0, 24(sp) # 4-byte Folded Reload
8793
; RV32E-NEXT: lw a0, 20(sp) # 4-byte Folded Reload
8894
; RV32E-NEXT: lw a1, 16(sp) # 4-byte Folded Reload
8995
; RV32E-NEXT: lw a2, 12(sp) # 4-byte Folded Reload
9096
; RV32E-NEXT: lw a3, 8(sp) # 4-byte Folded Reload
9197
; RV32E-NEXT: lw a4, 4(sp) # 4-byte Folded Reload
9298
; RV32E-NEXT: lw a5, 0(sp) # 4-byte Folded Reload
93-
; RV32E-NEXT: addi sp, sp, 28
99+
; RV32E-NEXT: addi sp, sp, 32
94100
; RV32E-NEXT: ret
95101
;
96102
; RV64E-LABEL: preserve_mostcc1:
97103
; RV64E: # %bb.0: # %entry
98-
; RV64E-NEXT: addi sp, sp, -56
104+
; RV64E-NEXT: addi sp, sp, -64
105+
; RV64E-NEXT: sd ra, 56(sp) # 8-byte Folded Spill
99106
; RV64E-NEXT: sd t0, 48(sp) # 8-byte Folded Spill
100107
; RV64E-NEXT: sd a0, 40(sp) # 8-byte Folded Spill
101108
; RV64E-NEXT: sd a1, 32(sp) # 8-byte Folded Spill
@@ -104,14 +111,15 @@ define preserve_mostcc void @preserve_mostcc1() nounwind {
104111
; RV64E-NEXT: sd a4, 8(sp) # 8-byte Folded Spill
105112
; RV64E-NEXT: sd a5, 0(sp) # 8-byte Folded Spill
106113
; RV64E-NEXT: call standard_cc_func
114+
; RV64E-NEXT: ld ra, 56(sp) # 8-byte Folded Reload
107115
; RV64E-NEXT: ld t0, 48(sp) # 8-byte Folded Reload
108116
; RV64E-NEXT: ld a0, 40(sp) # 8-byte Folded Reload
109117
; RV64E-NEXT: ld a1, 32(sp) # 8-byte Folded Reload
110118
; RV64E-NEXT: ld a2, 24(sp) # 8-byte Folded Reload
111119
; RV64E-NEXT: ld a3, 16(sp) # 8-byte Folded Reload
112120
; RV64E-NEXT: ld a4, 8(sp) # 8-byte Folded Reload
113121
; RV64E-NEXT: ld a5, 0(sp) # 8-byte Folded Reload
114-
; RV64E-NEXT: addi sp, sp, 56
122+
; RV64E-NEXT: addi sp, sp, 64
115123
; RV64E-NEXT: ret
116124
entry:
117125
call void @standard_cc_func()
@@ -121,22 +129,38 @@ entry:
121129
define preserve_mostcc void @preserve_mostcc2() nounwind {
122130
; RV32I-LABEL: preserve_mostcc2:
123131
; RV32I: # %bb.0:
132+
; RV32I-NEXT: addi sp, sp, -16
133+
; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
124134
; RV32I-NEXT: call preserve_mostcc_func
135+
; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
136+
; RV32I-NEXT: addi sp, sp, 16
125137
; RV32I-NEXT: ret
126138
;
127139
; RV64I-LABEL: preserve_mostcc2:
128140
; RV64I: # %bb.0:
141+
; RV64I-NEXT: addi sp, sp, -16
142+
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
129143
; RV64I-NEXT: call preserve_mostcc_func
144+
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
145+
; RV64I-NEXT: addi sp, sp, 16
130146
; RV64I-NEXT: ret
131147
;
132148
; RV32E-LABEL: preserve_mostcc2:
133149
; RV32E: # %bb.0:
150+
; RV32E-NEXT: addi sp, sp, -4
151+
; RV32E-NEXT: sw ra, 0(sp) # 4-byte Folded Spill
134152
; RV32E-NEXT: call preserve_mostcc_func
153+
; RV32E-NEXT: lw ra, 0(sp) # 4-byte Folded Reload
154+
; RV32E-NEXT: addi sp, sp, 4
135155
; RV32E-NEXT: ret
136156
;
137157
; RV64E-LABEL: preserve_mostcc2:
138158
; RV64E: # %bb.0:
159+
; RV64E-NEXT: addi sp, sp, -8
160+
; RV64E-NEXT: sd ra, 0(sp) # 8-byte Folded Spill
139161
; RV64E-NEXT: call preserve_mostcc_func
162+
; RV64E-NEXT: ld ra, 0(sp) # 8-byte Folded Reload
163+
; RV64E-NEXT: addi sp, sp, 8
140164
; RV64E-NEXT: ret
141165
call preserve_mostcc void @preserve_mostcc_func()
142166
ret void

0 commit comments

Comments
 (0)