This is split-out from https://reviews.llvm.org/D134859 as it showed up there.
When the opcode argument is not trivially copyable, we can't just memcpy it into our code vector. Use placement new to copy it instead.
This is currently dead code without https://reviews.llvm.org/D134859.
Do we really need a separate case for trivially copyable types?