This patch fixes a variety of crashes resulting from the MemCpyOptPass
casting TypeSize to a constant integer, whether implicitly or
explicitly.
Since the MemsetRanges requires a constant size to work, all but one
of the fixes in this patch simply involve skipping the various
optimizations for scalable types as cleanly as possible.
The optimization of byval parameters, however, has been updated to
work on scalable types in theory. In practice, this optimization is only
valid when the length of the memcpy is known to be larger than the
scalable type size, which is currently never the case. This could
perhaps be done in the future using the vscale_range attribute.
Some implicit casts have been left as they were, under the knowledge
they are only called on aggregate types. These should never be
scalably-sized.