summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiang Yu <yuq825@gmail.com>2017-10-24 09:07:19 +0800
committerQiang Yu <yuq825@gmail.com>2017-10-24 09:12:01 +0800
commit2de0a0b135e52a3cece2f9f88a59be2ab7e85b08 (patch)
treebf32a142307c100d700ae1cb65f895aee2d7ad34
parent04eefd832ccf75855f149b10f0189db4b05f90ff (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.c4
-rw-r--r--src/gallium/drivers/lima/ir/gp/gpir.h1
-rw-r--r--src/gallium/drivers/lima/ir/gp/instr.c7
-rw-r--r--src/gallium/drivers/lima/ir/gp/scheduler.c8
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);