1cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_cibool test() { 4cb93a386Sopenharmony_ci const half4 colorWhite = half4(1); 5cb93a386Sopenharmony_ci const half2 point = half2(40, 60); 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci bool ok = true; 8cb93a386Sopenharmony_ci // Comparisons on swizzled constants should fold 9cb93a386Sopenharmony_ci ok = ok && (point.x >= 0 && point.x <= 100 && point.y >= 0 && point.y <= 100); 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci // Arithmetic on swizzled constants should fold 12cb93a386Sopenharmony_ci ok = ok && (colorWhite.x == 1); 13cb93a386Sopenharmony_ci ok = ok && (colorWhite.x + colorWhite.y == 2); 14cb93a386Sopenharmony_ci ok = ok && (colorWhite.x + colorWhite.y + colorWhite.z == 3); 15cb93a386Sopenharmony_ci ok = ok && (colorWhite.x + colorWhite.y + colorWhite.z + colorWhite.w == 4); 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci // No-op arithmetic using swizzled constants should fold away 18cb93a386Sopenharmony_ci ok = ok && ((colorGreen * colorWhite.x) != (colorRed * colorWhite.y)); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ci // Folding on swizzles with more than one component should be optimized. 21cb93a386Sopenharmony_ci const half2 pointOffset = point.yx + colorWhite.xz; 22cb93a386Sopenharmony_ci ok = ok && (pointOffset == half2(61, 41)); 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci return ok; 25cb93a386Sopenharmony_ci} 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_cihalf4 main(float2 coords) { 28cb93a386Sopenharmony_ci return test() ? colorGreen : colorRed; 29cb93a386Sopenharmony_ci} 30