diff options
author | Eric Anholt <[email protected]> | 2014-09-15 12:19:28 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-09-15 13:12:27 -0700 |
commit | 2147dd96813d1faee5c55e84b332355ad05f070a (patch) | |
tree | 6d81af7f4403dfc23e352c7de621b33dd6a80713 | |
parent | f78ee1b280c82d525370cc378467276584acf0c8 (diff) |
vc4: Fix memory leaks of struct qinst.
-rw-r--r-- | src/gallium/drivers/vc4/vc4_opt_cse.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_opt_dead_code.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_qir.c | 14 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_qir.h | 1 |
4 files changed, 17 insertions, 3 deletions
diff --git a/src/gallium/drivers/vc4/vc4_opt_cse.c b/src/gallium/drivers/vc4/vc4_opt_cse.c index a9b5fda3764..33e17d73401 100644 --- a/src/gallium/drivers/vc4/vc4_opt_cse.c +++ b/src/gallium/drivers/vc4/vc4_opt_cse.c @@ -147,7 +147,7 @@ qir_opt_cse(struct vc4_compile *c) qir_dump_inst(inst); fprintf(stderr, "\n"); } - remove_from_list(&inst->link); + qir_remove_instruction(inst); progress = true; continue; } else { diff --git a/src/gallium/drivers/vc4/vc4_opt_dead_code.c b/src/gallium/drivers/vc4/vc4_opt_dead_code.c index 231d91d5976..a675a1ac5ab 100644 --- a/src/gallium/drivers/vc4/vc4_opt_dead_code.c +++ b/src/gallium/drivers/vc4/vc4_opt_dead_code.c @@ -54,8 +54,7 @@ qir_opt_dead_code(struct vc4_compile *c) qir_dump_inst(inst); fprintf(stderr, "\n"); } - remove_from_list(&inst->link); - free(inst); + qir_remove_instruction(inst); progress = true; continue; } diff --git a/src/gallium/drivers/vc4/vc4_qir.c b/src/gallium/drivers/vc4/vc4_qir.c index 60455d50f86..0ab81d4d714 100644 --- a/src/gallium/drivers/vc4/vc4_qir.c +++ b/src/gallium/drivers/vc4/vc4_qir.c @@ -283,8 +283,22 @@ qir_compile_init(void) } void +qir_remove_instruction(struct qinst *qinst) +{ + remove_from_list(&qinst->link); + free(qinst->src); + free(qinst); +} + +void qir_compile_destroy(struct vc4_compile *c) { + while (!is_empty_list(&c->instructions)) { + struct qinst *qinst = + (struct qinst *)first_elem(&c->instructions); + qir_remove_instruction(qinst); + } + ralloc_free(c); } diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h index 05a3249d39b..fbf56f02a3a 100644 --- a/src/gallium/drivers/vc4/vc4_qir.h +++ b/src/gallium/drivers/vc4/vc4_qir.h @@ -245,6 +245,7 @@ struct qinst *qir_inst4(enum qop op, struct qreg dst, struct qreg b, struct qreg c, struct qreg d); +void qir_remove_instruction(struct qinst *qinst); void qir_emit(struct vc4_compile *c, struct qinst *inst); struct qreg qir_get_temp(struct vc4_compile *c); int qir_get_op_nsrc(enum qop qop); |