nir: fix dangling ssadef->name ptrs

In many places, the convention is to pass an existing ssadef name ptr
when construction/initializing a new nir_ssa_def.  But that goes badly
(as noticed by garbage in nir_print output) when the original string
gets freed.

Just use ralloc_strdup() instead, and add ralloc_free() in the two
places that would care (not that the strings wouldn't eventually get
freed anyways).

Also fixup the nir_search code which was directly setting ssadef->name
to use the parent instruction as memctx.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Rob Clark
2016-03-22 15:02:42 -04:00
parent 4e060d80ff
commit 0bea0e7141
3 changed files with 8 additions and 4 deletions

View File

@@ -469,7 +469,7 @@ construct_value(const nir_search_value *value,
switch (c->type) {
case nir_type_float:
load->def.name = ralloc_asprintf(mem_ctx, "%f", c->data.d);
load->def.name = ralloc_asprintf(load, "%f", c->data.d);
switch (bitsize->dest_size) {
case 32:
load->value.f32[0] = c->data.d;
@@ -483,7 +483,7 @@ construct_value(const nir_search_value *value,
break;
case nir_type_int:
load->def.name = ralloc_asprintf(mem_ctx, "%ld", c->data.i);
load->def.name = ralloc_asprintf(load, "%ld", c->data.i);
switch (bitsize->dest_size) {
case 32:
load->value.i32[0] = c->data.i;
@@ -497,7 +497,7 @@ construct_value(const nir_search_value *value,
break;
case nir_type_uint:
load->def.name = ralloc_asprintf(mem_ctx, "%lu", c->data.u);
load->def.name = ralloc_asprintf(load, "%lu", c->data.u);
switch (bitsize->dest_size) {
case 32:
load->value.u32[0] = c->data.u;