projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nir: Add a nir_op_is_vec helper
[mesa.git]
/
src
/
compiler
/
nir
/
nir_opt_dce.c
diff --git
a/src/compiler/nir/nir_opt_dce.c
b/src/compiler/nir/nir_opt_dce.c
index 570e43000c08a5d9367404c7bccef460b737b5b2..724cf3f20349277e86ab8ae167e2e75695b3cf38 100644
(file)
--- a/
src/compiler/nir/nir_opt_dce.c
+++ b/
src/compiler/nir/nir_opt_dce.c
@@
-52,6
+52,7
@@
static void
init_instr(nir_instr *instr, nir_instr_worklist *worklist)
{
nir_alu_instr *alu_instr;
init_instr(nir_instr *instr, nir_instr_worklist *worklist)
{
nir_alu_instr *alu_instr;
+ nir_deref_instr *deref_instr;
nir_intrinsic_instr *intrin_instr;
nir_tex_instr *tex_instr;
nir_intrinsic_instr *intrin_instr;
nir_tex_instr *tex_instr;
@@
-73,6
+74,12
@@
init_instr(nir_instr *instr, nir_instr_worklist *worklist)
mark_and_push(worklist, instr);
break;
mark_and_push(worklist, instr);
break;
+ case nir_instr_type_deref:
+ deref_instr = nir_instr_as_deref(instr);
+ if (!deref_instr->dest.is_ssa)
+ mark_and_push(worklist, instr);
+ break;
+
case nir_instr_type_intrinsic:
intrin_instr = nir_instr_as_intrinsic(instr);
if (nir_intrinsic_infos[intrin_instr->intrinsic].flags &
case nir_instr_type_intrinsic:
intrin_instr = nir_instr_as_intrinsic(instr);
if (nir_intrinsic_infos[intrin_instr->intrinsic].flags &
@@
-122,8
+129,7
@@
nir_opt_dce_impl(nir_function_impl *impl)
init_block(block, worklist);
}
init_block(block, worklist);
}
- nir_instr *instr = NULL;
- nir_instr_worklist_foreach(worklist, instr)
+ nir_foreach_instr_in_worklist(instr, worklist)
nir_foreach_src(instr, mark_live_cb, worklist);
nir_instr_worklist_destroy(worklist);
nir_foreach_src(instr, mark_live_cb, worklist);
nir_instr_worklist_destroy(worklist);
@@
-139,9
+145,14
@@
nir_opt_dce_impl(nir_function_impl *impl)
}
}
}
}
- if (progress)
+ if (progress)
{
nir_metadata_preserve(impl, nir_metadata_block_index |
nir_metadata_dominance);
nir_metadata_preserve(impl, nir_metadata_block_index |
nir_metadata_dominance);
+ } else {
+#ifndef NDEBUG
+ impl->valid_metadata &= ~nir_metadata_not_properly_reset;
+#endif
+ }
return progress;
}
return progress;
}