summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/XCore/XCoreFrameLowering.cpp
diff options
context:
space:
mode:
authorRobert Lytton <robert@xmos.com>2014-01-06 14:21:07 +0000
committerRobert Lytton <robert@xmos.com>2014-01-06 14:21:07 +0000
commitc8c4aa667b0d9de90eb17ab0aa953edf0fa9dc60 (patch)
tree00d5aaa21f2f2397380f73cf73623357917b1a17 /llvm/lib/Target/XCore/XCoreFrameLowering.cpp
parent5da175214bffc33e394bf7531a8de49a2649b58c (diff)
downloadbcm5719-llvm-c8c4aa667b0d9de90eb17ab0aa953edf0fa9dc60.tar.gz
bcm5719-llvm-c8c4aa667b0d9de90eb17ab0aa953edf0fa9dc60.zip
XCore target: Lower EH_RETURN
llvm-svn: 198615
Diffstat (limited to 'llvm/lib/Target/XCore/XCoreFrameLowering.cpp')
-rw-r--r--llvm/lib/Target/XCore/XCoreFrameLowering.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/XCore/XCoreFrameLowering.cpp b/llvm/lib/Target/XCore/XCoreFrameLowering.cpp
index 3d1fb9cafc1..109b74d445c 100644
--- a/llvm/lib/Target/XCore/XCoreFrameLowering.cpp
+++ b/llvm/lib/Target/XCore/XCoreFrameLowering.cpp
@@ -252,6 +252,15 @@ void XCoreFrameLowering::emitEpilogue(MachineFunction &MF,
DebugLoc dl = MBBI->getDebugLoc();
unsigned RetOpcode = MBBI->getOpcode();
+ if (RetOpcode == XCore::EH_RETURN) {
+ unsigned EhStackReg = MBBI->getOperand(0).getReg();
+ unsigned EhHandlerReg = MBBI->getOperand(1).getReg();
+ BuildMI(MBB, MBBI, dl, TII.get(XCore::SETSP_1r)).addReg(EhStackReg);
+ BuildMI(MBB, MBBI, dl, TII.get(XCore::BAU_1r)).addReg(EhHandlerReg);
+ MBB.erase(MBBI); // Erase the previous return instruction.
+ return;
+ }
+
// Work out frame sizes.
// We will adjust the SP in stages towards the final FrameSize.
int RemainingAdj = MFI->getStackSize();
OpenPOWER on IntegriCloud