glsl2: Move the common optimization passes to a helper function.

These are passes that we expect all codegen to be happy with.  The
other lowering passes for Mesa IR are moved to the Mesa IR generator.
This commit is contained in:
Eric Anholt
2010-08-10 13:06:49 -07:00
parent c55aa4292f
commit 2f4fe15168
4 changed files with 72 additions and 73 deletions
+35
View File
@@ -33,6 +33,7 @@ extern "C" {
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"
#include "ir_optimization.h"
_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct __GLcontextRec *ctx,
GLenum target, void *mem_ctx)
@@ -705,3 +706,37 @@ ast_struct_specifier::ast_struct_specifier(char *identifier,
name = identifier;
this->declarations.push_degenerate_list_at_head(&declarator_list->link);
}
bool
do_common_optimization(exec_list *ir, bool linked)
{
GLboolean progress = GL_FALSE;
progress = do_sub_to_add_neg(ir) || progress;
if (linked) {
progress = do_function_inlining(ir) || progress;
progress = do_dead_functions(ir) || progress;
}
progress = do_structure_splitting(ir) || progress;
progress = do_if_simplification(ir) || progress;
progress = do_copy_propagation(ir) || progress;
if (linked)
progress = do_dead_code(ir) || progress;
else
progress = do_dead_code_unlinked(ir) || progress;
progress = do_dead_code_local(ir) || progress;
progress = do_tree_grafting(ir) || progress;
progress = do_constant_propagation(ir) || progress;
if (linked)
progress = do_constant_variable(ir) || progress;
else
progress = do_constant_variable_unlinked(ir) || progress;
progress = do_constant_folding(ir) || progress;
progress = do_algebraic(ir) || progress;
progress = do_if_return(ir) || progress;
progress = do_vec_index_to_swizzle(ir) || progress;
progress = do_swizzle_swizzle(ir) || progress;
return progress;
}