aco: make validate() usable in tests
authorRhys Perry <pendingchaos02@gmail.com>
Thu, 30 Jan 2020 11:49:20 +0000 (11:49 +0000)
committerMarge Bot <eric+marge@anholt.net>
Tue, 21 Jul 2020 19:38:43 +0000 (19:38 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6013>

src/amd/compiler/aco_interface.cpp
src/amd/compiler/aco_ir.h
src/amd/compiler/aco_validate.cpp

index 95e2bd1ac1aaf0e189fe8e23184106e39dab536f..a05df1e7959ba9d380d38986470d8a96fcc6f57b 100644 (file)
@@ -45,6 +45,15 @@ static radv_compiler_statistic_info statistic_infos[] = {
    [aco::statistic_vgpr_presched] = {"Pre-Sched VGPRs", "VGPR usage before scheduling"},
 };
 
+static void validate(aco::Program *program)
+{
+   if (!(aco::debug_flags & aco::DEBUG_VALIDATE))
+      return;
+
+   bool is_valid = aco::validate(program, stderr);
+   assert(is_valid);
+}
+
 void aco_compile_shader(unsigned shader_count,
                         struct nir_shader *const *shaders,
                         struct radv_shader_binary **binary,
@@ -72,7 +81,7 @@ void aco_compile_shader(unsigned shader_count,
    /* Phi lowering */
    aco::lower_phis(program.get());
    aco::dominator_tree(program.get());
-   aco::validate(program.get(), stderr);
+   validate(program.get());
 
    /* Optimization */
    aco::value_numbering(program.get());
@@ -81,7 +90,7 @@ void aco_compile_shader(unsigned shader_count,
    /* cleanup and exec mask handling */
    aco::setup_reduce_temp(program.get());
    aco::insert_exec_mask(program.get());
-   aco::validate(program.get(), stderr);
+   validate(program.get());
 
    /* spilling and scheduling */
    aco::live live_vars = aco::live_var_analysis(program.get(), args->options);
@@ -89,7 +98,7 @@ void aco_compile_shader(unsigned shader_count,
    if (program->collect_statistics)
       aco::collect_presched_stats(program.get());
    aco::schedule_program(program.get(), live_vars);
-   aco::validate(program.get(), stderr);
+   validate(program.get());
 
    std::string llvm_ir;
    if (args->options->record_ir) {
@@ -119,7 +128,7 @@ void aco_compile_shader(unsigned shader_count,
       abort();
    }
 
-   aco::validate(program.get(), stderr);
+   validate(program.get());
 
    /* Lower to HW Instructions */
    aco::ssa_elimination(program.get());
index 7cf5ab19911f8291cfc7f58357b86fa0e01ccce8..6f2a4a46b9142b97e4f96c192b2a5f8cf4202b6e 100644 (file)
@@ -1607,7 +1607,7 @@ void insert_NOPs(Program* program);
 unsigned emit_program(Program* program, std::vector<uint32_t>& code);
 void print_asm(Program *program, std::vector<uint32_t>& binary,
                unsigned exec_size, std::ostream& out);
-void validate(Program* program, FILE *output);
+bool validate(Program* program, FILE *output);
 bool validate_ra(Program* program, const struct radv_nir_compiler_options *options, FILE *output);
 #ifndef NDEBUG
 void perfwarn(bool cond, const char *msg, Instruction *instr=NULL);
index 83457e54fdfefcedb6a8500715d7bcc634d56ef3..e532cdf241f3b8db541cab78c0aa82a75700cdcc 100644 (file)
@@ -46,11 +46,8 @@ void perfwarn(bool cond, const char *msg, Instruction *instr)
 }
 #endif
 
-void validate(Program* program, FILE * output)
+bool validate(Program* program, FILE *output)
 {
-   if (!(debug_flags & DEBUG_VALIDATE))
-      return;
-
    bool is_valid = true;
    auto check = [&output, &is_valid](bool check, const char * msg, aco::Instruction * instr) -> void {
       if (!check) {
@@ -439,7 +436,7 @@ void validate(Program* program, FILE * output)
       }
    }
 
-   assert(is_valid);
+   return is_valid;
 }
 
 /* RA validation */