blob: a63f260207d0b226bc0104a1fed7d8246ee0655c [file] [log] [blame]
David Neto1e19b552021-06-17 09:10:04 +00001#include <metal_stdlib>
2
3using namespace metal;
Ben Claytonf47887d2022-06-24 17:01:59 +00004
5template<typename T, size_t N>
6struct tint_array {
7 const constant T& operator[](size_t i) const constant { return elements[i]; }
8 device T& operator[](size_t i) device { return elements[i]; }
9 const device T& operator[](size_t i) const device { return elements[i]; }
10 thread T& operator[](size_t i) thread { return elements[i]; }
11 const thread T& operator[](size_t i) const thread { return elements[i]; }
12 threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
13 const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
14 T elements[N];
David Neto1e19b552021-06-17 09:10:04 +000015};
Ben Clayton8ec32a62022-02-09 23:55:51 +000016
James Price0e22bdb2023-03-20 21:46:01 +000017struct tint_private_vars_struct {
18 tint_array<int4, 4> src_private;
19};
20
David Neto1e19b552021-06-17 09:10:04 +000021struct S {
Ben Claytonf47887d2022-06-24 17:01:59 +000022 /* 0x0000 */ tint_array<int4, 4> arr;
David Neto1e19b552021-06-17 09:10:04 +000023};
David Neto1e19b552021-06-17 09:10:04 +000024
Ben Claytonf47887d2022-06-24 17:01:59 +000025tint_array<int4, 4> ret_arr() {
26 tint_array<int4, 4> const tint_symbol_1 = tint_array<int4, 4>{};
Antonio Maiorano93baaae2022-03-15 15:35:13 +000027 return tint_symbol_1;
David Neto1e19b552021-06-17 09:10:04 +000028}
29
30S ret_struct_arr() {
dan sinclair3abad2c2022-08-11 02:28:01 +000031 S const tint_symbol_2 = S{};
Antonio Maiorano93baaae2022-03-15 15:35:13 +000032 return tint_symbol_2;
David Neto1e19b552021-06-17 09:10:04 +000033}
34
James Price0e22bdb2023-03-20 21:46:01 +000035void foo(tint_array<int4, 4> src_param, thread tint_private_vars_struct* const tint_private_vars, threadgroup tint_array<int4, 4>* const tint_symbol_4, const constant S* const tint_symbol_5, device S* const tint_symbol_6) {
Ben Claytonf47887d2022-06-24 17:01:59 +000036 tint_array<int4, 4> src_function = {};
37 tint_array<int4, 4> dst = {};
38 tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)};
Antonio Maiorano93baaae2022-03-15 15:35:13 +000039 dst = tint_symbol_3;
David Neto1e19b552021-06-17 09:10:04 +000040 dst = src_param;
41 dst = ret_arr();
Ben Claytonf47887d2022-06-24 17:01:59 +000042 tint_array<int4, 4> const src_let = tint_array<int4, 4>{};
David Neto1e19b552021-06-17 09:10:04 +000043 dst = src_let;
44 dst = src_function;
James Price0e22bdb2023-03-20 21:46:01 +000045 dst = (*(tint_private_vars)).src_private;
46 dst = *(tint_symbol_4);
Antonio Maiorano93baaae2022-03-15 15:35:13 +000047 S const tint_symbol = ret_struct_arr();
48 dst = tint_symbol.arr;
James Price0e22bdb2023-03-20 21:46:01 +000049 dst = (*(tint_symbol_5)).arr;
James Pricee548db92021-10-28 15:00:39 +000050 dst = (*(tint_symbol_6)).arr;
Ben Claytonf47887d2022-06-24 17:01:59 +000051 tint_array<tint_array<tint_array<int, 2>, 3>, 4> dst_nested = {};
52 tint_array<tint_array<tint_array<int, 2>, 3>, 4> src_nested = {};
David Neto1e19b552021-06-17 09:10:04 +000053 dst_nested = src_nested;
54}
55