aco: Fix unused variable warning by adding ASSERTED.
[mesa.git] / src / amd / compiler / aco_validate.cpp
index b09cf2bb86b76fa0e369a4e4b7518bf6079041ba..fce0e1a1189e920b8f017bf77f0b569346711230 100644 (file)
@@ -29,8 +29,8 @@
 
 namespace aco {
 
-static void aco_log(Program *program, const char *prefix,
-                    const char *file, unsigned line,
+static void aco_log(Program *program, enum radv_compiler_debug_level level,
+                    const char *prefix, const char *file, unsigned line,
                     const char *fmt, va_list args)
 {
    char *msg;
@@ -41,7 +41,8 @@ static void aco_log(Program *program, const char *prefix,
    ralloc_asprintf_append(&msg, "    ");
    ralloc_vasprintf_append(&msg, fmt, args);
 
-   /* TODO: log messages via callback if available too. */
+   if (program->debug.func)
+      program->debug.func(program->debug.private_data, level, msg);
 
    fprintf(stderr, "%s\n", msg);
 
@@ -54,7 +55,8 @@ void _aco_perfwarn(Program *program, const char *file, unsigned line,
    va_list args;
 
    va_start(args, fmt);
-   aco_log(program, "ACO PERFWARN:\n", file, line, fmt, args);
+   aco_log(program, RADV_COMPILER_DEBUG_LEVEL_PERFWARN,
+           "ACO PERFWARN:\n", file, line, fmt, args);
    va_end(args);
 }
 
@@ -64,7 +66,8 @@ void _aco_err(Program *program, const char *file, unsigned line,
    va_list args;
 
    va_start(args, fmt);
-   aco_log(program, "ACO ERROR:\n", file, line, fmt, args);
+   aco_log(program, RADV_COMPILER_DEBUG_LEVEL_ERROR,
+           "ACO ERROR:\n", file, line, fmt, args);
    va_end(args);
 }
 
@@ -375,7 +378,8 @@ bool validate_ir(Program* program)
          }
          case Format::SMEM: {
             if (instr->operands.size() >= 1)
-               check(instr->operands[0].isTemp() && instr->operands[0].regClass().type() == RegType::sgpr, "SMEM operands must be sgpr", instr.get());
+               check((instr->operands[0].isFixed() && !instr->operands[0].isConstant()) ||
+                     (instr->operands[0].isTemp() && instr->operands[0].regClass().type() == RegType::sgpr), "SMEM operands must be sgpr", instr.get());
             if (instr->operands.size() >= 2)
                check(instr->operands[1].isConstant() || (instr->operands[1].isTemp() && instr->operands[1].regClass().type() == RegType::sgpr),
                      "SMEM offset must be constant or sgpr", instr.get());
@@ -509,6 +513,7 @@ bool ra_fail(Program *program, Location loc, Location loc2, const char *fmt, ...
       aco_print_instr(loc2.instr, memf);
    }
    fprintf(memf, "\n\n");
+   fclose(memf);
 
    aco_err(program, out);
    free(out);