1cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen, testInputs;
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_cihalf fn(half4 v) {
4cb93a386Sopenharmony_ci    // Add an un-inlinable construct to ensure that fn() remains a standalone function.
5cb93a386Sopenharmony_ci    for (int x=1; x<=2; ++x) {
6cb93a386Sopenharmony_ci        return v.x;
7cb93a386Sopenharmony_ci    }
8cb93a386Sopenharmony_ci}
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_cihalf4 main(float2 coords) {
11cb93a386Sopenharmony_ci    half4 v = testInputs;
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci    v = v.rgba;
14cb93a386Sopenharmony_ci    v = v.rgb0.abgr;
15cb93a386Sopenharmony_ci    v = v.rgba.00ra;
16cb93a386Sopenharmony_ci    v = v.rgba.rrra.00ra.11ab;
17cb93a386Sopenharmony_ci    v = v.abga.gb11;
18cb93a386Sopenharmony_ci    v = v.abgr.abgr;
19cb93a386Sopenharmony_ci    v = half4(v.rrrr.bb, 1, 1);
20cb93a386Sopenharmony_ci    v = half4(v.ba.grgr);
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ci    // The swizzle will not be optimized away to avoid eliminating fn().
23cb93a386Sopenharmony_ci    v = half3(fn(v), 123, 456).yyzz;
24cb93a386Sopenharmony_ci    v = half3(fn(v), half2(123, 456)).yyzz;
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_ci    // The swizzle will be optimized away because fn() can be reordered.
27cb93a386Sopenharmony_ci    v = half3(fn(v), 123, 456).yzzx;
28cb93a386Sopenharmony_ci    v = half3(fn(v), half2(123, 456)).yzzx;
29cb93a386Sopenharmony_ci
30cb93a386Sopenharmony_ci    // The swizzle will not be optimized away to avoid duplicating fn().
31cb93a386Sopenharmony_ci    v = half3(fn(v), 123, 456).yxxz;
32cb93a386Sopenharmony_ci    v = half3(fn(v), half2(123, 456)).yxxz;
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci    // Swizzled constants.
35cb93a386Sopenharmony_ci    v = half4(1, 2, 3, 4).xxyz;
36cb93a386Sopenharmony_ci
37cb93a386Sopenharmony_ci    // Swizzled uniforms mixed with constants.
38cb93a386Sopenharmony_ci    v = half4(1, colorRed.rgb).yzwx;
39cb93a386Sopenharmony_ci    v = half4(1, colorRed.rgb).yxzw;
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci    // Left-side swizzles.
42cb93a386Sopenharmony_ci    v.rgba = v;
43cb93a386Sopenharmony_ci    v.abgr = v;
44cb93a386Sopenharmony_ci    v.rgba.ra = v.gb;
45cb93a386Sopenharmony_ci    v.abgr.gba = v.aa1;
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_ci    return v == half4(1) ? colorGreen : colorRed;
48cb93a386Sopenharmony_ci}
49