78 lines
1.7 KiB
Plaintext
78 lines
1.7 KiB
Plaintext
/*#pragma settings NoOptimize*/
|
|
|
|
uniform half4 colorGreen, colorRed;
|
|
|
|
bool flatten_compound_constructor() {
|
|
int4 x = int4(int3(int2(1, 2), 3), 4);
|
|
int4 y = int4(1, int3(2, int2(3, 4)));
|
|
return x == y;
|
|
}
|
|
|
|
bool flatten_known_if() {
|
|
int value;
|
|
if (true) {
|
|
value = 1;
|
|
} else {
|
|
value = 2;
|
|
}
|
|
return value == 1;
|
|
}
|
|
|
|
bool eliminate_empty_if_else() {
|
|
bool check = false;
|
|
if (check = !check /* assignment is intentional! */) {} else {}
|
|
return check;
|
|
}
|
|
|
|
bool eliminate_empty_else() {
|
|
bool check = true;
|
|
if (check) { return true; } else {}
|
|
return false;
|
|
}
|
|
|
|
bool flatten_matching_ternary() {
|
|
bool check = true;
|
|
return check ? true : true;
|
|
}
|
|
|
|
bool flatten_expr_without_side_effects() {
|
|
bool check = true;
|
|
check;
|
|
return check;
|
|
}
|
|
|
|
bool eliminate_no_op_arithmetic() {
|
|
// Constant-expression folding needs to work when all values are known, even if optimizations
|
|
// are disabled.
|
|
const int ONE = 1;
|
|
int a1[ONE * 1];
|
|
int a2[ONE + 0];
|
|
|
|
// However, expressions with a known and an unknown shouldn't fold when optimizations are off.
|
|
int x = ONE;
|
|
x = x + 0;
|
|
x *= 1;
|
|
return x == 1;
|
|
}
|
|
|
|
bool flatten_switch() {
|
|
switch (1) {
|
|
case 0: return false;
|
|
case 1: return true;
|
|
case 2: return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
half4 main(float2 coords) {
|
|
return flatten_compound_constructor()
|
|
&& flatten_known_if()
|
|
&& eliminate_empty_if_else()
|
|
&& eliminate_empty_else()
|
|
&& flatten_matching_ternary()
|
|
&& flatten_expr_without_side_effects()
|
|
&& eliminate_no_op_arithmetic()
|
|
&& flatten_switch()
|
|
? colorGreen : colorRed;
|
|
}
|