nir/inline_uniforms: support loop
Be able to inline uniforms in loop for unrolling it. Nested loop/if is also supported.
Some example:
for (i = 0; i < count; i++)
...
uniform "count" will be inlined. But note this does not make sure the loop will be unrolled (ie. count = 1000).
for (i = 0; i < count; i++)
for (j = init; j < 10; j++)
if (type == 2)
...
uniform "count", "init" and "type" will be inlined.
It is intentional to not be too aggressive to add uniforms to avoid false positive case while be able to support most common usage.
Similar MR: !8687 (closed)
CC: @mareko
v2: support vector uniform
v3: filter out some cases which loop unroll pass does not support, like:
- for (i = 0; i + 1 < count; i++)
- for (i = 1; i < count; i *= 2)
Edited by Qiang Yu