i965: Move fs_visitor optimization pass into new method fs_visitor::optimize()

We'll reuse this toplevel optimization driver for the scalar VS.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Kristian Høgsberg 2014-11-13 16:28:18 -08:00 committed by Kenneth Graunke
parent 5c4efc644e
commit c50f2dadc5
2 changed files with 72 additions and 65 deletions

View file

@ -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();

View file

@ -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();