blob: dae426266d989561896ac2ab98ee0b44551abaa7 [file] [log] [blame]
/*#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;
}