projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
glsl: Generate compile errors for explicit blend indices < 0 or > 1.
[mesa.git]
/
src
/
glsl
/
opt_if_simplification.cpp
diff --git
a/src/glsl/opt_if_simplification.cpp
b/src/glsl/opt_if_simplification.cpp
index 29b1d18aa59259b37eb61d45589b91aa3a10b142..e1a23d94a981519fd2abe446591fe8f787e0d42c 100644
(file)
--- a/
src/glsl/opt_if_simplification.cpp
+++ b/
src/glsl/opt_if_simplification.cpp
@@
-30,6
+30,8
@@
#include "ir.h"
#include "ir.h"
+namespace {
+
class ir_if_simplification_visitor : public ir_hierarchical_visitor {
public:
ir_if_simplification_visitor()
class ir_if_simplification_visitor : public ir_hierarchical_visitor {
public:
ir_if_simplification_visitor()
@@
-43,12
+45,15
@@
public:
bool made_progress;
};
bool made_progress;
};
+} /* unnamed namespace */
+
/* We only care about the top level "if" instructions, so don't
* descend into expressions.
*/
ir_visitor_status
ir_if_simplification_visitor::visit_enter(ir_assignment *ir)
{
/* We only care about the top level "if" instructions, so don't
* descend into expressions.
*/
ir_visitor_status
ir_if_simplification_visitor::visit_enter(ir_assignment *ir)
{
+ (void) ir;
return visit_continue_with_parent;
}
return visit_continue_with_parent;
}
@@
-65,6
+70,14
@@
do_if_simplification(exec_list *instructions)
ir_visitor_status
ir_if_simplification_visitor::visit_leave(ir_if *ir)
{
ir_visitor_status
ir_if_simplification_visitor::visit_leave(ir_if *ir)
{
+ /* If the if statement has nothing on either side, remove it. */
+ if (ir->then_instructions.is_empty() &&
+ ir->else_instructions.is_empty()) {
+ ir->remove();
+ this->made_progress = true;
+ return visit_continue;
+ }
+
/* FINISHME: Ideally there would be a way to note that the condition results
* FINISHME: in a constant before processing both of the other subtrees.
* FINISHME: This can probably be done with some flags, but it would take
/* FINISHME: Ideally there would be a way to note that the condition results
* FINISHME: in a constant before processing both of the other subtrees.
* FINISHME: This can probably be done with some flags, but it would take