Skip to content

Commit 56c3ef1

Browse files
authored
[RISCV] Remove X16-31 from interrupt callee saved register list for RVE+D. (#139213)
1 parent 49c5138 commit 56c3ef1

File tree

2 files changed

+49
-112
lines changed

2 files changed

+49
-112
lines changed

llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ RISCVRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
6767
return CSR_NoRegs_SaveList;
6868
if (MF->getFunction().hasFnAttribute("interrupt")) {
6969
if (Subtarget.hasStdExtD())
70-
return CSR_XLEN_F64_Interrupt_SaveList;
70+
return Subtarget.hasStdExtE() ? CSR_XLEN_F64_Interrupt_RVE_SaveList
71+
: CSR_XLEN_F64_Interrupt_SaveList;
7172
if (Subtarget.hasStdExtF())
7273
return Subtarget.hasStdExtE() ? CSR_XLEN_F32_Interrupt_RVE_SaveList
7374
: CSR_XLEN_F32_Interrupt_SaveList;

llvm/test/CodeGen/RISCV/interrupt-attr.ll

Lines changed: 47 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,33 +1442,17 @@ define void @foo_with_call() #1 {
14421442
;
14431443
; CHECK-RV64E-FD-LABEL: foo_with_call:
14441444
; CHECK-RV64E-FD: # %bb.0:
1445-
; CHECK-RV64E-FD-NEXT: addi sp, sp, -464
1446-
; CHECK-RV64E-FD-NEXT: sd ra, 456(sp) # 8-byte Folded Spill
1447-
; CHECK-RV64E-FD-NEXT: sd t0, 448(sp) # 8-byte Folded Spill
1448-
; CHECK-RV64E-FD-NEXT: sd t1, 440(sp) # 8-byte Folded Spill
1449-
; CHECK-RV64E-FD-NEXT: sd t2, 432(sp) # 8-byte Folded Spill
1450-
; CHECK-RV64E-FD-NEXT: sd a0, 424(sp) # 8-byte Folded Spill
1451-
; CHECK-RV64E-FD-NEXT: sd a1, 416(sp) # 8-byte Folded Spill
1452-
; CHECK-RV64E-FD-NEXT: sd a2, 408(sp) # 8-byte Folded Spill
1453-
; CHECK-RV64E-FD-NEXT: sd a3, 400(sp) # 8-byte Folded Spill
1454-
; CHECK-RV64E-FD-NEXT: sd a4, 392(sp) # 8-byte Folded Spill
1455-
; CHECK-RV64E-FD-NEXT: sd a5, 384(sp) # 8-byte Folded Spill
1456-
; CHECK-RV64E-FD-NEXT: sd a6, 376(sp) # 8-byte Folded Spill
1457-
; CHECK-RV64E-FD-NEXT: sd a7, 368(sp) # 8-byte Folded Spill
1458-
; CHECK-RV64E-FD-NEXT: sd s2, 360(sp) # 8-byte Folded Spill
1459-
; CHECK-RV64E-FD-NEXT: sd s3, 352(sp) # 8-byte Folded Spill
1460-
; CHECK-RV64E-FD-NEXT: sd s4, 344(sp) # 8-byte Folded Spill
1461-
; CHECK-RV64E-FD-NEXT: sd s5, 336(sp) # 8-byte Folded Spill
1462-
; CHECK-RV64E-FD-NEXT: sd s6, 328(sp) # 8-byte Folded Spill
1463-
; CHECK-RV64E-FD-NEXT: sd s7, 320(sp) # 8-byte Folded Spill
1464-
; CHECK-RV64E-FD-NEXT: sd s8, 312(sp) # 8-byte Folded Spill
1465-
; CHECK-RV64E-FD-NEXT: sd s9, 304(sp) # 8-byte Folded Spill
1466-
; CHECK-RV64E-FD-NEXT: sd s10, 296(sp) # 8-byte Folded Spill
1467-
; CHECK-RV64E-FD-NEXT: sd s11, 288(sp) # 8-byte Folded Spill
1468-
; CHECK-RV64E-FD-NEXT: sd t3, 280(sp) # 8-byte Folded Spill
1469-
; CHECK-RV64E-FD-NEXT: sd t4, 272(sp) # 8-byte Folded Spill
1470-
; CHECK-RV64E-FD-NEXT: sd t5, 264(sp) # 8-byte Folded Spill
1471-
; CHECK-RV64E-FD-NEXT: sd t6, 256(sp) # 8-byte Folded Spill
1445+
; CHECK-RV64E-FD-NEXT: addi sp, sp, -336
1446+
; CHECK-RV64E-FD-NEXT: sd ra, 328(sp) # 8-byte Folded Spill
1447+
; CHECK-RV64E-FD-NEXT: sd t0, 320(sp) # 8-byte Folded Spill
1448+
; CHECK-RV64E-FD-NEXT: sd t1, 312(sp) # 8-byte Folded Spill
1449+
; CHECK-RV64E-FD-NEXT: sd t2, 304(sp) # 8-byte Folded Spill
1450+
; CHECK-RV64E-FD-NEXT: sd a0, 296(sp) # 8-byte Folded Spill
1451+
; CHECK-RV64E-FD-NEXT: sd a1, 288(sp) # 8-byte Folded Spill
1452+
; CHECK-RV64E-FD-NEXT: sd a2, 280(sp) # 8-byte Folded Spill
1453+
; CHECK-RV64E-FD-NEXT: sd a3, 272(sp) # 8-byte Folded Spill
1454+
; CHECK-RV64E-FD-NEXT: sd a4, 264(sp) # 8-byte Folded Spill
1455+
; CHECK-RV64E-FD-NEXT: sd a5, 256(sp) # 8-byte Folded Spill
14721456
; CHECK-RV64E-FD-NEXT: fsd ft0, 248(sp) # 8-byte Folded Spill
14731457
; CHECK-RV64E-FD-NEXT: fsd ft1, 240(sp) # 8-byte Folded Spill
14741458
; CHECK-RV64E-FD-NEXT: fsd ft2, 232(sp) # 8-byte Folded Spill
@@ -1502,32 +1486,16 @@ define void @foo_with_call() #1 {
15021486
; CHECK-RV64E-FD-NEXT: fsd ft10, 8(sp) # 8-byte Folded Spill
15031487
; CHECK-RV64E-FD-NEXT: fsd ft11, 0(sp) # 8-byte Folded Spill
15041488
; CHECK-RV64E-FD-NEXT: call otherfoo
1505-
; CHECK-RV64E-FD-NEXT: ld ra, 456(sp) # 8-byte Folded Reload
1506-
; CHECK-RV64E-FD-NEXT: ld t0, 448(sp) # 8-byte Folded Reload
1507-
; CHECK-RV64E-FD-NEXT: ld t1, 440(sp) # 8-byte Folded Reload
1508-
; CHECK-RV64E-FD-NEXT: ld t2, 432(sp) # 8-byte Folded Reload
1509-
; CHECK-RV64E-FD-NEXT: ld a0, 424(sp) # 8-byte Folded Reload
1510-
; CHECK-RV64E-FD-NEXT: ld a1, 416(sp) # 8-byte Folded Reload
1511-
; CHECK-RV64E-FD-NEXT: ld a2, 408(sp) # 8-byte Folded Reload
1512-
; CHECK-RV64E-FD-NEXT: ld a3, 400(sp) # 8-byte Folded Reload
1513-
; CHECK-RV64E-FD-NEXT: ld a4, 392(sp) # 8-byte Folded Reload
1514-
; CHECK-RV64E-FD-NEXT: ld a5, 384(sp) # 8-byte Folded Reload
1515-
; CHECK-RV64E-FD-NEXT: ld a6, 376(sp) # 8-byte Folded Reload
1516-
; CHECK-RV64E-FD-NEXT: ld a7, 368(sp) # 8-byte Folded Reload
1517-
; CHECK-RV64E-FD-NEXT: ld s2, 360(sp) # 8-byte Folded Reload
1518-
; CHECK-RV64E-FD-NEXT: ld s3, 352(sp) # 8-byte Folded Reload
1519-
; CHECK-RV64E-FD-NEXT: ld s4, 344(sp) # 8-byte Folded Reload
1520-
; CHECK-RV64E-FD-NEXT: ld s5, 336(sp) # 8-byte Folded Reload
1521-
; CHECK-RV64E-FD-NEXT: ld s6, 328(sp) # 8-byte Folded Reload
1522-
; CHECK-RV64E-FD-NEXT: ld s7, 320(sp) # 8-byte Folded Reload
1523-
; CHECK-RV64E-FD-NEXT: ld s8, 312(sp) # 8-byte Folded Reload
1524-
; CHECK-RV64E-FD-NEXT: ld s9, 304(sp) # 8-byte Folded Reload
1525-
; CHECK-RV64E-FD-NEXT: ld s10, 296(sp) # 8-byte Folded Reload
1526-
; CHECK-RV64E-FD-NEXT: ld s11, 288(sp) # 8-byte Folded Reload
1527-
; CHECK-RV64E-FD-NEXT: ld t3, 280(sp) # 8-byte Folded Reload
1528-
; CHECK-RV64E-FD-NEXT: ld t4, 272(sp) # 8-byte Folded Reload
1529-
; CHECK-RV64E-FD-NEXT: ld t5, 264(sp) # 8-byte Folded Reload
1530-
; CHECK-RV64E-FD-NEXT: ld t6, 256(sp) # 8-byte Folded Reload
1489+
; CHECK-RV64E-FD-NEXT: ld ra, 328(sp) # 8-byte Folded Reload
1490+
; CHECK-RV64E-FD-NEXT: ld t0, 320(sp) # 8-byte Folded Reload
1491+
; CHECK-RV64E-FD-NEXT: ld t1, 312(sp) # 8-byte Folded Reload
1492+
; CHECK-RV64E-FD-NEXT: ld t2, 304(sp) # 8-byte Folded Reload
1493+
; CHECK-RV64E-FD-NEXT: ld a0, 296(sp) # 8-byte Folded Reload
1494+
; CHECK-RV64E-FD-NEXT: ld a1, 288(sp) # 8-byte Folded Reload
1495+
; CHECK-RV64E-FD-NEXT: ld a2, 280(sp) # 8-byte Folded Reload
1496+
; CHECK-RV64E-FD-NEXT: ld a3, 272(sp) # 8-byte Folded Reload
1497+
; CHECK-RV64E-FD-NEXT: ld a4, 264(sp) # 8-byte Folded Reload
1498+
; CHECK-RV64E-FD-NEXT: ld a5, 256(sp) # 8-byte Folded Reload
15311499
; CHECK-RV64E-FD-NEXT: fld ft0, 248(sp) # 8-byte Folded Reload
15321500
; CHECK-RV64E-FD-NEXT: fld ft1, 240(sp) # 8-byte Folded Reload
15331501
; CHECK-RV64E-FD-NEXT: fld ft2, 232(sp) # 8-byte Folded Reload
@@ -1560,7 +1528,7 @@ define void @foo_with_call() #1 {
15601528
; CHECK-RV64E-FD-NEXT: fld ft9, 16(sp) # 8-byte Folded Reload
15611529
; CHECK-RV64E-FD-NEXT: fld ft10, 8(sp) # 8-byte Folded Reload
15621530
; CHECK-RV64E-FD-NEXT: fld ft11, 0(sp) # 8-byte Folded Reload
1563-
; CHECK-RV64E-FD-NEXT: addi sp, sp, 464
1531+
; CHECK-RV64E-FD-NEXT: addi sp, sp, 336
15641532
; CHECK-RV64E-FD-NEXT: mret
15651533
%call = call i32 @otherfoo()
15661534
ret void
@@ -2993,34 +2961,18 @@ define void @foo_fp_with_call() #2 {
29932961
;
29942962
; CHECK-RV64E-FD-LABEL: foo_fp_with_call:
29952963
; CHECK-RV64E-FD: # %bb.0:
2996-
; CHECK-RV64E-FD-NEXT: addi sp, sp, -472
2997-
; CHECK-RV64E-FD-NEXT: sd ra, 464(sp) # 8-byte Folded Spill
2998-
; CHECK-RV64E-FD-NEXT: sd t0, 456(sp) # 8-byte Folded Spill
2999-
; CHECK-RV64E-FD-NEXT: sd t1, 448(sp) # 8-byte Folded Spill
3000-
; CHECK-RV64E-FD-NEXT: sd t2, 440(sp) # 8-byte Folded Spill
3001-
; CHECK-RV64E-FD-NEXT: sd s0, 432(sp) # 8-byte Folded Spill
3002-
; CHECK-RV64E-FD-NEXT: sd a0, 424(sp) # 8-byte Folded Spill
3003-
; CHECK-RV64E-FD-NEXT: sd a1, 416(sp) # 8-byte Folded Spill
3004-
; CHECK-RV64E-FD-NEXT: sd a2, 408(sp) # 8-byte Folded Spill
3005-
; CHECK-RV64E-FD-NEXT: sd a3, 400(sp) # 8-byte Folded Spill
3006-
; CHECK-RV64E-FD-NEXT: sd a4, 392(sp) # 8-byte Folded Spill
3007-
; CHECK-RV64E-FD-NEXT: sd a5, 384(sp) # 8-byte Folded Spill
3008-
; CHECK-RV64E-FD-NEXT: sd a6, 376(sp) # 8-byte Folded Spill
3009-
; CHECK-RV64E-FD-NEXT: sd a7, 368(sp) # 8-byte Folded Spill
3010-
; CHECK-RV64E-FD-NEXT: sd s2, 360(sp) # 8-byte Folded Spill
3011-
; CHECK-RV64E-FD-NEXT: sd s3, 352(sp) # 8-byte Folded Spill
3012-
; CHECK-RV64E-FD-NEXT: sd s4, 344(sp) # 8-byte Folded Spill
3013-
; CHECK-RV64E-FD-NEXT: sd s5, 336(sp) # 8-byte Folded Spill
3014-
; CHECK-RV64E-FD-NEXT: sd s6, 328(sp) # 8-byte Folded Spill
3015-
; CHECK-RV64E-FD-NEXT: sd s7, 320(sp) # 8-byte Folded Spill
3016-
; CHECK-RV64E-FD-NEXT: sd s8, 312(sp) # 8-byte Folded Spill
3017-
; CHECK-RV64E-FD-NEXT: sd s9, 304(sp) # 8-byte Folded Spill
3018-
; CHECK-RV64E-FD-NEXT: sd s10, 296(sp) # 8-byte Folded Spill
3019-
; CHECK-RV64E-FD-NEXT: sd s11, 288(sp) # 8-byte Folded Spill
3020-
; CHECK-RV64E-FD-NEXT: sd t3, 280(sp) # 8-byte Folded Spill
3021-
; CHECK-RV64E-FD-NEXT: sd t4, 272(sp) # 8-byte Folded Spill
3022-
; CHECK-RV64E-FD-NEXT: sd t5, 264(sp) # 8-byte Folded Spill
3023-
; CHECK-RV64E-FD-NEXT: sd t6, 256(sp) # 8-byte Folded Spill
2964+
; CHECK-RV64E-FD-NEXT: addi sp, sp, -344
2965+
; CHECK-RV64E-FD-NEXT: sd ra, 336(sp) # 8-byte Folded Spill
2966+
; CHECK-RV64E-FD-NEXT: sd t0, 328(sp) # 8-byte Folded Spill
2967+
; CHECK-RV64E-FD-NEXT: sd t1, 320(sp) # 8-byte Folded Spill
2968+
; CHECK-RV64E-FD-NEXT: sd t2, 312(sp) # 8-byte Folded Spill
2969+
; CHECK-RV64E-FD-NEXT: sd s0, 304(sp) # 8-byte Folded Spill
2970+
; CHECK-RV64E-FD-NEXT: sd a0, 296(sp) # 8-byte Folded Spill
2971+
; CHECK-RV64E-FD-NEXT: sd a1, 288(sp) # 8-byte Folded Spill
2972+
; CHECK-RV64E-FD-NEXT: sd a2, 280(sp) # 8-byte Folded Spill
2973+
; CHECK-RV64E-FD-NEXT: sd a3, 272(sp) # 8-byte Folded Spill
2974+
; CHECK-RV64E-FD-NEXT: sd a4, 264(sp) # 8-byte Folded Spill
2975+
; CHECK-RV64E-FD-NEXT: sd a5, 256(sp) # 8-byte Folded Spill
30242976
; CHECK-RV64E-FD-NEXT: fsd ft0, 248(sp) # 8-byte Folded Spill
30252977
; CHECK-RV64E-FD-NEXT: fsd ft1, 240(sp) # 8-byte Folded Spill
30262978
; CHECK-RV64E-FD-NEXT: fsd ft2, 232(sp) # 8-byte Folded Spill
@@ -3053,35 +3005,19 @@ define void @foo_fp_with_call() #2 {
30533005
; CHECK-RV64E-FD-NEXT: fsd ft9, 16(sp) # 8-byte Folded Spill
30543006
; CHECK-RV64E-FD-NEXT: fsd ft10, 8(sp) # 8-byte Folded Spill
30553007
; CHECK-RV64E-FD-NEXT: fsd ft11, 0(sp) # 8-byte Folded Spill
3056-
; CHECK-RV64E-FD-NEXT: addi s0, sp, 472
3008+
; CHECK-RV64E-FD-NEXT: addi s0, sp, 344
30573009
; CHECK-RV64E-FD-NEXT: call otherfoo
3058-
; CHECK-RV64E-FD-NEXT: ld ra, 464(sp) # 8-byte Folded Reload
3059-
; CHECK-RV64E-FD-NEXT: ld t0, 456(sp) # 8-byte Folded Reload
3060-
; CHECK-RV64E-FD-NEXT: ld t1, 448(sp) # 8-byte Folded Reload
3061-
; CHECK-RV64E-FD-NEXT: ld t2, 440(sp) # 8-byte Folded Reload
3062-
; CHECK-RV64E-FD-NEXT: ld s0, 432(sp) # 8-byte Folded Reload
3063-
; CHECK-RV64E-FD-NEXT: ld a0, 424(sp) # 8-byte Folded Reload
3064-
; CHECK-RV64E-FD-NEXT: ld a1, 416(sp) # 8-byte Folded Reload
3065-
; CHECK-RV64E-FD-NEXT: ld a2, 408(sp) # 8-byte Folded Reload
3066-
; CHECK-RV64E-FD-NEXT: ld a3, 400(sp) # 8-byte Folded Reload
3067-
; CHECK-RV64E-FD-NEXT: ld a4, 392(sp) # 8-byte Folded Reload
3068-
; CHECK-RV64E-FD-NEXT: ld a5, 384(sp) # 8-byte Folded Reload
3069-
; CHECK-RV64E-FD-NEXT: ld a6, 376(sp) # 8-byte Folded Reload
3070-
; CHECK-RV64E-FD-NEXT: ld a7, 368(sp) # 8-byte Folded Reload
3071-
; CHECK-RV64E-FD-NEXT: ld s2, 360(sp) # 8-byte Folded Reload
3072-
; CHECK-RV64E-FD-NEXT: ld s3, 352(sp) # 8-byte Folded Reload
3073-
; CHECK-RV64E-FD-NEXT: ld s4, 344(sp) # 8-byte Folded Reload
3074-
; CHECK-RV64E-FD-NEXT: ld s5, 336(sp) # 8-byte Folded Reload
3075-
; CHECK-RV64E-FD-NEXT: ld s6, 328(sp) # 8-byte Folded Reload
3076-
; CHECK-RV64E-FD-NEXT: ld s7, 320(sp) # 8-byte Folded Reload
3077-
; CHECK-RV64E-FD-NEXT: ld s8, 312(sp) # 8-byte Folded Reload
3078-
; CHECK-RV64E-FD-NEXT: ld s9, 304(sp) # 8-byte Folded Reload
3079-
; CHECK-RV64E-FD-NEXT: ld s10, 296(sp) # 8-byte Folded Reload
3080-
; CHECK-RV64E-FD-NEXT: ld s11, 288(sp) # 8-byte Folded Reload
3081-
; CHECK-RV64E-FD-NEXT: ld t3, 280(sp) # 8-byte Folded Reload
3082-
; CHECK-RV64E-FD-NEXT: ld t4, 272(sp) # 8-byte Folded Reload
3083-
; CHECK-RV64E-FD-NEXT: ld t5, 264(sp) # 8-byte Folded Reload
3084-
; CHECK-RV64E-FD-NEXT: ld t6, 256(sp) # 8-byte Folded Reload
3010+
; CHECK-RV64E-FD-NEXT: ld ra, 336(sp) # 8-byte Folded Reload
3011+
; CHECK-RV64E-FD-NEXT: ld t0, 328(sp) # 8-byte Folded Reload
3012+
; CHECK-RV64E-FD-NEXT: ld t1, 320(sp) # 8-byte Folded Reload
3013+
; CHECK-RV64E-FD-NEXT: ld t2, 312(sp) # 8-byte Folded Reload
3014+
; CHECK-RV64E-FD-NEXT: ld s0, 304(sp) # 8-byte Folded Reload
3015+
; CHECK-RV64E-FD-NEXT: ld a0, 296(sp) # 8-byte Folded Reload
3016+
; CHECK-RV64E-FD-NEXT: ld a1, 288(sp) # 8-byte Folded Reload
3017+
; CHECK-RV64E-FD-NEXT: ld a2, 280(sp) # 8-byte Folded Reload
3018+
; CHECK-RV64E-FD-NEXT: ld a3, 272(sp) # 8-byte Folded Reload
3019+
; CHECK-RV64E-FD-NEXT: ld a4, 264(sp) # 8-byte Folded Reload
3020+
; CHECK-RV64E-FD-NEXT: ld a5, 256(sp) # 8-byte Folded Reload
30853021
; CHECK-RV64E-FD-NEXT: fld ft0, 248(sp) # 8-byte Folded Reload
30863022
; CHECK-RV64E-FD-NEXT: fld ft1, 240(sp) # 8-byte Folded Reload
30873023
; CHECK-RV64E-FD-NEXT: fld ft2, 232(sp) # 8-byte Folded Reload
@@ -3114,7 +3050,7 @@ define void @foo_fp_with_call() #2 {
31143050
; CHECK-RV64E-FD-NEXT: fld ft9, 16(sp) # 8-byte Folded Reload
31153051
; CHECK-RV64E-FD-NEXT: fld ft10, 8(sp) # 8-byte Folded Reload
31163052
; CHECK-RV64E-FD-NEXT: fld ft11, 0(sp) # 8-byte Folded Reload
3117-
; CHECK-RV64E-FD-NEXT: addi sp, sp, 472
3053+
; CHECK-RV64E-FD-NEXT: addi sp, sp, 344
31183054
; CHECK-RV64E-FD-NEXT: mret
31193055
%call = call i32 @otherfoo()
31203056
ret void

0 commit comments

Comments
 (0)