freedreno/ir3: Move assembler error handling
authorRob Clark <robdclark@chromium.org>
Sat, 19 Dec 2020 19:45:31 +0000 (11:45 -0800)
committerMarge Bot <eric+marge@anholt.net>
Wed, 6 Jan 2021 16:46:52 +0000 (16:46 +0000)
Move out of ir3_parse_asm() so we can re-use it in disasm test for
round-tripping asm/disasm.  We don't want failures to be fatal (yet)
as there are still some things missing from the assembler.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8175>

src/freedreno/computerator/ir3_asm.c
src/freedreno/ir3/ir3_assembler.c
src/freedreno/ir3/tests/delay.c

index a976bed..405bd17 100644 (file)
@@ -31,6 +31,8 @@ ir3_asm_assemble(struct ir3_compiler *c, FILE *in)
 {
        struct ir3_kernel *kernel = calloc(1, sizeof(*kernel));
        struct ir3_shader *shader = ir3_parse_asm(c, &kernel->info, in);
+       if (!shader)
+               errx(-1, "assembler failed");
        struct ir3_shader_variant *v = shader->variants;
 
        v->mergedregs = true;
index 414e688..94da3c4 100644 (file)
@@ -21,8 +21,6 @@
  * SOFTWARE.
  */
 
-#include <err.h>
-
 #include "ir3_assembler.h"
 #include "ir3_shader.h"
 #include "ir3_parser.h"
@@ -51,13 +49,17 @@ ir3_parse_asm(struct ir3_compiler *c, struct ir3_kernel_info *info, FILE *in)
 
        v->ir = ir3_parse(v, info, in);
        if (!v->ir)
-               errx(-1, "parse failed");
+               goto error;
 
        ir3_debug_print(v->ir, "AFTER PARSING");
 
        v->bin = ir3_shader_assemble(v);
        if (!v->bin)
-               errx(-1, "assembler failed");
+               goto error;
 
        return shader;
+
+error:
+       ralloc_free(shader);
+       return NULL;
 }
index b7b284c..6ad2060 100644 (file)
@@ -21,6 +21,7 @@
  * IN THE SOFTWARE.
  */
 
+#include <err.h>
 #include <stdio.h>
 
 #include "ir3.h"
@@ -94,6 +95,9 @@ parse_asm(struct ir3_compiler *c, const char *asmstr)
 
        fclose(in);
 
+       if (!shader)
+               errx(-1, "assembler failed");
+
        return shader;
 }