diff options
author | Quinn Pham <quinn.pham@ibm.com> | 2021-11-29 09:12:51 -0600 |
---|---|---|
committer | Quinn Pham <Quinn.Pham@ibm.com> | 2022-01-24 15:12:23 -0600 |
commit | 6a028296fe62252791a6b470eeb8409b17d48cd0 (patch) | |
tree | 2f83944f5ba82482606ff7478f126f5d8d8472e5 /llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | |
parent | 997e128e2a78f5a5434fc75997441ae1ee76f8a4 (diff) | |
download | llvm-6a028296fe62252791a6b470eeb8409b17d48cd0.zip llvm-6a028296fe62252791a6b470eeb8409b17d48cd0.tar.gz llvm-6a028296fe62252791a6b470eeb8409b17d48cd0.tar.bz2 |
[PowerPC] Emit warning when SP is clobbered by asm
This patch emits a warning when the stack pointer register (`R1`) is found in
the clobber list of an inline asm statement. Clobbering the stack pointer is
not supported.
Reviewed By: #powerpc, nemanjai
Differential Revision: https://reviews.llvm.org/D112073
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp index 422b3db..76b016c0 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -390,6 +390,18 @@ BitVector PPCRegisterInfo::getReservedRegs(const MachineFunction &MF) const { return Reserved; } +bool PPCRegisterInfo::isAsmClobberable(const MachineFunction &MF, + MCRegister PhysReg) const { + // We cannot use getReservedRegs() to find the registers that are not asm + // clobberable because there are some reserved registers which can be + // clobbered by inline asm. For example, when LR is clobbered, the register is + // saved and restored. We will hardcode the registers that are not asm + // cloberable in this function. + + // The stack pointer (R1/X1) is not clobberable by inline asm + return PhysReg != PPC::R1 && PhysReg != PPC::X1; +} + bool PPCRegisterInfo::requiresFrameIndexScavenging(const MachineFunction &MF) const { const PPCSubtarget &Subtarget = MF.getSubtarget<PPCSubtarget>(); const PPCInstrInfo *InstrInfo = Subtarget.getInstrInfo(); |