lima/gpir: fix compile fail when two slot node
Come from glmark2-es2 jellyfish test.
Fixes: 92d7ca4b1c "gallium: add lima driver"
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
This commit is contained in:
@@ -377,6 +377,11 @@ bool gpir_instr_try_insert_node(gpir_instr *instr, gpir_node *node);
|
||||
void gpir_instr_remove_node(gpir_instr *instr, gpir_node *node);
|
||||
void gpir_instr_print_prog(gpir_compiler *comp);
|
||||
|
||||
static inline bool gpir_instr_alu_slot_is_full(gpir_instr *instr)
|
||||
{
|
||||
return instr->alu_num_slot_free <= instr->alu_num_slot_needed_by_store;
|
||||
}
|
||||
|
||||
bool gpir_codegen_acc_same_op(gpir_op op1, gpir_op op2);
|
||||
|
||||
bool gpir_pre_rsched_lower_prog(gpir_compiler *comp);
|
||||
|
||||
@@ -273,7 +273,7 @@ static bool gpir_instr_insert_store_check(gpir_instr *instr, gpir_node *node)
|
||||
* already in this instr's alu slot, so instr must have some free
|
||||
* alu slot to insert this node's child
|
||||
*/
|
||||
if (instr->alu_num_slot_free <= instr->alu_num_slot_needed_by_store)
|
||||
if (gpir_instr_alu_slot_is_full(instr))
|
||||
return false;
|
||||
|
||||
instr->alu_num_slot_needed_by_store++;
|
||||
|
||||
@@ -464,16 +464,33 @@ static gpir_node *gpir_sched_instr_pass(gpir_instr *instr,
|
||||
|
||||
/* schedule node used by previous instr when count > 5 */
|
||||
int count = 0;
|
||||
gpir_node *two_slot_node = NULL;
|
||||
list_for_each_entry(gpir_node, node, ready_list, list) {
|
||||
if (gpir_is_input_node(node)) {
|
||||
int min = gpir_get_min_scheduled_succ(node);
|
||||
assert(min >= instr->index - 1);
|
||||
if (min == instr->index - 1)
|
||||
count += gpir_op_infos[node->op].may_consume_two_slots ? 2 : 1;
|
||||
if (min == instr->index - 1) {
|
||||
if (gpir_op_infos[node->op].may_consume_two_slots) {
|
||||
two_slot_node = node;
|
||||
count += 2;
|
||||
}
|
||||
else
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 5) {
|
||||
/* When no slot avaible, must schedule a move for two slot node
|
||||
* to reduce the count. This results from the dummy_m/f method.
|
||||
*/
|
||||
if (gpir_instr_alu_slot_is_full(instr)) {
|
||||
assert(two_slot_node);
|
||||
gpir_debug("instr is full, schedule move node for two slot node %d\n",
|
||||
two_slot_node->index);
|
||||
return gpir_sched_node(instr, two_slot_node);
|
||||
}
|
||||
|
||||
/* schedule fully ready node first */
|
||||
list_for_each_entry(gpir_node, node, ready_list, list) {
|
||||
if (gpir_is_input_node(node)) {
|
||||
|
||||
Reference in New Issue
Block a user