It is not always desirable to use actual blocks. A prime example in the case where EXT_shader_io_blocks is not supported on the target implementation.
MSL does not support value semantics for arrays (sigh), so we need to force constant references and deal with copies if we have a different address space than what we end up guessing.