intel/mi: Optimize away LOAD_REGISTER_REG from a register to itself

We might want to resolve something to be in a particular register,
so we can access it outside of the gen_mi framework...but it may already
be in that register, at which point there's no work to do.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Kenneth Graunke 2019-04-01 16:00:25 -07:00
parent fe7ed6b057
commit 79b8e3c260

View file

@ -414,9 +414,11 @@ _gen_mi_copy_no_unref(struct gen_mi_builder *b,
case GEN_MI_VALUE_TYPE_REG32:
case GEN_MI_VALUE_TYPE_REG64:
#if GEN_GEN >= 8 || GEN_IS_HASWELL
gen_mi_builder_emit(b, GENX(MI_LOAD_REGISTER_REG), lrr) {
lrr.SourceRegisterAddress = src.reg;
lrr.DestinationRegisterAddress = dst.reg;
if (src.reg != dst.reg) {
gen_mi_builder_emit(b, GENX(MI_LOAD_REGISTER_REG), lrr) {
lrr.SourceRegisterAddress = src.reg;
lrr.DestinationRegisterAddress = dst.reg;
}
}
#else
unreachable("Cannot do reg <-> reg copy on IVB and earlier");