- aco::live live_vars = aco::live_var_analysis(program.get(), args->options);
- aco::spill(program.get(), live_vars, args->options);
-
- if (program->collect_statistics)
- aco::collect_presched_stats(program.get());
-
- //std::cerr << "Before Schedule:\n";
- //aco_print_program(program.get(), stderr);
- aco::schedule_program(program.get(), live_vars);
+ 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 */
+ if (!(aco::debug_flags & aco::DEBUG_NO_VN))
+ aco::value_numbering(program.get());
+ if (!(aco::debug_flags & aco::DEBUG_NO_OPT))
+ 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);
+ }