OSDN Git Service

AMDGPU: Make FrameLowering stack alignment 16
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 22 Jun 2016 17:47:39 +0000 (17:47 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 22 Jun 2016 17:47:39 +0000 (17:47 +0000)
We don't need it to be that high. The natural alignment
for a single workitem's stack is 16.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273448 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AMDGPU/AMDGPUSubtarget.cpp

index 63b19ac..7060337 100644 (file)
@@ -107,7 +107,8 @@ AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
 
   initializeSubtargetDependencies(TT, GPU, FS);
 
-  const unsigned MaxStackAlign = 64 * 16; // Maximum stack alignment (long16)
+  // Scratch is allocated in 256 dword per wave blocks.
+  const unsigned StackAlign = 4 * 256 / getWavefrontSize();
 
   if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) {
     InstrInfo.reset(new R600InstrInfo(*this));
@@ -116,14 +117,14 @@ AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
     // FIXME: Should have R600 specific FrameLowering
     FrameLowering.reset(new AMDGPUFrameLowering(
                           TargetFrameLowering::StackGrowsUp,
-                          MaxStackAlign,
+                          StackAlign,
                           0));
   } else {
     InstrInfo.reset(new SIInstrInfo(*this));
     TLInfo.reset(new SITargetLowering(TM, *this));
     FrameLowering.reset(new SIFrameLowering(
                           TargetFrameLowering::StackGrowsUp,
-                          MaxStackAlign,
+                          StackAlign,
                           0));
 #ifndef LLVM_BUILD_GLOBAL_ISEL
     GISelAccessor *GISel = new GISelAccessor();