Because the meaning of the swizzles and writemasks involved is different, so replacing the source would lead to different semantics. --- src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp index 29a62c1..6f52eec 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp @@ -322,6 +322,13 @@ try_copy_propagate(const struct brw_device_info *devinfo, value.file != ATTR) return false; + /* If the type of the copy value is different from the type of the + * instruction then the swizzles and writemasks involved don't have the same + * meaning and simply replacing the source would produce different semantics. + */ + if (type_sz(value.type) != type_sz(inst->src[arg].type)) + return false; + if (devinfo->gen >= 8 && (value.negate || value.abs) && is_logic_op(inst->opcode)) { return false; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev