From: Samuel Pitoiset Date: Fri, 21 Aug 2020 09:33:22 +0000 (+0200) Subject: aco: skip unnecessary compiler pass for the trap handler program X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=a0814a873d50f65484b17927379fbb47cf90372e aco: skip unnecessary compiler pass for the trap handler program The shader is written by hands with assigned registers, so most of the pass are unnecessary. Signed-off-by: Samuel Pitoiset Reviewed-by: Daniel Schürmann Part-of: --- diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 96a968d376a..5d402495ae5 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -79,23 +79,26 @@ void aco_compile_shader(unsigned shader_count, aco_print_program(program.get(), stderr); } - /* Phi lowering */ - aco::lower_phis(program.get()); - aco::dominator_tree(program.get()); - validate(program.get()); - - /* Optimization */ - aco::value_numbering(program.get()); - aco::optimize(program.get()); - - /* cleanup and exec mask handling */ - aco::setup_reduce_temp(program.get()); - aco::insert_exec_mask(program.get()); - validate(program.get()); - - /* spilling and scheduling */ - aco::live live_vars = aco::live_var_analysis(program.get(), args->options); - aco::spill(program.get(), live_vars, args->options); + aco::live live_vars; + if (!args->is_trap_handler_shader) { + /* Phi lowering */ + aco::lower_phis(program.get()); + aco::dominator_tree(program.get()); + validate(program.get()); + + /* Optimization */ + aco::value_numbering(program.get()); + aco::optimize(program.get()); + + /* cleanup and exec mask handling */ + aco::setup_reduce_temp(program.get()); + aco::insert_exec_mask(program.get()); + validate(program.get()); + + /* spilling and scheduling */ + live_vars = aco::live_var_analysis(program.get(), args->options); + aco::spill(program.get(), live_vars, args->options); + } std::string llvm_ir; if (args->options->record_ir) { @@ -114,26 +117,30 @@ void aco_compile_shader(unsigned shader_count, if (program->collect_statistics) aco::collect_presched_stats(program.get()); - aco::schedule_program(program.get(), live_vars); - validate(program.get()); - /* Register Allocation */ - aco::register_allocation(program.get(), live_vars.live_out); - if (args->options->dump_shader) { - std::cerr << "After RA:\n"; - aco_print_program(program.get(), stderr); - } + if (!args->is_trap_handler_shader) { + aco::schedule_program(program.get(), live_vars); + validate(program.get()); - if (aco::validate_ra(program.get(), args->options)) { - std::cerr << "Program after RA validation failure:\n"; - aco_print_program(program.get(), stderr); - abort(); - } + /* Register Allocation */ + aco::register_allocation(program.get(), live_vars.live_out); + if (args->options->dump_shader) { + std::cerr << "After RA:\n"; + aco_print_program(program.get(), stderr); + } + + if (aco::validate_ra(program.get(), args->options)) { + std::cerr << "Program after RA validation failure:\n"; + aco_print_program(program.get(), stderr); + abort(); + } + + validate(program.get()); - validate(program.get()); + aco::ssa_elimination(program.get()); + } /* Lower to HW Instructions */ - aco::ssa_elimination(program.get()); aco::lower_to_hw_instr(program.get()); /* Insert Waitcnt */