nir/cf: Make extracting or re-inserting nothing a no-op
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 24 Dec 2015 02:10:08 +0000 (18:10 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 24 Dec 2015 07:46:04 +0000 (23:46 -0800)
src/glsl/nir/nir_control_flow.c

index ecd9cbd41739a4d46560e393a6dd80d2692c8551..33b06d0cc846d5c41b32233ca02ba1c817a27960 100644 (file)
@@ -749,6 +749,12 @@ nir_cf_extract(nir_cf_list *extracted, nir_cursor begin, nir_cursor end)
 {
    nir_block *block_begin, *block_end, *block_before, *block_after;
 
+   if (nir_cursors_equal(begin, end)) {
+      exec_list_make_empty(&extracted->list);
+      extracted->impl = NULL; /* we shouldn't need this */
+      return;
+   }
+
    /* In the case where begin points to an instruction in some basic block and
     * end points to the end of the same basic block, we rely on the fact that
     * splitting on an instruction moves earlier instructions into a new basic
@@ -788,6 +794,9 @@ nir_cf_reinsert(nir_cf_list *cf_list, nir_cursor cursor)
 {
    nir_block *before, *after;
 
+   if (exec_list_is_empty(&cf_list->list))
+      return;
+
    split_block_cursor(cursor, &before, &after);
 
    foreach_list_typed_safe(nir_cf_node, node, node, &cf_list->list) {