diff options
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCRegisterInfo.h')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.h | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h index 61acd955e1cb..93f330ab56b6 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h @@ -119,10 +119,14 @@ public: unsigned FrameIndex) const; void lowerCRBitRestore(MachineBasicBlock::iterator II, unsigned FrameIndex) const; - void lowerVRSAVESpilling(MachineBasicBlock::iterator II, - unsigned FrameIndex) const; - void lowerVRSAVERestore(MachineBasicBlock::iterator II, - unsigned FrameIndex) const; + + void lowerACCSpilling(MachineBasicBlock::iterator II, + unsigned FrameIndex) const; + void lowerACCRestore(MachineBasicBlock::iterator II, + unsigned FrameIndex) const; + + static void emitAccCopyInfo(MachineBasicBlock &MBB, MCRegister DestReg, + MCRegister SrcReg); bool hasReservedSpillSlot(const MachineFunction &MF, Register Reg, int &FrameIdx) const override; @@ -132,9 +136,8 @@ public: // Support for virtual base registers. bool needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const override; - void materializeFrameBaseRegister(MachineBasicBlock *MBB, Register BaseReg, - int FrameIdx, - int64_t Offset) const override; + Register materializeFrameBaseRegister(MachineBasicBlock *MBB, int FrameIdx, + int64_t Offset) const override; void resolveFrameIndex(MachineInstr &MI, Register BaseReg, int64_t Offset) const override; bool isFrameOffsetLegal(const MachineInstr *MI, Register BaseReg, @@ -151,12 +154,18 @@ public: /// register name so that only the number is left. Used by for linux asm. static const char *stripRegisterPrefix(const char *RegName) { switch (RegName[0]) { + case 'a': + if (RegName[1] == 'c' && RegName[2] == 'c') + return RegName + 3; + break; case 'r': case 'f': - case 'q': // for QPX case 'v': - if (RegName[1] == 's') + if (RegName[1] == 's') { + if (RegName[2] == 'p') + return RegName + 3; return RegName + 2; + } return RegName + 1; case 'c': if (RegName[1] == 'r') return RegName + 2; } |