nir/spirv: Use nir_build_alu for alu instructions
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 28 Dec 2015 18:35:18 +0000 (10:35 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 28 Dec 2015 18:35:31 +0000 (10:35 -0800)
src/glsl/nir/spirv_to_nir.c

index 91710ba45f9f78920a8f754e709e6afd59c7991c..a6b5828f73ccb5d5c626be35c497f98dcde5f1ae 100644 (file)
@@ -2557,10 +2557,12 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
    val->ssa = vtn_create_ssa_value(b, type);
 
    /* Collect the various SSA sources */
-   unsigned num_inputs = count - 3;
+   const unsigned num_inputs = count - 3;
    nir_ssa_def *src[4];
    for (unsigned i = 0; i < num_inputs; i++)
       src[i] = vtn_ssa_value(b, w[i + 3])->def;
+   for (unsigned i = num_inputs; i < 4; i++)
+      src[i] = NULL;
 
    /* Indicates that the first two arguments should be swapped.  This is
     * used for implementing greater-than and less-than-or-equal.
@@ -2583,7 +2585,6 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
          case 3:  op = nir_op_bany_inequal3; break;
          case 4:  op = nir_op_bany_inequal4; break;
          }
-         num_inputs = 2;
          src[1] = nir_imm_int(&b->nb, NIR_FALSE);
       }
       break;
@@ -2597,7 +2598,6 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
          case 3:  op = nir_op_ball_iequal3;  break;
          case 4:  op = nir_op_ball_iequal4;  break;
          }
-         num_inputs = 2;
          src[1] = nir_imm_int(&b->nb, NIR_TRUE);
       }
       break;
@@ -2726,16 +2726,7 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
       src[1] = tmp;
    }
 
-   nir_alu_instr *instr = nir_alu_instr_create(b->shader, op);
-   nir_ssa_dest_init(&instr->instr, &instr->dest.dest,
-                     glsl_get_vector_elements(type), val->name);
-   instr->dest.write_mask = (1 << glsl_get_vector_elements(type)) - 1;
-   val->ssa->def = &instr->dest.dest.ssa;
-
-   for (unsigned i = 0; i < nir_op_infos[op].num_inputs; i++)
-      instr->src[i].src = nir_src_for_ssa(src[i]);
-
-   nir_builder_instr_insert(&b->nb, &instr->instr);
+   val->ssa->def = nir_build_alu(&b->nb, op, src[0], src[1], src[2], src[3]);
 }
 
 static nir_ssa_def *