nir/dead_cf: delete code that's unreachable due to jumps
[mesa.git] / src / glsl / nir / nir_lower_system_values.c
index d1b4d26e2aeca88f83d39fce7b58054e7ad910b5..a6eec653e33ea1f45445573541c902f478f69ca0 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 #include "nir.h"
+#include "main/mtypes.h"
 
 static void
 convert_instr(nir_intrinsic_instr *instr)
@@ -48,6 +49,12 @@ convert_instr(nir_intrinsic_instr *instr)
    case SYSTEM_VALUE_VERTEX_ID:
       op = nir_intrinsic_load_vertex_id;
       break;
+   case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE:
+      op = nir_intrinsic_load_vertex_id_zero_base;
+      break;
+   case SYSTEM_VALUE_BASE_VERTEX:
+      op = nir_intrinsic_load_base_vertex;
+      break;
    case SYSTEM_VALUE_INSTANCE_ID:
       op = nir_intrinsic_load_instance_id;
       break;
@@ -64,23 +71,19 @@ convert_instr(nir_intrinsic_instr *instr)
       op = nir_intrinsic_load_invocation_id;
       break;
    default:
-      assert(0);
-      break;
+      unreachable("not reached");
    }
 
    nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op);
 
    if (instr->dest.is_ssa) {
-      new_instr->dest.is_ssa = true;
-      nir_ssa_def_init(&new_instr->instr, &new_instr->dest.ssa,
-                       instr->dest.ssa.num_components, NULL);
-      nir_src new_dest_src = {
-         .is_ssa = true,
-         .ssa = &new_instr->dest.ssa,
-      };
-      nir_ssa_def_rewrite_uses(&instr->dest.ssa, new_dest_src, mem_ctx);
+      nir_ssa_dest_init(&new_instr->instr, &new_instr->dest,
+                        instr->dest.ssa.num_components, NULL);
+      nir_ssa_def_rewrite_uses(&instr->dest.ssa,
+                               nir_src_for_ssa(&new_instr->dest.ssa),
+                               mem_ctx);
    } else {
-      new_instr->dest = nir_dest_copy(instr->dest, mem_ctx);
+      nir_dest_copy(&new_instr->dest, &instr->dest, mem_ctx);
    }
 
    nir_instr_insert_before(&instr->instr, &new_instr->instr);