summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRhys Perry <pendingchaos02@gmail.com>2019-09-23 14:48:22 +0100
committerJuan A. Suarez Romero <jasuarez@igalia.com>2019-10-02 09:41:27 -0400
commitef35babd339bff94937cc6fbee433e005fde34e3 (patch)
tree70fa682a2596d6f4dbf54251d05153b471eb06b3 /src
parent954ace9e3e2a6ee920435a7ce08220264c6eb957 (diff)
nir/opt_remove_phis: handle phis with no sources
This can happen with loops with unreachable exits which are later optimized away. Fixes assertion in dEQP-VK.graphicsfuzz.unreachable-loops with RADV. Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> (cherry picked from commit 12372d60fff676c458c7a54a934f619548337f0e)
Diffstat (limited to 'src')
-rw-r--r--src/compiler/nir/nir_opt_remove_phis.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/compiler/nir/nir_opt_remove_phis.c b/src/compiler/nir/nir_opt_remove_phis.c
index b03a0ab41b3..2a0f75ad598 100644
--- a/src/compiler/nir/nir_opt_remove_phis.c
+++ b/src/compiler/nir/nir_opt_remove_phis.c
@@ -109,12 +109,13 @@ remove_phis_block(nir_block *block, nir_builder *b)
if (!srcs_same)
continue;
- /* We must have found at least one definition, since there must be at
- * least one forward edge.
- */
- assert(def != NULL);
+ if (!def) {
+ /* In this case, the phi had no sources. So turn it into an undef. */
- if (mov) {
+ b->cursor = nir_after_phis(block);
+ def = nir_ssa_undef(b, phi->dest.ssa.num_components,
+ phi->dest.ssa.bit_size);
+ } else if (mov) {
/* If the sources were all movs from the same source with the same
* swizzle, then we can't just pick a random move because it may not
* dominate the phi node. Instead, we need to emit our own move after