Commits

Andrew Trick committed 7565a65235d
Introduce unchecked_bitwise_cast SIL instruction. We need a SIL level unsafe cast that supports arbitrary usage of UnsafePointer, generalizes Builtin.reinterpretCast, and has the same semantics on generic vs. nongeneric code. In other words, we need to be able to promote the cast of an address type to the cast of an object type without changing semantics, and that cast needs to support types that are not layout identical. This patch introduces an unchecked_bitwise_cast instruction for that purpose. It is different from unsafe_addr_cast, which has been our fall-back "unknown" cast in the past. With unchecked_bitwise_cast we cannot assume layout or RC identity. The cast implies a store and reload of the value to obtain the low order bytes. I know that bit_cast is just an abbreviation for bitwise_cast, but we use "bitcast" throught to imply copying a same sized value. No one could come up with a better name for copying an objects low bytes via: @addr = alloca $wideTy store @addr, $wideTy load @addr, $narrowTy Followup patches will optimize unchecked_bitwise_cast into more semantically useful unchecked casts when enough type information is present. This way, the optimizer will rarely need to be taught about the bitwise case. Swift SVN r29510