summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/lima/ir/pp/nir.c
diff options
context:
space:
mode:
authorAndreas Baierl <ichgeh@imkreisrum.de>2019-08-20 18:19:55 +0200
committerErico Nunes <nunes.erico@gmail.com>2019-09-13 19:41:32 +0000
commit4b1a14fd47134a3810f9c15d137af4336819e081 (patch)
treeced29cf75960988fe2a6563bd1745ead25ec0dc7 /src/gallium/drivers/lima/ir/pp/nir.c
parent4ddadd63709769ff923687b4232e870f6fbcb8a8 (diff)
downloadmesa-4b1a14fd47134a3810f9c15d137af4336819e081.tar.gz
lima/ppir: Add undef handling
Add a ppir dummy node for nir_ssa_undef_instr, create a reg for it and mark it as undefined, so that regalloc can set it non-interfering to avoid register pressure. Signed-off-by: Andreas Baierl <ichgeh@imkreisrum.de> Reviewed-by: Vasily Khozuzhick <anarsoul@gmail.com> Reviewed-by: Erico Nunes <nunes.erico@gmail.com>
Diffstat (limited to 'src/gallium/drivers/lima/ir/pp/nir.c')
-rw-r--r--src/gallium/drivers/lima/ir/pp/nir.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/gallium/drivers/lima/ir/pp/nir.c b/src/gallium/drivers/lima/ir/pp/nir.c
index faccb9dea2d..13b117eb183 100644
--- a/src/gallium/drivers/lima/ir/pp/nir.c
+++ b/src/gallium/drivers/lima/ir/pp/nir.c
@@ -142,7 +142,8 @@ static void ppir_node_add_src(ppir_compiler *comp, ppir_node *node,
break;
}
- ppir_node_add_dep(node, child);
+ if (child->op != ppir_op_undef)
+ ppir_node_add_dep(node, child);
}
else {
nir_register *reg = ns->reg.reg;
@@ -418,8 +419,19 @@ static ppir_node *ppir_emit_load_const(ppir_block *block, nir_instr *ni)
static ppir_node *ppir_emit_ssa_undef(ppir_block *block, nir_instr *ni)
{
- ppir_error("nir_ssa_undef_instr not support\n");
- return NULL;
+ nir_ssa_undef_instr *undef = nir_instr_as_ssa_undef(ni);
+ ppir_node *node = ppir_node_create_ssa(block, ppir_op_undef, &undef->def);
+ if (!node)
+ return NULL;
+ ppir_alu_node *alu = ppir_node_to_alu(node);
+
+ ppir_dest *dest = &alu->dest;
+ dest->ssa.undef = true;
+ ppir_reg *ssa = &dest->ssa;
+
+ list_add(&ssa->list, &block->comp->reg_list);
+
+ return node;
}
static ppir_node *ppir_emit_tex(ppir_block *block, nir_instr *ni)