[PATCH] D13356: AMDGPU/SI: Remove assert from AMDGPUOpenCLImageTypeLowering pass

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 1 10:52:44 PDT 2015


tstellarAMD created this revision.
tstellarAMD added a reviewer: arsenm.
tstellarAMD added a subscriber: llvm-commits.
Herald added a subscriber: arsenm.

Instead of asserting when the kernel metadata is different than we expect,
we should just skip lowering that function.  This fixes assertion
failures with OpenCL argument metadata from older LLVM releases.

http://reviews.llvm.org/D13356

Files:
  lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp
  test/CodeGen/AMDGPU/opencl-image-metadata.ll

Index: test/CodeGen/AMDGPU/opencl-image-metadata.ll
===================================================================
--- /dev/null
+++ test/CodeGen/AMDGPU/opencl-image-metadata.ll
@@ -0,0 +1,24 @@
+; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=EG --check-prefix=FUNC %s
+; RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs | FileCheck --check-prefix=SI --check-prefix=FUNC %s
+
+; Make sure the OpenCL Image lowering pass doesn't crash when argument metadata
+; is not in expected order.
+
+; EG: CF_END
+; SI: s_endpgm
+define void @kernel(i32 addrspace(1)* %out) {
+entry:
+  store i32 0, i32 addrspace(1)* %out
+  ret void
+}
+
+attributes #3 = { nounwind }
+
+!opencl.kernels = !{!0}
+
+!0 = !{void (i32 addrspace(1)*)* @kernel, !1, !2, !3, !4, !5}
+!1 = !{!"kernel_arg_addr_space", i32 0}
+!2 = !{!"kernel_arg_access_qual", !"none"}
+!3 = !{!"kernel_arg_type", !"int*"}
+!4 = !{!"kernel_arg_type_qual", !""}
+!5 = !{!"kernel_arg_name", !""}
Index: lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp
===================================================================
--- lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp
+++ lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp
@@ -94,8 +94,12 @@
       return nullptr;
     if (!ArgNode->getOperand(0))
       return nullptr;
-    assert(cast<MDString>(ArgNode->getOperand(0))->getString() ==
-           KernelArgMDNodeNames[i] && "Wrong kernel arg metadata name");
+
+    // FIXME: It should be possible to do image lowering when some metadata
+    // args missing or not in the expected order.
+    if (cast<MDString>(ArgNode->getOperand(0))->getString() !=
+         KernelArgMDNodeNames[i])
+      return nullptr;
   }
 
   return F;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13356.36274.patch
Type: text/x-patch
Size: 1744 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151001/6cf5554b/attachment.bin>


More information about the llvm-commits mailing list