[Mesa-dev] [PATCH] radeon/llvm: Allocate space for kernel metadata operands
Aaron Watry
awatry at gmail.com
Thu Jul 3 08:46:17 PDT 2014
On Thu, Jul 3, 2014 at 9:56 AM, Tom Stellard <tom at stellard.net> wrote:
> On Wed, Jul 02, 2014 at 04:34:24PM -0500, Aaron Watry wrote:
>> Previously, we were assuming that kernel metadata nodes only had 1 operand.
>>
>> Kernels which have attributes can have more than 1, e.g.:
>> !0 = metadata !{void (i32 addrspace(1)*)* @testKernel, metadata !1}
>> !1 = metadata !{metadata !"work_group_size_hint", i32 4, i32 1, i32 1}
>>
>> Attempting to get the kernel without the correct number of attributes led
>> to memory corruption and luxrays crashing out.
>>
>> Fixes the cl/program/execute/attributes.cl piglit test.
>>
>
> Thanks for tracking this down.
>
no problem. It was driving me nuts. I've now got the luxmark kernels
building successfully on evergreen (followed by a machine hang and
loss of signal to the monitor, but that could be the kernel or the
fact that CEDAR seems extra crashy compared to my other EG/NI cards)
and I'm getting an instruction selection error on radeonsi. Haven't
managed to track that down yet, but at least it means that all
required built-ins/defines for luxrays are now present (at least with
my own libclc tree), at least with image support disabled in luxrays.
If you enable image support, I believe that it is still going to fail
due to mismatches/oddness with the number of supported pixel formats.
--Aaron
> Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
>
>> Signed-off-by: Aaron Watry <awatry at gmail.com>
>> CC: Tom Stellard <thomas.stellard at amd.com>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76223
>> ---
>> src/gallium/drivers/radeon/radeon_llvm_util.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.c b/src/gallium/drivers/radeon/radeon_llvm_util.c
>> index 2ace91f..ec11559 100644
>> --- a/src/gallium/drivers/radeon/radeon_llvm_util.c
>> +++ b/src/gallium/drivers/radeon/radeon_llvm_util.c
>> @@ -100,13 +100,17 @@ LLVMModuleRef radeon_llvm_get_kernel_module(LLVMContextRef ctx, unsigned index,
>> kernel_metadata = MALLOC(num_kernels * sizeof(LLVMValueRef));
>> LLVMGetNamedMetadataOperands(mod, "opencl.kernels", kernel_metadata);
>> for (i = 0; i < num_kernels; i++) {
>> - LLVMValueRef kernel_signature, kernel_function;
>> + LLVMValueRef kernel_signature, *kernel_function;
>> + unsigned num_kernel_md_operands;
>> if (i == index) {
>> continue;
>> }
>> kernel_signature = kernel_metadata[i];
>> - LLVMGetMDNodeOperands(kernel_signature, &kernel_function);
>> - LLVMDeleteFunction(kernel_function);
>> + num_kernel_md_operands = LLVMGetMDNodeNumOperands(kernel_signature);
>> + kernel_function = MALLOC(num_kernel_md_operands * sizeof (LLVMValueRef));
>> + LLVMGetMDNodeOperands(kernel_signature, kernel_function);
>> + LLVMDeleteFunction(*kernel_function);
>> + FREE(kernel_function);
>> }
>> FREE(kernel_metadata);
>> radeon_llvm_optimize(mod);
>> --
>> 1.9.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list