6fb520fcd5
- Values from constant variables are folded in when it helps, e.g.: const bool SHINY = true; const float SHININESS = 2; if (!SHINY) { // <-- optimizes directly to `false` param = -SHININESS; // <-- optimizes to `-2` - Doubled-up logical-not and negation are stripped: y = -(-x); // <-- optimizes to `y = x;` b = !!a; // <-- optimizes to `b = a;` Removal of doubled-up negation and logical-not was actually never implemented in the constant-propagation phase; I just noticed it while I was here and thinking about it. Change-Id: Ie28bb9b5af91376f03d926e26e37f4a131bbf550 Bug: skia:11343 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/379298 Auto-Submit: John Stiles <johnstiles@google.com> Commit-Queue: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
32 lines
918 B
Plaintext
32 lines
918 B
Plaintext
uniform half4 colorGreen, colorRed;
|
|
|
|
bool test_float() {
|
|
const float one = 1;
|
|
float two = 2;
|
|
|
|
float4 result;
|
|
result.r = (half4(-1) == -half4(-half2(-1), half2(1))) ? 1 : 0;
|
|
result.g = (half4(1) != -half4(1)) ? 1 : 0;
|
|
result.b = (-half4(two) == half4(-two, half3(-two))) ? 1 : 0;
|
|
result.a = (-half2(-one, one + one) == -half2(one - two, two)) ? 1 : 0;
|
|
|
|
return bool(result.r * result.g * result.b * -(-result.a));
|
|
}
|
|
|
|
bool test_int() {
|
|
int one = 1;
|
|
const int two = 2;
|
|
|
|
int4 result;
|
|
result.r = (int4(-1) == -int4(-int2(-1), int2(1))) ? 1 : 0;
|
|
result.g = (int4(1) != -int4(1)) ? 1 : 0;
|
|
result.b = (-int4(two) == int4(-two, int3(-two))) ? 1 : 0;
|
|
result.a = (-int2(-one, one + one) == -int2(one - two, two)) ? 1 : 0;
|
|
|
|
return bool(-(-result.r) * result.g * result.b * result.a);
|
|
}
|
|
|
|
half4 main() {
|
|
return test_float() && test_int() ? colorGreen : colorRed;
|
|
}
|