diff --git a/src/panfrost/bifrost/bi_test.h b/src/panfrost/bifrost/bi_test.h index 3e504cbf97e..04e04602887 100644 --- a/src/panfrost/bifrost/bi_test.h +++ b/src/panfrost/bifrost/bi_test.h @@ -93,4 +93,27 @@ bit_shader_equal(bi_context *A, bi_context *B) return true; } +#define INSTRUCTION_CASE(instr, expected, pass) do { \ + bi_builder *A = bit_builder(mem_ctx); \ + bi_builder *B = bit_builder(mem_ctx); \ + { \ + bi_builder *b = A; \ + instr; \ + } \ + { \ + bi_builder *b = B; \ + expected; \ + } \ + pass(A->shader); \ + if (!bit_shader_equal(A->shader, B->shader)) { \ + ADD_FAILURE(); \ + fprintf(stderr, "Pass produced unexpected results"); \ + fprintf(stderr, " Actual:\n"); \ + bi_print_shader(A->shader, stderr); \ + fprintf(stderr, "Expected:\n"); \ + bi_print_shader(B->shader, stderr); \ + fprintf(stderr, "\n"); \ + } \ +} while(0) + #endif diff --git a/src/panfrost/bifrost/test/test-optimizer.cpp b/src/panfrost/bifrost/test/test-optimizer.cpp index 9b418880647..76082733e09 100644 --- a/src/panfrost/bifrost/test/test-optimizer.cpp +++ b/src/panfrost/bifrost/test/test-optimizer.cpp @@ -27,31 +27,15 @@ #include -#define CASE(instr, expected) do { \ - bi_builder *A = bit_builder(mem_ctx); \ - bi_builder *B = bit_builder(mem_ctx); \ - { \ - bi_builder *b = A; \ - instr; \ - } \ - { \ - bi_builder *b = B; \ - expected; \ - } \ - bi_opt_mod_prop_forward(A->shader); \ - bi_opt_mod_prop_backward(A->shader); \ - bi_opt_dead_code_eliminate(A->shader); \ - if (!bit_shader_equal(A->shader, B->shader)) { \ - ADD_FAILURE(); \ - fprintf(stderr, "Optimization produce unexpected result"); \ - fprintf(stderr, " Actual:\n"); \ - bi_print_shader(A->shader, stderr); \ - fprintf(stderr, "Expected:\n"); \ - bi_print_shader(B->shader, stderr); \ - fprintf(stderr, "\n"); \ - } \ -} while(0) +static void +bi_optimizer(bi_context *ctx) +{ + bi_opt_mod_prop_forward(ctx); + bi_opt_mod_prop_backward(ctx); + bi_opt_dead_code_eliminate(ctx); +} +#define CASE(instr, expected) INSTRUCTION_CASE(instr, expected, bi_optimizer) #define NEGCASE(instr) CASE(instr, instr) class Optimizer : public testing::Test {