From c50f2dadc588caa0cb350f44febce56d76d60ccb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 13 Nov 2014 16:28:18 -0800 Subject: [PATCH] i965: Move fs_visitor optimization pass into new method fs_visitor::optimize() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We'll reuse this toplevel optimization driver for the scalar VS. Signed-off-by: Kristian Høgsberg Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_fs.cpp | 136 ++++++++++++++++++----------------- src/mesa/drivers/dri/i965/brw_fs.h | 1 + 2 files changed, 72 insertions(+), 65 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 0bdd8ab..d2e963f 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3443,6 +3443,76 @@ fs_visitor::opt_drop_redundant_mov_to_flags() } } +void +fs_visitor::optimize() +{ + calculate_cfg(); + + split_virtual_grfs(); + + move_uniform_array_access_to_pull_constants(); + assign_constant_locations(); + demote_pull_constants(); + + opt_drop_redundant_mov_to_flags(); + +#define OPT(pass, args...) do { \ + pass_num++; \ + bool this_progress = pass(args); \ + \ + if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER) && this_progress) { \ + char filename[64]; \ + snprintf(filename, 64, "fs%d-%04d-%02d-%02d-" #pass, \ + dispatch_width, shader_prog ? shader_prog->Name : 0, iteration, pass_num); \ + \ + backend_visitor::dump_instructions(filename); \ + } \ + \ + progress = progress || this_progress; \ + } while (false) + + if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER)) { + char filename[64]; + snprintf(filename, 64, "fs%d-%04d-00-start", + dispatch_width, shader_prog ? shader_prog->Name : 0); + + backend_visitor::dump_instructions(filename); + } + + bool progress; + int iteration = 0; + do { + progress = false; + iteration++; + int pass_num = 0; + + OPT(remove_duplicate_mrf_writes); + + OPT(opt_algebraic); + OPT(opt_cse); + OPT(opt_copy_propagate); + OPT(opt_peephole_predicated_break); + OPT(dead_code_eliminate); + OPT(opt_peephole_sel); + OPT(dead_control_flow_eliminate, this); + OPT(opt_register_renaming); + OPT(opt_saturate_propagation); + OPT(register_coalesce); + OPT(compute_to_mrf); + + OPT(compact_virtual_grfs); + } while (progress); + + if (lower_load_payload()) { + split_virtual_grfs(); + register_coalesce(); + compute_to_mrf(); + dead_code_eliminate(); + } + + lower_uniform_pull_constant_loads(); +} + bool fs_visitor::run() { @@ -3510,71 +3580,7 @@ fs_visitor::run() emit_fb_writes(); - calculate_cfg(); - - split_virtual_grfs(); - - move_uniform_array_access_to_pull_constants(); - assign_constant_locations(); - demote_pull_constants(); - - opt_drop_redundant_mov_to_flags(); - -#define OPT(pass, args...) do { \ - pass_num++; \ - bool this_progress = pass(args); \ - \ - if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER) && this_progress) { \ - char filename[64]; \ - snprintf(filename, 64, "fs%d-%04d-%02d-%02d-" #pass, \ - dispatch_width, shader_prog ? shader_prog->Name : 0, iteration, pass_num); \ - \ - backend_visitor::dump_instructions(filename); \ - } \ - \ - progress = progress || this_progress; \ - } while (false) - - if (unlikely(INTEL_DEBUG & DEBUG_OPTIMIZER)) { - char filename[64]; - snprintf(filename, 64, "fs%d-%04d-00-start", - dispatch_width, shader_prog ? shader_prog->Name : 0); - - backend_visitor::dump_instructions(filename); - } - - bool progress; - int iteration = 0; - do { - progress = false; - iteration++; - int pass_num = 0; - - OPT(remove_duplicate_mrf_writes); - - OPT(opt_algebraic); - OPT(opt_cse); - OPT(opt_copy_propagate); - OPT(opt_peephole_predicated_break); - OPT(dead_code_eliminate); - OPT(opt_peephole_sel); - OPT(dead_control_flow_eliminate, this); - OPT(opt_register_renaming); - OPT(opt_saturate_propagation); - OPT(register_coalesce); - OPT(compute_to_mrf); - - OPT(compact_virtual_grfs); - } while (progress); - - if (lower_load_payload()) { - split_virtual_grfs(); - register_coalesce(); - compute_to_mrf(); - dead_code_eliminate(); - } - - lower_uniform_pull_constant_loads(); + optimize(); assign_curb_setup(); assign_urb_setup(); diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 8a8b721..676087e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -403,6 +403,7 @@ public: uint32_t const_offset); bool run(); + void optimize(); void assign_binding_table_offsets(); void setup_payload_gen4(); void setup_payload_gen6(); -- 2.7.4