/* Lower it away */
bi_builder b = bi_init_builder(ctx, bi_before_instr(ins));
- ins->src[src] = bi_replace_index(ins->src[src],
- bi_swz_v2i16(&b, ins->src[src]));
+ bi_replace_src(ins, src, bi_swz_v2i16(&b, ins->src[src]));
ins->src[src].swizzle = BI_SWIZZLE_H01;
}
continue;
if (!bi_is_null(repl))
- ins->src[s] = bi_replace_index(ins->src[s], repl);
+ bi_replace_src(ins, s, repl);
}
}
bi_index repl = replacement[instr->src[s].value];
if (!bi_is_null(repl))
- instr->src[s] = bi_replace_index(instr->src[s], repl);
+ bi_replace_src(instr, s, repl);
}
if (!instr_can_cse(instr))
bi_foreach_instr_global(ctx, I) {
bi_foreach_ssa_src(I, s) {
if (I->src[s].value < first_reg && !bi_is_null(remap[I->src[s].value]))
- I->src[s] = bi_replace_index(I->src[s], remap[I->src[s].value]);
+ bi_replace_src(I, s, remap[I->src[s].value]);
}
}
bi_mov_i32_to(&b, dst, src);
}
- I->src[0] = bi_replace_index(I->src[0], I->dest[0]);
+ bi_replace_src(I, 0, I->dest[0]);
}
}
bi_foreach_src(prop, s) {
if (bi_is_equiv(prop->src[s], I->dest[0])) {
- prop->src[s] = bi_replace_index(prop->src[s], reg);
+ bi_replace_src(prop, s, reg);
}
}
}
bi_index pass = bi_passthrough(ins->src[s].offset ?
BIFROST_SRC_FAU_HI : BIFROST_SRC_FAU_LO);
- ins->src[s] = bi_replace_index(ins->src[s], pass);
+ bi_replace_src(ins, s, pass);
}
}
bi_index src = ins->src[s];
if (src.type == BI_INDEX_CONSTANT && src.value == 0)
- ins->src[s] = bi_replace_index(src, zero);
+ bi_replace_src(ins, s, zero);
}
}
assert(lo || hi);
- ins->src[s] = bi_replace_index(ins->src[s],
- bi_passthrough(hi ? BIFROST_SRC_FAU_HI :
- BIFROST_SRC_FAU_LO));
+ bi_replace_src(ins, s,
+ bi_passthrough(hi ? BIFROST_SRC_FAU_HI : BIFROST_SRC_FAU_LO));
}
}
if (bi_check_fau_src(ins, s, constants, &cwords, &fau)) continue;
bi_index copy = bi_mov_i32(&b, ins->src[s]);
- ins->src[s] = bi_replace_index(ins->src[s], copy);
+ bi_replace_src(ins, s, copy);
}
}
}
I->nr_srcs = new_count;
}
+static inline void
+bi_replace_src(bi_instr *I, unsigned src_index, bi_index replacement)
+{
+ I->src[src_index] = bi_replace_index(I->src[src_index], replacement);
+}
+
/* Represents the assignment of slots for a given bi_tuple */
typedef struct {
bi_index src = I->src[s];
if (!valid_src(&fau, fau_page, src)) {
- bi_index copy = bi_mov_i32(b, bi_strip_index(src));
- I->src[s] = bi_replace_index(src, copy);
+ bi_replace_src(I, s, bi_mov_i32(b, bi_strip_index(src)));
/* Rollback update. Since the replacement move doesn't affect FAU
* state, there is no need to call valid_src again.