AMDGPU: Error if too many user SGPRs used
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 30 Nov 2015 21:16:07 +0000 (21:16 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 30 Nov 2015 21:16:07 +0000 (21:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254332 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
lib/Target/AMDGPU/AMDGPUSubtarget.h

index b96c48f0561de2cbdc4871c795b92d7b42052372..87a0cf20d17672f54f81dbd4be57fc6161c21c53 100644 (file)
@@ -401,6 +401,11 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
     ProgInfo.NumSGPR = AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG;
   }
 
+  if (MFI->NumUserSGPRs > STM.getMaxNumUserSGPRs()) {
+    LLVMContext &Ctx = MF.getFunction()->getContext();
+    Ctx.emitError("too many user SGPRs used");
+  }
+
   ProgInfo.VGPRBlocks = (ProgInfo.NumVGPR - 1) / 4;
   ProgInfo.SGPRBlocks = (ProgInfo.NumSGPR - 1) / 8;
   // Set the value to initialize FP_ROUND and FP_DENORM parts of the mode
index 9921630326b45f374ce00a8451c5ef753269e93f..971b5179b13c451cc1d6e11d909111b02c552dc3 100644 (file)
@@ -303,6 +303,9 @@ public:
     return isAmdHsaOS() ? 0 : 36;
   }
 
+  unsigned getMaxNumUserSGPRs() const {
+    return 16;
+  }
 };
 
 } // End namespace llvm