- nir_load_const_instr *load_const =
- nir_load_const_instr_create(state->mem_ctx);
- load_const->num_components = 1;
- load_const->value.u[0] = size;
- load_const->dest.is_ssa = true;
- nir_ssa_def_init(&load_const->instr, &load_const->dest.ssa,
- 1, NULL);
- nir_instr_insert_before(instr, &load_const->instr);
-
- nir_alu_instr *mul = nir_alu_instr_create(state->mem_ctx,
- nir_op_imul);
- mul->src[0].src.is_ssa = true;
- mul->src[0].src.ssa = &load_const->dest.ssa;
- mul->src[1].src = nir_src_copy(deref_array->indirect,
- state->mem_ctx);
- mul->dest.write_mask = 1;
- mul->dest.dest.is_ssa = true;
- nir_ssa_def_init(&mul->instr, &mul->dest.dest.ssa, 1, NULL);
- nir_instr_insert_before(instr, &mul->instr);
-
- if (found_indirect) {
- nir_alu_instr *add = nir_alu_instr_create(state->mem_ctx,
- nir_op_iadd);
- add->src[0].src = *indirect;
- add->src[1].src.is_ssa = true;
- add->src[1].src.ssa = &mul->dest.dest.ssa;
- add->dest.write_mask = 1;
- add->dest.dest.is_ssa = true;
- nir_ssa_def_init(&add->instr, &add->dest.dest.ssa, 1, NULL);
- nir_instr_insert_before(instr, &add->instr);
-
- indirect->is_ssa = true;
- indirect->ssa = &add->dest.dest.ssa;
- } else {
- indirect->is_ssa = true;
- indirect->ssa = &mul->dest.dest.ssa;
- found_indirect = true;
- }
+ nir_ssa_def *mul =
+ nir_imul(b, nir_imm_int(b, size),
+ nir_ssa_for_src(b, deref_array->indirect, 1));
+
+ offset = nir_iadd(b, offset, mul);