Skip to content

Commit

Permalink
AMDGPU/SI: Remove assert from AMDGPUOpenCLImageTypeLowering pass
Browse files Browse the repository at this point in the history
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

llvm-svn: 249073
  • Loading branch information
tstellarAMD committed Oct 1, 2015
1 parent 8587212 commit e9f8b24
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
8 changes: 6 additions & 2 deletions llvm/lib/Target/AMDGPU/AMDGPUOpenCLImageTypeLoweringPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,12 @@ GetFunctionFromMDNode(MDNode *Node) {
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.
MDString *StringNode = dyn_cast<MDString>(ArgNode->getOperand(0));
if (!StringNode || StringNode->getString() != KernelArgMDNodeNames[i])
return nullptr;
}

return F;
Expand Down
24 changes: 24 additions & 0 deletions llvm/test/CodeGen/AMDGPU/opencl-image-metadata.ll
Original file line number Diff line number Diff line change
@@ -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", !""}

0 comments on commit e9f8b24

Please sign in to comment.