glsl: Put a bunch of optimization visitors under anonymous namespaces.
authorEric Anholt <eric@anholt.net>
Tue, 29 May 2012 23:18:37 +0000 (16:18 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 11 Jun 2012 16:28:00 +0000 (09:28 -0700)
Because these classes are used entirely from their own source files
and not from separate DSOs, the linker gets to produce massively less
code.  This cuts about 13k of text in the libdricore case.  In the
non-libdricore case, the additional linkage information allows the
compiler to inline some code, so libglsl.a size actually increases by
about 300 bytes.

For a dricore build, improves shader_runner runtime on
glsl-fs-copy-propagation-texcoords-1 by 0.21% +/- 0.03% (n=353574,
outliers removed).  No statistically significant difference with n=322
on glslparsertest on a yofrankie shader intended to test compiler
performance.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
15 files changed:
src/glsl/opt_algebraic.cpp
src/glsl/opt_constant_folding.cpp
src/glsl/opt_constant_propagation.cpp
src/glsl/opt_constant_variable.cpp
src/glsl/opt_copy_propagation.cpp
src/glsl/opt_copy_propagation_elements.cpp
src/glsl/opt_dead_code_local.cpp
src/glsl/opt_dead_functions.cpp
src/glsl/opt_function_inlining.cpp
src/glsl/opt_if_simplification.cpp
src/glsl/opt_noop_swizzle.cpp
src/glsl/opt_redundant_jumps.cpp
src/glsl/opt_structure_splitting.cpp
src/glsl/opt_swizzle_swizzle.cpp
src/glsl/opt_tree_grafting.cpp

index cade9611dbbe2428bd44ad16d7029579b33a0e5d..d39761260502bc3e73f1680f3950d830e65652f0 100644 (file)
@@ -34,6 +34,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 /**
  * Visitor class for replacing expressions with ir_constant values.
  */
@@ -68,6 +70,8 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
+
 static inline bool
 is_vec_zero(ir_constant *ir)
 {
index dcad59997f1aaf698cf35bda1bec3010912acd93..7d94d481c9ff2823b6f52474b796b9e53ed14227 100644 (file)
@@ -32,6 +32,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 /**
  * Visitor class for replacing expressions with ir_constant values.
  */
@@ -56,6 +58,8 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
+
 void
 ir_constant_folding_visitor::handle_rvalue(ir_rvalue **rvalue)
 {
index 2601b52f6d367097311da38f5b15757b99ecdde8..c5ae36b692c61a1b43c13bf06202f44b7a8e678f 100644 (file)
@@ -41,6 +41,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 class acp_entry : public exec_node
 {
 public:
@@ -450,6 +452,8 @@ ir_constant_propagation_visitor::add_constant(ir_assignment *ir)
    this->acp->push_tail(entry);
 }
 
+} /* unnamed namespace */
+
 /**
  * Does a constant propagation pass on the code present in the instruction stream.
  */
index f3bc8675efd2a5b5350029d0189ffc6a68f4d2ae..1bbaf8e4792085c520c80ca1a05fb3f2e0bf667f 100644 (file)
@@ -37,6 +37,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 struct assignment_entry {
    exec_node link;
    int assignment_count;
@@ -55,6 +57,8 @@ public:
    exec_list list;
 };
 
+} /* unnamed namespace */
+
 static struct assignment_entry *
 get_assignment_entry(ir_variable *var, exec_list *list)
 {
index 923619db45a4ce22abd19127f98f473a45b06277..2952ce594f729c35a54fa02d581a80a5f3c58093 100644 (file)
@@ -38,6 +38,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 class acp_entry : public exec_node
 {
 public:
@@ -107,6 +109,8 @@ public:
    void *mem_ctx;
 };
 
+} /* unnamed namespace */
+
 ir_visitor_status
 ir_copy_propagation_visitor::visit_enter(ir_function_signature *ir)
 {
index 11d9d7baf7294d459060301312111b4848f83599..de9f4ef6f670c08d1ec55683c393fcbbdeb2b5f8 100644 (file)
@@ -49,6 +49,8 @@
 
 static bool debug = false;
 
+namespace {
+
 class acp_entry : public exec_node
 {
 public:
@@ -135,6 +137,8 @@ public:
    void *shader_mem_ctx;
 };
 
+} /* unnamed namespace */
+
 ir_visitor_status
 ir_copy_propagation_elements_visitor::visit_enter(ir_function_signature *ir)
 {
index 4af78a72cc387c1d328bb0d3d6b18e9f5d23f65a..8c31802a6ac1ac090e42e27c41a3d1794222dbfc 100644 (file)
@@ -40,6 +40,8 @@
 
 static bool debug = false;
 
+namespace {
+
 class assignment_entry : public exec_node
 {
 public:
@@ -138,6 +140,7 @@ public:
    ir_hierarchical_visitor *visitor;
 };
 
+} /* unnamed namespace */
 
 /**
  * Adds an entry to the available copy list if it's a plain assignment
index f503493957beed7e15d204d31afb11a9c7c0ad8f..cd3b2c12e896381a16898bb974d22dc1df32d34f 100644 (file)
@@ -32,6 +32,8 @@
 #include "ir_expression_flattening.h"
 #include "glsl_types.h"
 
+namespace {
+
 class signature_entry : public exec_node
 {
 public:
@@ -67,6 +69,7 @@ public:
    void *mem_ctx;
 };
 
+} /* unnamed namespace */
 
 signature_entry *
 ir_dead_functions_visitor::get_signature_entry(ir_function_signature *sig)
index 4ff4d97d9bcb707e0474f9f2d49532249a59ed8a..f9f5bd44267f4e3e411d423e56469b7d7c72a4f7 100644 (file)
@@ -39,6 +39,8 @@ do_sampler_replacement(exec_list *instructions,
                       ir_variable *sampler,
                       ir_dereference *deref);
 
+namespace {
+
 class ir_function_inlining_visitor : public ir_hierarchical_visitor {
 public:
    ir_function_inlining_visitor()
@@ -60,6 +62,7 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
 
 bool
 do_function_inlining(exec_list *instructions)
index 7e88208f7c141b19dffbc0c23faa7fcecf335c88..e1a23d94a981519fd2abe446591fe8f787e0d42c 100644 (file)
@@ -30,6 +30,8 @@
 
 #include "ir.h"
 
+namespace {
+
 class ir_if_simplification_visitor : public ir_hierarchical_visitor {
 public:
    ir_if_simplification_visitor()
@@ -43,6 +45,8 @@ public:
    bool made_progress;
 };
 
+} /* unnamed namespace */
+
 /* We only care about the top level "if" instructions, so don't
  * descend into expressions.
  */
index 0a906aaf1da8cae45e2a7afc11af1ab657287709..693719e3dc790046620cf8f7e534aaa835c5e6af 100644 (file)
@@ -35,6 +35,8 @@
 #include "ir_print_visitor.h"
 #include "glsl_types.h"
 
+namespace {
+
 class ir_noop_swizzle_visitor : public ir_rvalue_visitor {
 public:
    ir_noop_swizzle_visitor()
@@ -46,6 +48,8 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
+
 void
 ir_noop_swizzle_visitor::handle_rvalue(ir_rvalue **rvalue)
 {
index f350fa947c94b78fcdf6ce86e30cff17923ad869..8606dcbb71d9ddbfd0ed52b1ad9ce52ee7a09b47 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "ir.h"
 
+namespace {
+
 class redundant_jumps_visitor : public ir_hierarchical_visitor {
 public:
    redundant_jumps_visitor()
@@ -42,6 +44,8 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
+
 /* We only care about the top level instructions, so don't descend
  * into expressions.
  */
index a21238dd0aa32962902a68b11fef49b79b03461a..60eec53b72a66a9f33a3b7bc78704d158c55f672 100644 (file)
@@ -38,6 +38,8 @@
 #include "ir_rvalue_visitor.h"
 #include "glsl_types.h"
 
+namespace {
+
 static bool debug = false;
 
 // XXX using variable_entry2 here to avoid collision (MSVC multiply-defined
@@ -307,6 +309,8 @@ ir_structure_splitting_visitor::visit_leave(ir_assignment *ir)
    return visit_continue;
 }
 
+} /* unnamed namespace */
+
 bool
 do_structure_splitting(exec_list *instructions)
 {
index bc442fa86939194b124094584f26b2691fd63227..7564c6b3b1079cf031522fd52b9bff388ba73af1 100644 (file)
@@ -32,6 +32,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 class ir_swizzle_swizzle_visitor : public ir_hierarchical_visitor {
 public:
    ir_swizzle_swizzle_visitor()
@@ -44,6 +46,8 @@ public:
    bool progress;
 };
 
+} /* unnamed namespace */
+
 ir_visitor_status
 ir_swizzle_swizzle_visitor::visit_enter(ir_swizzle *ir)
 {
index d86eab80e504698a50c9b26a7a557f325c8e2da1..25b18ea940c98246a15f84e9037f5561b940c71f 100644 (file)
@@ -54,6 +54,8 @@
 #include "ir_optimization.h"
 #include "glsl_types.h"
 
+namespace {
+
 static bool debug = false;
 
 class ir_tree_grafting_visitor : public ir_hierarchical_visitor {
@@ -369,6 +371,8 @@ tree_grafting_basic_block(ir_instruction *bb_first,
    }
 }
 
+} /* unnamed namespace */
+
 /**
  * Does a copy propagation pass on the code present in the instruction stream.
  */