소스 검색

v3d: Fix temporary leaks of temp_registers and when spilling.

On each iteration of successfully spilling a reg, we'd allocate another
copy of temp_registers, and when decrementing thread conut we'd allocate
another copy of the graph.  These all got cleaned up on freeing the
compile.
tags/19.1-branchpoint
Eric Anholt 6 년 전
부모
커밋
060979a380
1개의 변경된 파일4개의 추가작업 그리고 5개의 파일을 삭제
  1. 4
    5
      src/broadcom/compiler/vir_register_allocate.c

+ 4
- 5
src/broadcom/compiler/vir_register_allocate.c 파일 보기

@@ -394,8 +394,6 @@ v3d_register_allocate(struct v3d_compile *c, bool *spilled)
struct node_to_temp_map map[c->num_temps];
uint32_t temp_to_node[c->num_temps];
uint8_t class_bits[c->num_temps];
struct qpu_reg *temp_registers = calloc(c->num_temps,
sizeof(*temp_registers));
int acc_nodes[ACC_COUNT];
struct v3d_ra_select_callback_data callback_data = {
.next_acc = 0,
@@ -594,18 +592,19 @@ v3d_register_allocate(struct v3d_compile *c, bool *spilled)

if (node != -1) {
v3d_spill_reg(c, map[node].temp);
ralloc_free(g);

/* Ask the outer loop to call back in. */
*spilled = true;
return NULL;
}
}

free(temp_registers);
ralloc_free(g);
return NULL;
}

struct qpu_reg *temp_registers = calloc(c->num_temps,
sizeof(*temp_registers));

for (uint32_t i = 0; i < c->num_temps; i++) {
int ra_reg = ra_get_node_reg(g, temp_to_node[i]);
if (ra_reg < PHYS_INDEX) {

Loading…
취소
저장