> On Apr 4, 2018, at 15:52, Jan Vesely <jan.ves...@rutgers.edu> wrote:
> 
> On Tue, 2018-04-03 at 18:03 -0400, Matt Arsenault wrote:
>> ping
>> 
>>> On Mar 29, 2018, at 10:35, Matt Arsenault <arse...@gmail.com> wrote:
>>> 
>>> ---
>>> tests/cl/program/execute/realign-stack.cl | 96 
>>> +++++++++++++++++++++++++++++++
>>> 1 file changed, 96 insertions(+)
>>> create mode 100644 tests/cl/program/execute/realign-stack.cl
>>> 
>>> diff --git a/tests/cl/program/execute/realign-stack.cl 
>>> b/tests/cl/program/execute/realign-stack.cl
>>> new file mode 100644
>>> index 000000000..ed62ea211
>>> --- /dev/null
>>> +++ b/tests/cl/program/execute/realign-stack.cl
>>> @@ -0,0 +1,96 @@
>>> +/*!
>>> +
>>> +[config]
>>> +name: call with stack realignment
> 
> why does this care about call? 
> CLC requires types to be aligned to next power of 2 of their size
> irrespective of the location. HOw is this different from any other
> __private variable declaration?
> 

This is testing that requirement when the object resides in a frame that isn’t 
the entry point / kernel. The problem was this requirement wasn’t being 
respected because the frame itself wasn’t aligned, so the absolute address of 
the object wasn’t properly aligned.







>>> +
>>> +[test]
>>> +name: call stack realignment 16
>>> +kernel_name: kernel_call_stack_realign16_func
>>> +dimensions: 1
>>> +global_size: 1 0 0
>>> +
>>> +arg_out: 0 buffer int[1] \
>>> +  1
> 
> redundant newline
> 
>>> +
>>> +
>>> +[test]
>>> +name: call stack realignment 32
>>> +kernel_name: kernel_call_stack_realign32_func
>>> +dimensions: 1
>>> +global_size: 1 0 0
>>> +
>>> +arg_out: 0 buffer int[1] \
>>> +  1
> 
> same here
> 
>>> +
>>> +[test]
>>> +name: call stack realignment 64
>>> +kernel_name: kernel_call_stack_realign64_func
>>> +dimensions: 1
>>> +global_size: 1 0 0
>>> +
>>> +arg_out: 0 buffer int[1] \
>>> +  1
> 
> same here
> 
>>> +
>>> +[test]
>>> +name: call stack realignment 128
>>> +kernel_name: kernel_call_stack_realign128_func
>>> +dimensions: 1
>>> +global_size: 1 0 0
>>> +
>>> +arg_out: 0 buffer int[1] \
>>> +  1
> 
> and here
> 
>>> +
>>> +!*/
>>> +
>>> +// Make sure the absolute private address of stack objects in callee
>>> +// functions is properly aligned.
>>> +
>>> +#define NOINLINE __attribute__((noinline))
>>> +
>>> +NOINLINE
>>> +int test_stack_object_alignment16() {
>>> +    volatile int4 requires_align16 = 0;
>>> +    volatile uint addr = (uint)&requires_align16;
> 
> this should use uintptr_t. why is the addr variable volatile?
> same in the below tests.

Optimizations can use the alignment information to conclude this is always 
true, so the volatile load from memory prevents this


_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to