Lines Matching refs:src

431 static bool src_has_indirect(nir_src *src)
433 return !src->is_ssa && src->reg.indirect;
436 static void src_free_indirects(nir_src *src)
438 if (src_has_indirect(src)) {
439 assert(src->reg.indirect->is_ssa || !src->reg.indirect->reg.indirect);
440 free(src->reg.indirect);
441 src->reg.indirect = NULL;
454 /* NOTE: if the instruction you are copying a src to is already added
457 void nir_src_copy(nir_src *dest, const nir_src *src)
461 dest->is_ssa = src->is_ssa;
462 if (src->is_ssa) {
463 dest->ssa = src->ssa;
465 dest->reg.base_offset = src->reg.base_offset;
466 dest->reg.reg = src->reg.reg;
467 if (src->reg.indirect) {
469 nir_src_copy(dest->reg.indirect, src->reg.indirect);
476 void nir_dest_copy(nir_dest *dest, const nir_dest *src)
479 assert(!src->is_ssa);
485 dest->reg.base_offset = src->reg.base_offset;
486 dest->reg.reg = src->reg.reg;
487 if (src->reg.indirect) {
489 nir_src_copy(dest->reg.indirect, src->reg.indirect);
496 nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src)
498 nir_src_copy(&dest->src, &src->src);
499 dest->abs = src->abs;
500 dest->negate = src->negate;
502 dest->swizzle[i] = src->swizzle[i];
506 nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src)
508 nir_dest_copy(&dest->dest, &src->dest);
509 dest->write_mask = src->write_mask;
510 dest->saturate = src->saturate;
519 const nir_alu_src *src = &alu->src[srcn];
522 return src->src.is_ssa && (src->src.ssa->num_components == num_components) &&
523 !src->abs && !src->negate &&
524 (memcmp(src->swizzle, trivial_swizzle, num_components) == 0);
608 src_init(nir_src *src)
610 src->is_ssa = false;
611 src->reg.reg = NULL;
612 src->reg.indirect = NULL;
613 src->reg.base_offset = 0;
685 alu_src_init(nir_alu_src *src)
687 src_init(&src->src);
688 src->abs = src->negate = false;
690 src->swizzle[i] = i;
704 alu_src_init(&instr->src[i]);
778 src_init(&instr->src[i]);
820 instr->src = malloc(sizeof(nir_tex_src) * num_srcs);
822 src_init(&instr->src[i].src);
836 nir_src src)
842 new_srcs[i].src_type = tex->src[i].src_type;
843 nir_instr_move_src(&tex->instr, &new_srcs[i].src,
844 &tex->src[i].src);
847 free(tex->src);
848 tex->src = new_srcs;
850 tex->src[tex->num_srcs].src_type = src_type;
851 nir_instr_rewrite_src(&tex->instr, &tex->src[tex->num_srcs].src, src);
861 nir_instr_rewrite_src(&tex->instr, &tex->src[src_idx].src, NIR_SRC_INIT);
865 tex->src[i-1].src_type = tex->src[i].src_type;
866 nir_instr_move_src(&tex->instr, &tex->src[i-1].src, &tex->src[i].src);
897 * Note that this does not update the def/use relationship for src, assuming
900 * list_addtail(&phi_src->src.use_link, &src.ssa->uses);
903 nir_phi_instr_add_src(nir_phi_instr *instr, nir_block *pred, nir_src src)
909 phi_src->src = src;
910 phi_src->src.parent_instr = &instr->instr;
1078 add_use_cb(nir_src *src, void *state)
1082 src->parent_instr = instr;
1083 list_addtail(&src->use_link,
1084 src->is_ssa ? &src->ssa->uses : &src->reg.reg->uses);
1195 src_is_valid(const nir_src *src)
1197 return src->is_ssa ? (src->ssa != NULL) : (src->reg.reg != NULL);
1201 remove_use_cb(nir_src *src, void *state)
1205 if (src_is_valid(src))
1206 list_del(&src->use_link);
1240 static bool free_src_indirects_cb(nir_src *src, void *state)
1242 src_free_indirects(src);
1259 free(nir_instr_as_tex(instr)->src);
1318 nir_instr_dce_add_dead_srcs_cb(nir_src *src, void *state)
1322 if (src->is_ssa) {
1323 list_del(&src->use_link);
1324 if (!nir_instr_free_and_dce_is_live(src->ssa->parent_instr))
1325 nir_instr_worklist_push_tail(wl, src->ssa->parent_instr);
1328 src->ssa = NULL;
1532 if (!cb(&phi_src->src, state))
1578 nir_src_as_const_value(nir_src src)
1580 if (!src.is_ssa)
1583 if (src.ssa->parent_instr->type != nir_instr_type_load_const)
1586 nir_load_const_instr *load = nir_instr_as_load_const(src.ssa->parent_instr);
1599 nir_src_is_always_uniform(nir_src src)
1601 if (!src.is_ssa)
1605 if (src.ssa->parent_instr->type == nir_instr_type_load_const)
1608 if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) {
1609 nir_intrinsic_instr *intr = nir_instr_as_intrinsic(src.ssa->parent_instr);
1612 nir_src_is_always_uniform(intr->src[0]))
1621 nir_deref_mode_is(nir_src_as_deref(intr->src[0]), nir_var_mem_push_const))
1626 if (src.ssa->parent_instr->type == nir_instr_type_alu) {
1627 nir_alu_instr *alu = nir_instr_as_alu(src.ssa->parent_instr);
1629 if (!nir_src_is_always_uniform(alu->src[i].src))
1643 src_remove_all_uses(nir_src *src)
1645 for (; src; src = src->is_ssa ? NULL : src->reg.indirect) {
1646 if (!src_is_valid(src))
1649 list_del(&src->use_link);
1654 src_add_all_uses(nir_src *src, nir_instr *parent_instr, nir_if *parent_if)
1656 for (; src; src = src->is_ssa ? NULL : src->reg.indirect) {
1657 if (!src_is_valid(src))
1661 src->parent_instr = parent_instr;
1662 if (src->is_ssa)
1663 list_addtail(&src->use_link, &src->ssa->uses);
1665 list_addtail(&src->use_link, &src->reg.reg->uses);
1668 src->parent_if = parent_if;
1669 if (src->is_ssa)
1670 list_addtail(&src->use_link, &src->ssa->if_uses);
1672 list_addtail(&src->use_link, &src->reg.reg->if_uses);
1678 nir_instr_rewrite_src(nir_instr *instr, nir_src *src, nir_src new_src)
1680 assert(!src_is_valid(src) || src->parent_instr == instr);
1682 src_remove_all_uses(src);
1683 nir_src_copy(src, &new_src);
1684 src_add_all_uses(src, instr, NULL);
1688 nir_instr_move_src(nir_instr *dest_instr, nir_src *dest, nir_src *src)
1694 src_remove_all_uses(src);
1695 *dest = *src;
1696 *src = NIR_SRC_INIT;
1703 nir_src *src = &if_stmt->condition;
1704 assert(!src_is_valid(src) || src->parent_if == if_stmt);
1706 src_remove_all_uses(src);
1707 nir_src_copy(src, &new_src);
1708 src_add_all_uses(src, NULL, if_stmt);
1853 /* deref stores have the deref in src[0] and the store value in src[1] */
1856 return intrin->src[1].ssa;
1858 /* all other stores have the store value in src[0] */
1859 return intrin->src[0].ssa;
1863 nir_src_components_read(const nir_src *src)
1865 assert(src->is_ssa && src->parent_instr);
1867 if (src->parent_instr->type == nir_instr_type_alu) {
1868 nir_alu_instr *alu = nir_instr_as_alu(src->parent_instr);
1869 nir_alu_src *alu_src = exec_node_data(nir_alu_src, src, src);
1870 int src_idx = alu_src - &alu->src[0];
1873 } else if (src->parent_instr->type == nir_instr_type_intrinsic) {
1874 nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(src->parent_instr);
1875 if (nir_intrinsic_has_write_mask(intrin) && src->ssa == get_store_value(intrin))
1878 return (1 << src->ssa->num_components) - 1;
1880 return (1 << src->ssa->num_components) - 1;
2713 nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_ssa_def *src,
2761 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
2774 nir_instr_rewrite_src(&intrin->instr, &intrin->src[0],
2775 nir_src_for_ssa(src));
2795 return &call->src[10];
2798 return &call->src[1];
2840 if (alu->src[0].swizzle[i] != i)
2843 rsrc = alu->src[0].src;
2846 if (alu->src[i].swizzle[0] != i || alu->src[i].src.ssa != alu->src[0].src.ssa)
2849 rsrc = alu->src[0].src;
2855 rsrc = intrin->src[0];
2880 intrin = nir_src_as_intrinsic(intrin->src[0]);
2893 res.indices[0] = intrin->src[0];
2927 assert(instr->src[0].src.is_ssa);
2931 !instr->src[0].abs &&
2932 !instr->src[0].negate;
2935 if (instr->src[i].abs || instr->src[i].negate)
2953 s.def = alu->src[0].src.ssa;
2954 s.comp = alu->src[0].swizzle[s.comp];
2957 s.def = alu->src[s.comp].src.ssa;
2958 s.comp = alu->src[s.comp].swizzle[0];
3087 nir_alu_instr_channel_used(const nir_alu_instr *instr, unsigned src,
3090 if (nir_op_infos[instr->op].input_sizes[src] > 0)
3091 return channel < nir_op_infos[instr->op].input_sizes[src];
3097 nir_alu_instr_src_read_mask(const nir_alu_instr *instr, unsigned src)
3101 if (!nir_alu_instr_channel_used(instr, src, c))
3104 read_mask |= (1 << instr->src[src].swizzle[c]);
3110 nir_ssa_alu_instr_src_components(const nir_alu_instr *instr, unsigned src)
3112 if (nir_op_infos[instr->op].input_sizes[src] > 0)
3113 return nir_op_infos[instr->op].input_sizes[src];
3165 return nir_src_num_components(intr->src[srcn]);
3181 * Helper to copy const_index[] from src to dst, without assuming they
3185 nir_intrinsic_copy_const_indices(nir_intrinsic_instr *dst, nir_intrinsic_instr *src)
3187 if (src->intrinsic == dst->intrinsic) {
3188 memcpy(dst->const_index, src->const_index, sizeof(dst->const_index));
3192 const nir_intrinsic_info *src_info = &nir_intrinsic_infos[src->intrinsic];
3203 src->const_index[src_info->index_map[i] - 1];
3309 nir_tex_instr_src_type(const nir_tex_instr *instr, unsigned src)
3311 switch (instr->src[src].src_type) {
3372 nir_tex_instr_src_size(const nir_tex_instr *instr, unsigned src)
3374 if (instr->src[src].src_type == nir_tex_src_coord)
3378 if (instr->src[src].src_type == nir_tex_src_ms_mcs_intel)
3381 if (instr->src[src].src_type == nir_tex_src_ddx ||
3382 instr->src[src].src_type == nir_tex_src_ddy) {
3390 if (instr->src[src].src_type == nir_tex_src_offset) {
3397 if (instr->src[src].src_type == nir_tex_src_backend1 ||
3398 instr->src[src].src_type == nir_tex_src_backend2)
3399 return nir_src_num_components(instr->src[src].src);
3402 if (instr->src[src].src_type == nir_tex_src_texture_handle ||
3403 instr->src[src].src_type == nir_tex_src_sampler_handle)