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