summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2019-02-19 23:17:28 -0800
committerKenneth Graunke <[email protected]>2019-02-20 09:44:06 -0800
commitd6337b59f66eddedcba4853042007507c6d5171d (patch)
tree92cc4e96e5a25854fa4fe6a83a06079cb7350a24 /src/compiler
parentb9eed05e7f9717ce36ce9e080f746f2d1684f17e (diff)
nir: Don't forget if-uses in new nir_opt_dead_cf liveness check
Commit 08bfd710a25c14df5f690cce9604617536d7c560. (nir/dead_cf: Stop relying on liveness analysis) introduced a new check that iterated through a SSA def's uses, to see if it's used. But it only checked normal uses, and not uses which are part of an 'if' condition. This led to it thinking more nodes were dead than possible. Fixes Piglit's variable-indexing/tcs-output-array-float-index-wr test (and related tests) with the out-of-tree Iris driver. Fixes: 08bfd710a25 nir/dead_cf: Stop relying on liveness analysis Reviewed-by: Connor Abbott <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_opt_dead_cf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_opt_dead_cf.c b/src/compiler/nir/nir_opt_dead_cf.c
index 4cacfed1119..b0e9723d36c 100644
--- a/src/compiler/nir/nir_opt_dead_cf.c
+++ b/src/compiler/nir/nir_opt_dead_cf.c
@@ -160,6 +160,16 @@ def_only_used_in_cf_node(nir_ssa_def *def, void *_node)
return false;
}
+ /* Same check for if-condition uses */
+ nir_foreach_if_use(use, def) {
+ nir_block *use_block =
+ nir_cf_node_as_block(nir_cf_node_prev(&use->parent_if->cf_node));
+
+ if (use_block->index <= before->index ||
+ use_block->index >= after->index)
+ return false;
+ }
+
return true;
}