<div dir="ltr"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Sep 5, 2018 at 10:16 AM Matt Arsenault <<a href="mailto:arsenm2@gmail.com">arsenm2@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">ping<br></blockquote><div><br></div><div>merged last week as a9752f23ef3531c6c44fc60cfff9811862fd594a.</div><div><br></div><div>Jan</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> On Aug 22, 2018, at 15:41, Matt Arsenault <<a href="mailto:arsenm2@gmail.com" target="_blank">arsenm2@gmail.com</a>> wrote:<br>
> <br>
> Also fixes apparently missing coverage for special<br>
> input arguments not passed in registers.<br>
> ---<br>
> tests/cl/program/execute/<a href="http://calls-workitem-id.cl" rel="noreferrer" target="_blank">calls-workitem-id.cl</a> | 136 ++++++++++++++++++<br>
> 1 file changed, 136 insertions(+)<br>
> <br>
> diff --git a/tests/cl/program/execute/<a href="http://calls-workitem-id.cl" rel="noreferrer" target="_blank">calls-workitem-id.cl</a> b/tests/cl/program/execute/<a href="http://calls-workitem-id.cl" rel="noreferrer" target="_blank">calls-workitem-id.cl</a><br>
> index 7edfad7e9..b42c85959 100644<br>
> --- a/tests/cl/program/execute/<a href="http://calls-workitem-id.cl" rel="noreferrer" target="_blank">calls-workitem-id.cl</a><br>
> +++ b/tests/cl/program/execute/<a href="http://calls-workitem-id.cl" rel="noreferrer" target="_blank">calls-workitem-id.cl</a><br>
> @@ -38,6 +38,56 @@ arg_out: 2 buffer uint[64] \<br>
>   1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 \<br>
>   1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1<br>
> <br>
> +[test]<br>
> +name: Callee function stack passed get_local_id<br>
> +kernel_name: kernel_call_too_many_argument_regs_get_local_id_012<br>
> +dimensions: 3<br>
> +global_size: 8 4 2<br>
> +local_size: 8 4 2<br>
> +<br>
> +arg_out: 0 buffer uint[64] \<br>
> +  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7 \<br>
> +  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7 \<br>
> +  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7 \<br>
> +  0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7<br>
> +<br>
> +arg_out: 1 buffer uint[64] \<br>
> +  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1 \<br>
> +  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  3 \<br>
> +  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1 \<br>
> +  2  2  2  2  2  2  2  2  3  3  3  3  3  3  3  3<br>
> +<br>
> +arg_out: 2 buffer uint[64] \<br>
> +  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 \<br>
> +  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 \<br>
> +  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 \<br>
> +  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1<br>
> +<br>
> +[test]<br>
> +name: Callee function stack passed get_local_id with byval<br>
> +kernel_name: kernel_call_too_many_argument_regs_byval_get_local_id_012<br>
> +dimensions: 3<br>
> +global_size: 8 4 2<br>
> +local_size: 8 4 2<br>
> +<br>
> +arg_out: 0 buffer uint[64] \<br>
> +  45  46  47  48  49  50  51  52  45  46  47  48  49  50  51  52  \<br>
> +  45  46  47  48  49  50  51  52  45  46  47  48  49  50  51  52  \<br>
> +  45  46  47  48  49  50  51  52  45  46  47  48  49  50  51  52  \<br>
> +  45  46  47  48  49  50  51  52  45  46  47  48  49  50  51  52<br>
> +<br>
> +arg_out: 1 buffer uint[64] \<br>
> +  47  47  47  47  47  47  47  47  48  48  48  48  48  48  48  48 \<br>
> +  49  49  49  49  49  49  49  49  50  50  50  50  50  50  50  50 \<br>
> +  47  47  47  47  47  47  47  47  48  48  48  48  48  48  48  48 \<br>
> +  49  49  49  49  49  49  49  49  50  50  50  50  50  50  50  50<br>
> +<br>
> +arg_out: 2 buffer uint[64] \<br>
> +  50  50  50  50  50  50  50  50  50  50  50  50  50  50  50  50 \<br>
> +  50  50  50  50  50  50  50  50  50  50  50  50  50  50  50  50 \<br>
> +  51  51  51  51  51  51  51  51  51  51  51  51  51  51  51  51 \<br>
> +  51  51  51  51  51  51  51  51  51  51  51  51  51  51  51  51<br>
> +<br>
> !*/<br>
> <br>
> #define NOINLINE __attribute__((noinline))<br>
> @@ -75,3 +125,89 @@ kernel void kernel_call_pass_get_global_id_012(global uint *out0,<br>
> {<br>
>     func_get_global_id_012(out0, out1, out2);<br>
> }<br>
> +<br>
> +// On amdgcn, this will require the workitem IDs be passed as values<br>
> +// on the stack after the arguments.<br>
> +NOINLINE<br>
> +uint3 too_many_argument_regs_get_local_id_012(<br>
> +     int arg0, int arg1, int arg2, int arg3,<br>
> +     int arg4, int arg5, int arg6, int arg7,<br>
> +     int arg8, int arg9, int arg10, int arg11,<br>
> +     int arg12, int arg13, int arg14, int arg15,<br>
> +     int arg16, int arg17, int arg18, int arg19,<br>
> +     int arg20, int arg21, int arg22, int arg23,<br>
> +     int arg24, int arg25, int arg26, int arg27,<br>
> +     int arg28, int arg29, int arg30, int arg31)<br>
> +{<br>
> +     uint3 id;<br>
> +     id.x = get_local_id(0);<br>
> +     id.y = get_local_id(1);<br>
> +     id.z = get_local_id(2);<br>
> +     return id;<br>
> +}<br>
> +<br>
> +kernel void kernel_call_too_many_argument_regs_get_local_id_012(global uint* out0, global uint* out1, global uint* out2)<br>
> +{<br>
> +     uint id0 = get_global_id(0);<br>
> +     uint id1 = get_global_id(1);<br>
> +     uint id2 = get_global_id(2);<br>
> +     uint flat_id = (id2 * get_global_size(1) + id1) * get_global_size(0) + id0;<br>
> +<br>
> +     uint3 result = too_many_argument_regs_get_local_id_012(<br>
> +             1234, 999, 42, 5555, 8888, 9009, 777, 4242,<br>
> +             202020, 6359, 8344, 1443, 552323, 33424, 666, 98765,<br>
> +             2222, 232556, 57777, 934121, 94991, 1337, 0xdead, 0xbeef,<br>
> +             0x5555, 0x3333, 0x666, 0x4141, 0x1234, 0x8888, 0xaaaa, 0xbbbb);<br>
> +<br>
> +     out0[flat_id] = result.x;<br>
> +     out1[flat_id] = result.y;<br>
> +     out2[flat_id] = result.z;<br>
> +}<br>
> +<br>
> +<br>
> +typedef struct ByValStruct {<br>
> +     long array[9];<br>
> +} ByValStruct;<br>
> +<br>
> +// Same as previous, with an additional byval passed argument.<br>
> +NOINLINE<br>
> +uint3 too_many_argument_regs_byval_get_local_id_012(<br>
> +     ByValStruct byval_arg,<br>
> +     int arg0, int arg1, int arg2, int arg3,<br>
> +     int arg4, int arg5, int arg6, int arg7,<br>
> +     int arg8, int arg9, int arg10, int arg11,<br>
> +     int arg12, int arg13, int arg14, int arg15,<br>
> +     int arg16, int arg17, int arg18, int arg19,<br>
> +     int arg20, int arg21, int arg22, int arg23,<br>
> +     int arg24, int arg25, int arg26, int arg27,<br>
> +     int arg28, int arg29, int arg30, int arg31)<br>
> +{<br>
> +     uint3 id;<br>
> +     id.x = get_local_id(0) + byval_arg.array[3]; // + 42 + 3<br>
> +     id.y = get_local_id(1) + byval_arg.array[5]; // + 42 + 5<br>
> +     id.z = get_local_id(2) + byval_arg.array[8]; // + 42 + 8<br>
> +     return id;<br>
> +}<br>
> +<br>
> +kernel void kernel_call_too_many_argument_regs_byval_get_local_id_012(global uint* out0, global uint* out1, global uint* out2)<br>
> +{<br>
> +     uint id0 = get_global_id(0);<br>
> +     uint id1 = get_global_id(1);<br>
> +     uint id2 = get_global_id(2);<br>
> +     uint flat_id = (id2 * get_global_size(1) + id1) * get_global_size(0) + id0;<br>
> +<br>
> +     ByValStruct byval;<br>
> +     for (int i = 0; i < 9; ++i)<br>
> +             byval.array[i] = 42 + i;<br>
> +<br>
> +     uint3 result = too_many_argument_regs_byval_get_local_id_012(<br>
> +             byval,<br>
> +             1234, 999, 42, 5555, 8888, 9009, 777, 4242,<br>
> +             202020, 6359, 8344, 1443, 552323, 33424, 666, 98765,<br>
> +             2222, 232556, 57777, 934121, 94991, 1337, 0xdead, 0xbeef,<br>
> +             0x5555, 0x3333, 0x666, 0x4141, 0x1234, 0x8888, 0xaaaa, 0xbbbb);<br>
> +<br>
> +     out0[flat_id] = result.x;<br>
> +     out1[flat_id] = result.y;<br>
> +     out2[flat_id] = result.z;<br>
> +}<br>
> -- <br>
> 2.17.1<br>
> <br>
<br>
</blockquote></div></div></div>