IPRA: Don't crash on null getCallPreservedMask
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Sat, 5 Aug 2017 07:50:18 +0000 (07:50 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Sat, 5 Aug 2017 07:50:18 +0000 (07:50 +0000)
Kernels aren't callable, so they don't have a call preserved mask.

llvm-svn: 310172

llvm/lib/CodeGen/RegUsageInfoCollector.cpp
llvm/test/CodeGen/AMDGPU/ipra.ll [new file with mode: 0644]

index 855aa37..214c6d2 100644 (file)
@@ -128,9 +128,11 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) {
   if (!TargetFrameLowering::isSafeForNoCSROpt(F)) {
     const uint32_t *CallPreservedMask =
         TRI->getCallPreservedMask(MF, F->getCallingConv());
-    // Set callee saved register as preserved.
-    for (unsigned i = 0; i < RegMaskSize; ++i)
-      RegMask[i] = RegMask[i] | CallPreservedMask[i];
+    if (CallPreservedMask) {
+      // Set callee saved register as preserved.
+      for (unsigned i = 0; i < RegMaskSize; ++i)
+        RegMask[i] = RegMask[i] | CallPreservedMask[i];
+    }
   } else {
     ++NumCSROpt;
     DEBUG(dbgs() << MF.getName()
diff --git a/llvm/test/CodeGen/AMDGPU/ipra.ll b/llvm/test/CodeGen/AMDGPU/ipra.ll
new file mode 100644 (file)
index 0000000..53752b2
--- /dev/null
@@ -0,0 +1,12 @@
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -enable-ipra < %s | FileCheck -check-prefix=GCN %s
+
+; Kernels are not called, so there is no call preserved mask.
+; GCN-LABEL: {{^}}kernel:
+; GCN: flat_store_dword
+define amdgpu_kernel void @kernel(i32 addrspace(1)* %out) #0 {
+entry:
+  store i32 0, i32 addrspace(1)* %out
+  ret void
+}
+
+attributes #0 = { nounwind }