1cb93a386Sopenharmony_ciuniform half4 colorGreen;
2cb93a386Sopenharmony_ciuniform half unknownInput;
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_cistruct S {
5cb93a386Sopenharmony_ci    half4 ah4[1];
6cb93a386Sopenharmony_ci    half ah[1];
7cb93a386Sopenharmony_ci    half4 h4;
8cb93a386Sopenharmony_ci    half h;
9cb93a386Sopenharmony_ci};
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci// Each helper function needs to reference the variable multiple times, because if it's only read
12cb93a386Sopenharmony_ci// from once, it is inlined directly whether or not it is trivial.
13cb93a386Sopenharmony_cihalf4 funcb(bool b) {
14cb93a386Sopenharmony_ci    return half4(b, b, b, !b);
15cb93a386Sopenharmony_ci}
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_cihalf4 func1(half h) {
18cb93a386Sopenharmony_ci    return h.xxxx * h.xxxx;
19cb93a386Sopenharmony_ci}
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_cihalf4 func2(half2 h2) {
22cb93a386Sopenharmony_ci    return h2.xyxy * h2.yxyx;
23cb93a386Sopenharmony_ci}
24cb93a386Sopenharmony_ci
25cb93a386Sopenharmony_cihalf4 func3(half3 h3) {
26cb93a386Sopenharmony_ci    return h3.xyzx * h3.xyzx;
27cb93a386Sopenharmony_ci}
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_cihalf4 func4(half4 h4) {
30cb93a386Sopenharmony_ci    return h4 * h4;
31cb93a386Sopenharmony_ci}
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_cihalf4 main(float2 coords) {
34cb93a386Sopenharmony_ci    S s;
35cb93a386Sopenharmony_ci    s.ah4[0] = half4(unknownInput);
36cb93a386Sopenharmony_ci    s.ah[0] = unknownInput;
37cb93a386Sopenharmony_ci    s.h4 = half4(unknownInput);
38cb93a386Sopenharmony_ci    s.h = unknownInput;
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci    S as[1];
41cb93a386Sopenharmony_ci    as[0].ah4[0] = half4(unknownInput);
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci    bool b = bool(unknownInput);
44cb93a386Sopenharmony_ci    int i = int(unknownInput);
45cb93a386Sopenharmony_ci
46cb93a386Sopenharmony_ci    // These expressions are considered "trivial" and will be cloned directly into the inlined
47cb93a386Sopenharmony_ci    // function without a temporary variable.
48cb93a386Sopenharmony_ci    half4 var;
49cb93a386Sopenharmony_ci    var = func1(+s.h);
50cb93a386Sopenharmony_ci    var = funcb(b);
51cb93a386Sopenharmony_ci    var = func2(s.ah4[0].yw);
52cb93a386Sopenharmony_ci    var = func2(as[0].ah4[0].xy);
53cb93a386Sopenharmony_ci    var = func3(s.h4.zzz);
54cb93a386Sopenharmony_ci    var = func3(colorGreen.xyz);
55cb93a386Sopenharmony_ci    var = func3(s.h.xxx);
56cb93a386Sopenharmony_ci    var = func4(half4(s.h));
57cb93a386Sopenharmony_ci    var = func4(s.ah4[0].xxxy);
58cb93a386Sopenharmony_ci    var = func4(colorGreen);
59cb93a386Sopenharmony_ci
60cb93a386Sopenharmony_ci    // These expressions are considered "non-trivial" and will be placed in a temporary variable
61cb93a386Sopenharmony_ci    // when inlining occurs.
62cb93a386Sopenharmony_ci    var = func1(-s.h);
63cb93a386Sopenharmony_ci    var = funcb(!b);
64cb93a386Sopenharmony_ci//  var = func2(as[i].h4.yw);  // indexing by non-constant expressions disallowed in ES2
65cb93a386Sopenharmony_ci    var = func3(s.h4.yyy + s.h4.zzz);
66cb93a386Sopenharmony_ci    var = func4(s.h4.y001);
67cb93a386Sopenharmony_ci
68cb93a386Sopenharmony_ci    return colorGreen;
69cb93a386Sopenharmony_ci}
70