From 5246a3643b045e74280bf1210786ab2e044f2257 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 1 Oct 2015 21:16:05 +0000 Subject: [PATCH] AMDGPU/SI: Remove assert from AMDGPUOpenCLImageTypeLowering pass Summary: 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. Reviewers: arsenm Subscribers: arsenm, llvm-commits Differential Revision: http://reviews.llvm.org/D13356 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249073 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../AMDGPUOpenCLImageTypeLoweringPass.cpp | 8 +++++-- test/CodeGen/AMDGPU/opencl-image-metadata.ll | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/CodeGen/AMDGPU/opencl-image-metadata.ll diff --git a/lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp b/lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp index 40b7936d663..554bf1da81f 100644 --- a/lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp +++ b/lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp @@ -94,8 +94,12 @@ GetFunctionFromMDNode(MDNode *Node) { return nullptr; if (!ArgNode->getOperand(0)) return nullptr; - assert(cast(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. + MDString *StringNode = dyn_cast(ArgNode->getOperand(0)); + if (!StringNode || StringNode->getString() != KernelArgMDNodeNames[i]) + return nullptr; } return F; diff --git a/test/CodeGen/AMDGPU/opencl-image-metadata.ll b/test/CodeGen/AMDGPU/opencl-image-metadata.ll new file mode 100644 index 00000000000..bc467e47dc3 --- /dev/null +++ b/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", !""}