summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
diff options
context:
space:
mode:
authorTim Shen <timshen91@gmail.com>2016-04-19 20:14:52 +0000
committerTim Shen <timshen91@gmail.com>2016-04-19 20:14:52 +0000
commita1d8bc559761c94dded3d1e7200cb264a982d1c5 (patch)
treedefb71dc282b62864f218f590486990247491956 /llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
parent8743f8ca245d94e91889f376c236aed81b61ffa3 (diff)
downloadbcm5719-llvm-a1d8bc559761c94dded3d1e7200cb264a982d1c5.tar.gz
bcm5719-llvm-a1d8bc559761c94dded3d1e7200cb264a982d1c5.zip
[PPC, SSP] Support PowerPC Linux stack protection.
llvm-svn: 266809
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCInstrInfo.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCInstrInfo.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
index b6dc00f37b7..9b682dae7a5 100644
--- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
+++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
@@ -1857,3 +1857,19 @@ PPCInstrInfo::getSerializableBitmaskMachineOperandTargetFlags() const {
return makeArrayRef(TargetFlags);
}
+bool PPCInstrInfo::expandPostRAPseudo(MachineBasicBlock::iterator MI) const {
+ switch (MI->getOpcode()) {
+ case TargetOpcode::LOAD_STACK_GUARD: {
+ assert(Subtarget.isTargetLinux() &&
+ "Only Linux target is expected to contain LOAD_STACK_GUARD");
+ const int64_t Offset = Subtarget.isPPC64() ? -0x7010 : -0x7008;
+ const unsigned Reg = Subtarget.isPPC64() ? PPC::X13 : PPC::R2;
+ MI->setDesc(get(PPC::LD));
+ MachineInstrBuilder(*MI->getParent()->getParent(), MI)
+ .addImm(Offset)
+ .addReg(Reg);
+ return true;
+ }
+ }
+ return false;
+}
OpenPOWER on IntegriCloud