nir: Do not use progress for unreachable code in return lowering.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 22 Apr 2018 17:05:19 +0000 (19:05 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 23 Apr 2018 14:55:15 +0000 (16:55 +0200)
commit0e945fdf23bac5a62c15edfcbfd9d6ac4eee592f
treef9de1b917d3ad1f8959cd0cc7b054d805b86ac5b
parent8328c64eb1a9b4c6d4ad33574491d92c86a5a500
nir: Do not use progress for unreachable code in return lowering.

We seem to use progress for two cases:
1) When we lowered some returns.
2) When we remove unreachable code.

If just case 2 happens we assert as state->return_flag has not
been allocated yet, but we are still trying to do insert all
predicates based on it.

This splits the concerns. We only use progress internally for case 1
and then keep track of 2 in a separate variable to indicate progress
in the return value of the pass.

This is slightly better than transforming the assert into
if (!state->return_flag) return, as the solution in this patch avoids
inserting predicates even if some other part of the might need them.

Fixes: 6e22ad6edc "nir: return early when lowering a return at the end of a function"
CC: 18.1 <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106174
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/nir/nir_lower_returns.c