nir/builder: Use nir_after_instr to advance the cursor
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 31 Aug 2015 23:54:02 +0000 (16:54 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 1 Sep 2015 01:17:07 +0000 (18:17 -0700)
This *should* ensure that the cursor gets properly advanced in all cases.
We had a problem before where, if the cursor was created using
nir_after_cf_node on a non-block cf_node, that would call nir_before_block
on the block following the cf node.  Instructions would then get inserted
in backwards order at the top of the block which is not at all what you
would expect from nir_after_cf_node.  By just resetting to after_instr, we
avoid all these problems.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/nir/nir_builder.h

index 08b40f8ea7cf71a332ad4521f15b2fa01f17344d..ba988d71dde406cff6e0284ec6befac0233101b1 100644 (file)
@@ -49,8 +49,7 @@ nir_builder_instr_insert(nir_builder *build, nir_instr *instr)
    nir_instr_insert(build->cursor, instr);
 
    /* Move the cursor forward. */
-   if (build->cursor.option == nir_cursor_after_instr)
-      build->cursor.instr = instr;
+   build->cursor = nir_after_instr(instr);
 }
 
 static inline void