diff options
author | Qiang Yu <yuq825@gmail.com> | 2017-10-24 09:07:19 +0800 |
---|---|---|
committer | Qiang Yu <yuq825@gmail.com> | 2017-10-24 09:12:01 +0800 |
commit | 2de0a0b135e52a3cece2f9f88a59be2ab7e85b08 (patch) | |
tree | bf32a142307c100d700ae1cb65f895aee2d7ad34 | |
parent | 04eefd832ccf75855f149b10f0189db4b05f90ff (diff) |
lima/gpir: use gpir_instr_array
Signed-off-by: Qiang Yu <yuq825@gmail.com>
-rw-r--r-- | src/gallium/drivers/lima/ir/gp/codegen.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/lima/ir/gp/gpir.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/lima/ir/gp/instr.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/lima/ir/gp/scheduler.c | 8 |
4 files changed, 13 insertions, 7 deletions
diff --git a/src/gallium/drivers/lima/ir/gp/codegen.c b/src/gallium/drivers/lima/ir/gp/codegen.c index 7fc8330eab..67b8c3ebbc 100644 --- a/src/gallium/drivers/lima/ir/gp/codegen.c +++ b/src/gallium/drivers/lima/ir/gp/codegen.c @@ -465,9 +465,9 @@ bool gpir_codegen_prog(gpir_compiler *comp) int instr_index = 0; list_for_each_entry(gpir_block, block, &comp->block_list, list) { + gpir_instr *instrs = gpir_instr_array(&block->instrs); for (int i = gpir_instr_array_n(&block->instrs) - 1; i >= 0; i--) { - gpir_instr *instr = gpir_instr_array_e(&block->instrs, i); - gpir_codegen(code + instr_index, instr); + gpir_codegen(code + instr_index, instrs + i); instr_index++; } } diff --git a/src/gallium/drivers/lima/ir/gp/gpir.h b/src/gallium/drivers/lima/ir/gp/gpir.h index 3c7191e5fb..82f9aa2082 100644 --- a/src/gallium/drivers/lima/ir/gp/gpir.h +++ b/src/gallium/drivers/lima/ir/gp/gpir.h @@ -254,6 +254,7 @@ typedef struct gpir_block { struct gpir_compiler *comp; } gpir_block; +#define gpir_instr_array(buf) ((gpir_instr *)util_dynarray_begin(buf)) #define gpir_instr_array_n(buf) ((buf)->size / sizeof(gpir_instr)) #define gpir_instr_array_e(buf, idx) (util_dynarray_element(buf, gpir_instr, idx)) diff --git a/src/gallium/drivers/lima/ir/gp/instr.c b/src/gallium/drivers/lima/ir/gp/instr.c index 65f5a9b76a..11b07c1d0b 100644 --- a/src/gallium/drivers/lima/ir/gp/instr.c +++ b/src/gallium/drivers/lima/ir/gp/instr.c @@ -70,7 +70,8 @@ static void gpir_instr_remove_alu(gpir_instr *instr, gpir_node *node) } } - instr->alu_num_slot_free += node->op == gpir_op_complex1 ? 2 : 1; + int resume_slot = node->op == gpir_op_complex1 ? 2 : 1; + instr->alu_num_slot_free += resume_slot; } static bool gpir_instr_insert_reg0_check(gpir_instr *instr, gpir_node *node) @@ -356,11 +357,13 @@ void gpir_instr_print_prog(gpir_compiler *comp) int index = 0; list_for_each_entry(gpir_block, block, &comp->block_list, list) { + gpir_instr *instrs = gpir_instr_array(&block->instrs); + printf("-------block instr------\n"); for (int i = gpir_instr_array_n(&block->instrs) - 1; i >= 0; i--) { printf("%03d: ", index++); - gpir_instr *instr = gpir_instr_array_e(&block->instrs, i); + gpir_instr *instr = instrs + i; char buff[16] = "null"; int start = 0; for (int j = 0; j < GPIR_INSTR_SLOT_NUM; j++) { diff --git a/src/gallium/drivers/lima/ir/gp/scheduler.c b/src/gallium/drivers/lima/ir/gp/scheduler.c index deb7f14a33..5b219d9df4 100644 --- a/src/gallium/drivers/lima/ir/gp/scheduler.c +++ b/src/gallium/drivers/lima/ir/gp/scheduler.c @@ -265,9 +265,11 @@ static gpir_instr *gpir_instr_array_grow(struct util_dynarray *instrs, int pos) if (n <= pos) { int size = (pos + 1 - n) * sizeof(gpir_instr); util_dynarray_grow(instrs, size); - memset(gpir_instr_array_e(instrs, n), 0, size); + + gpir_instr *ia = gpir_instr_array(instrs); + memset(ia + n, 0, size); for (int i = n; i <= pos; i++) - gpir_instr_init(gpir_instr_array_e(instrs, i)); + gpir_instr_init(ia + i); } return gpir_instr_array_e(instrs, pos); @@ -994,7 +996,7 @@ static int gpir_try_insert_load_reg(gpir_block *block, gpir_node *node) gpir_move_unsatistied_node(load, node); - gpir_instr *instrs = util_dynarray_begin(&block->instrs); + gpir_instr *instrs = gpir_instr_array(&block->instrs); gpir_node *store_alu = node; int reg = gpir_alloc_reg(instrs, load, &store_alu); |