Skip to content

Commit 253d18d

Browse files
authored
[X86][LiveRegUnits] Exclude reserved registers from TargetRegisterClass (#157798)
Fixes regression casued by #156817.
1 parent 60dc68d commit 253d18d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,7 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
999999
unsigned X86RegisterInfo::findDeadCallerSavedReg(
10001000
MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI) const {
10011001
const MachineFunction *MF = MBB.getParent();
1002+
const MachineRegisterInfo &MRI = MF->getRegInfo();
10021003
if (MF->callsEHReturn())
10031004
return 0;
10041005

@@ -1030,7 +1031,7 @@ unsigned X86RegisterInfo::findDeadCallerSavedReg(
10301031
const TargetRegisterClass &RC =
10311032
Is64Bit ? X86::GR64_NOSPRegClass : X86::GR32_NOSPRegClass;
10321033
for (MCRegister Reg : RC) {
1033-
if (LRU.available(Reg))
1034+
if (LRU.available(Reg) && !MRI.isReserved(Reg))
10341035
return Reg;
10351036
}
10361037
}

llvm/test/CodeGen/X86/pr156817.ll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64 | FileCheck %s
3+
; RUN: llc < %s -mtriple=x86_64 -mattr=+egpr | FileCheck %s --check-prefix=EGPR
4+
5+
define coldcc i32 @foo() nounwind {
6+
; CHECK-LABEL: foo:
7+
; CHECK: # %bb.0:
8+
; CHECK-NEXT: pushq %rax
9+
; CHECK-NEXT: callq bar@PLT
10+
; CHECK-NEXT: addq $8, %rsp
11+
; CHECK-NEXT: retq
12+
;
13+
; EGPR-LABEL: foo:
14+
; EGPR: # %bb.0:
15+
; EGPR-NEXT: pushq %rax
16+
; EGPR-NEXT: callq bar@PLT
17+
; EGPR-NEXT: popq %r16
18+
; EGPR-NEXT: retq
19+
%1 = tail call coldcc i32 @bar()
20+
ret i32 %1
21+
}
22+
23+
declare coldcc i32 @bar()

0 commit comments

Comments
 (0)