mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 05:50:11 +01:00
aco: simplify postprocessing the trap handler shader
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32056>
This commit is contained in:
parent
44dfeb4479
commit
6bfd92123f
3 changed files with 55 additions and 54 deletions
|
|
@ -90,7 +90,7 @@ get_disasm_string(Program* program, std::vector<uint32_t>& code, unsigned exec_s
|
|||
|
||||
static std::string
|
||||
aco_postprocess_shader(const struct aco_compiler_options* options,
|
||||
const struct aco_shader_info* info, std::unique_ptr<Program>& program)
|
||||
std::unique_ptr<Program>& program)
|
||||
{
|
||||
std::string llvm_ir;
|
||||
|
||||
|
|
@ -100,35 +100,33 @@ aco_postprocess_shader(const struct aco_compiler_options* options,
|
|||
ASSERTED bool is_valid = validate_cfg(program.get());
|
||||
assert(is_valid);
|
||||
|
||||
if (!info->is_trap_handler_shader) {
|
||||
dominator_tree(program.get());
|
||||
lower_phis(program.get());
|
||||
dominator_tree(program.get());
|
||||
lower_phis(program.get());
|
||||
|
||||
if (program->gfx_level <= GFX7)
|
||||
lower_subdword(program.get());
|
||||
if (program->gfx_level <= GFX7)
|
||||
lower_subdword(program.get());
|
||||
|
||||
validate(program.get());
|
||||
validate(program.get());
|
||||
|
||||
/* Optimization */
|
||||
if (!options->optimisations_disabled) {
|
||||
if (!(debug_flags & DEBUG_NO_VN))
|
||||
value_numbering(program.get());
|
||||
if (!(debug_flags & DEBUG_NO_OPT))
|
||||
optimize(program.get());
|
||||
}
|
||||
|
||||
/* cleanup and exec mask handling */
|
||||
setup_reduce_temp(program.get());
|
||||
insert_exec_mask(program.get());
|
||||
validate(program.get());
|
||||
|
||||
/* spilling and scheduling */
|
||||
live_var_analysis(program.get());
|
||||
if (program->collect_statistics)
|
||||
collect_presched_stats(program.get());
|
||||
spill(program.get());
|
||||
/* Optimization */
|
||||
if (!options->optimisations_disabled) {
|
||||
if (!(debug_flags & DEBUG_NO_VN))
|
||||
value_numbering(program.get());
|
||||
if (!(debug_flags & DEBUG_NO_OPT))
|
||||
optimize(program.get());
|
||||
}
|
||||
|
||||
/* cleanup and exec mask handling */
|
||||
setup_reduce_temp(program.get());
|
||||
insert_exec_mask(program.get());
|
||||
validate(program.get());
|
||||
|
||||
/* spilling and scheduling */
|
||||
live_var_analysis(program.get());
|
||||
if (program->collect_statistics)
|
||||
collect_presched_stats(program.get());
|
||||
spill(program.get());
|
||||
|
||||
if (options->record_ir) {
|
||||
char* data = NULL;
|
||||
size_t size = 0;
|
||||
|
|
@ -147,33 +145,31 @@ aco_postprocess_shader(const struct aco_compiler_options* options,
|
|||
if ((debug_flags & DEBUG_LIVE_INFO) && options->dump_shader)
|
||||
aco_print_program(program.get(), stderr, print_live_vars | print_kill);
|
||||
|
||||
if (!info->is_trap_handler_shader) {
|
||||
if (!options->optimisations_disabled && !(debug_flags & DEBUG_NO_SCHED))
|
||||
schedule_program(program.get());
|
||||
validate(program.get());
|
||||
if (!options->optimisations_disabled && !(debug_flags & DEBUG_NO_SCHED))
|
||||
schedule_program(program.get());
|
||||
validate(program.get());
|
||||
|
||||
/* Register Allocation */
|
||||
register_allocation(program.get());
|
||||
/* Register Allocation */
|
||||
register_allocation(program.get());
|
||||
|
||||
if (validate_ra(program.get())) {
|
||||
aco_print_program(program.get(), stderr);
|
||||
abort();
|
||||
} else if (options->dump_shader) {
|
||||
aco_print_program(program.get(), stderr);
|
||||
}
|
||||
|
||||
validate(program.get());
|
||||
|
||||
/* Optimization */
|
||||
if (!options->optimisations_disabled && !(debug_flags & DEBUG_NO_OPT)) {
|
||||
optimize_postRA(program.get());
|
||||
validate(program.get());
|
||||
}
|
||||
|
||||
ssa_elimination(program.get());
|
||||
jump_threading(program.get());
|
||||
if (validate_ra(program.get())) {
|
||||
aco_print_program(program.get(), stderr);
|
||||
abort();
|
||||
} else if (options->dump_shader) {
|
||||
aco_print_program(program.get(), stderr);
|
||||
}
|
||||
|
||||
validate(program.get());
|
||||
|
||||
/* Optimization */
|
||||
if (!options->optimisations_disabled && !(debug_flags & DEBUG_NO_OPT)) {
|
||||
optimize_postRA(program.get());
|
||||
validate(program.get());
|
||||
}
|
||||
|
||||
ssa_elimination(program.get());
|
||||
jump_threading(program.get());
|
||||
|
||||
/* Lower to HW Instructions */
|
||||
lower_to_hw_instr(program.get());
|
||||
validate(program.get());
|
||||
|
|
@ -232,7 +228,7 @@ aco_compile_shader_part(const struct aco_compiler_options* options,
|
|||
/* Instruction selection */
|
||||
select_shader_part(program.get(), pinfo, &config, options, info, args);
|
||||
|
||||
aco_postprocess_shader(options, info, program);
|
||||
aco_postprocess_shader(options, program);
|
||||
|
||||
/* assembly */
|
||||
std::vector<uint32_t> code;
|
||||
|
|
@ -271,7 +267,7 @@ aco_compile_shader(const struct aco_compiler_options* options, const struct aco_
|
|||
/* Instruction Selection */
|
||||
select_program(program.get(), shader_count, shaders, &config, options, info, args);
|
||||
|
||||
std::string llvm_ir = aco_postprocess_shader(options, info, program);
|
||||
std::string llvm_ir = aco_postprocess_shader(options, program);
|
||||
|
||||
/* assembly */
|
||||
std::vector<uint32_t> code;
|
||||
|
|
@ -420,7 +416,15 @@ aco_compile_trap_handler(const struct aco_compiler_options* options,
|
|||
|
||||
select_trap_handler_shader(program.get(), &config, options, info, args);
|
||||
|
||||
aco_postprocess_shader(options, info, program);
|
||||
if (options->dump_preoptir)
|
||||
aco_print_program(program.get(), stderr);
|
||||
validate(program.get());
|
||||
|
||||
lower_to_hw_instr(program.get());
|
||||
validate(program.get());
|
||||
|
||||
insert_waitcnt(program.get());
|
||||
insert_NOPs(program.get());
|
||||
|
||||
/* assembly */
|
||||
std::vector<uint32_t> code;
|
||||
|
|
|
|||
|
|
@ -137,8 +137,6 @@ struct aco_shader_info {
|
|||
} cs;
|
||||
|
||||
uint32_t gfx9_gs_ring_lds_size;
|
||||
|
||||
bool is_trap_handler_shader;
|
||||
};
|
||||
|
||||
enum aco_compiler_debug_level {
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ radv_aco_convert_shader_info(struct aco_shader_info *aco_info, const struct radv
|
|||
aco_info->ps.spi_ps_input_addr = radv->ps.spi_ps_input_addr;
|
||||
aco_info->ps.has_prolog = false;
|
||||
aco_info->gfx9_gs_ring_lds_size = radv->gs_ring_info.lds_size;
|
||||
aco_info->is_trap_handler_shader = radv->type == RADV_SHADER_TYPE_TRAP_HANDLER;
|
||||
aco_info->image_2d_view_of_3d = radv_key->image_2d_view_of_3d;
|
||||
aco_info->epilog_pc = radv_args->epilog_pc;
|
||||
aco_info->hw_stage = radv_select_hw_stage(radv, gfx_level);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue