mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
[Stackmaps][X86] Remove EFLAGS and IP registers from the live-out mask.
Remove the EFLAGS from the stackmap live-out mask. The EFLAGS register is not supposed to be part of that set, because the X86 calling conventions mark the register as NOT preserved. Also remove the IP registers, since spilling and restoring those doesn't really make any sense. Related to rdar://problem/21019635. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239568 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3e16bd3aaf
commit
d48b38e9ec
@ -419,6 +419,22 @@ BitVector X86RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||
return Reserved;
|
||||
}
|
||||
|
||||
void X86RegisterInfo::adjustStackMapLiveOutMask(uint32_t *Mask) const {
|
||||
// Check if the EFLAGS register is marked as live-out. This shouldn't happen,
|
||||
// because the calling convention defines the EFLAGS register as NOT
|
||||
// preserved.
|
||||
//
|
||||
// Unfortunatelly the EFLAGS show up as live-out after branch folding. Adding
|
||||
// an assert to track this and clear the register afterwards to avoid
|
||||
// unnecessary crashes during release builds.
|
||||
assert(!(Mask[X86::EFLAGS / 32] & (1U << (X86::EFLAGS % 32))) &&
|
||||
"EFLAGS are not live-out from a patchpoint.");
|
||||
|
||||
// Also clean other registers that don't need preserving (IP).
|
||||
for (auto Reg : {X86::EFLAGS, X86::RIP, X86::EIP, X86::IP})
|
||||
Mask[Reg / 32] &= ~(1U << (Reg % 32));
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Stack Frame Processing methods
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -104,6 +104,8 @@ public:
|
||||
/// register scavenger to determine what registers are free.
|
||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||
|
||||
void adjustStackMapLiveOutMask(uint32_t *Mask) const override;
|
||||
|
||||
bool hasBasePointer(const MachineFunction &MF) const;
|
||||
|
||||
bool canRealignStack(const MachineFunction &MF) const;
|
||||
|
Loading…
Reference in New Issue
Block a user