1cb93a386Sopenharmony_ciuniform half4 colorRed, colorGreen; 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_cibool test() { 4cb93a386Sopenharmony_ci const float floatOne = 1; 5cb93a386Sopenharmony_ci const int intOne = 1; 6cb93a386Sopenharmony_ci const half4 half4One = half4(1); 7cb93a386Sopenharmony_ci const int4 int4One = int4(1); 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci bool ok = true; 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci // Typecasting a constant scalar variable should fold away. 12cb93a386Sopenharmony_ci ok = ok && (int(floatOne) == intOne); 13cb93a386Sopenharmony_ci ok = ok && (float(intOne) == floatOne); 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci // Typecasting a constant vector variable should fold away. 16cb93a386Sopenharmony_ci ok = ok && (int4(half4One) == int4One); 17cb93a386Sopenharmony_ci ok = ok && (half4(int4One) == half4One); 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ci // More complex cases should also fold. 20cb93a386Sopenharmony_ci ok = ok && (int4(half4One) == int4(intOne)); // cast(vector) == splat(scalar) 21cb93a386Sopenharmony_ci ok = ok && (half4(int4One) == half4(half(floatOne))); // cast(vector) == splat(cast(scalar)) 22cb93a386Sopenharmony_ci ok = ok && (half4(intOne) == half4(float4(floatOne))); // splatcast(sclr) == cast(splat(sclr)) 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci return ok; 25cb93a386Sopenharmony_ci} 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_cihalf4 main(float2 coords) { 28cb93a386Sopenharmony_ci return test() ? colorGreen : colorRed; 29cb93a386Sopenharmony_ci} 30