aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2015-11-06 18:17:45 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2015-11-06 18:17:45 +0000
commit0c90e9501eab14bfcd545dc5a50d068d481cd882 (patch)
treeddb51d67a994cde26848ab0c025e2f00e78691d2 /llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
parent5cb8e67b1790cb255fb3ed4f6c462c7632813c62 (diff)
downloadllvm-0c90e9501eab14bfcd545dc5a50d068d481cd882.zip
llvm-0c90e9501eab14bfcd545dc5a50d068d481cd882.tar.gz
llvm-0c90e9501eab14bfcd545dc5a50d068d481cd882.tar.bz2
AMDGPU: Create emergency stack slots during frame lowering
Test has a bogus verifier error which will be fixed by later commits. llvm-svn: 252327
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIFrameLowering.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/SIFrameLowering.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp b/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
new file mode 100644
index 0000000..a2d8fa1
--- /dev/null
+++ b/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
@@ -0,0 +1,33 @@
+//===----------------------- SIFrameLowering.cpp --------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//==-----------------------------------------------------------------------===//
+
+#include "SIFrameLowering.h"
+#include "SIRegisterInfo.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/RegisterScavenging.h"
+
+using namespace llvm;
+
+void SIFrameLowering::processFunctionBeforeFrameFinalized(
+ MachineFunction &MF,
+ RegScavenger *RS) const {
+ MachineFrameInfo *MFI = MF.getFrameInfo();
+ bool MayNeedScavengingEmergencySlot = MFI->hasStackObjects();
+
+ assert((RS || !MayNeedScavengingEmergencySlot) &&
+ "RegScavenger required if spilling");
+
+ if (MayNeedScavengingEmergencySlot) {
+ int ScavengeFI = MFI->CreateSpillStackObject(
+ AMDGPU::SGPR_32RegClass.getSize(),
+ AMDGPU::SGPR_32RegClass.getAlignment());
+ RS->addScavengingFrameIndex(ScavengeFI);
+ }
+}