> 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