1. Change assign to follow SILGen's model for a semantic assignment,
which (in the case of unowned pointers) doesn't require the left
and right hand sides to be the same.
2. Change assign to consume/take the refcount from the LHS, following
SILGen's design (which I completely misunderstood before).
Swift SVN r7787
This was not likely an error-free change. Where you see problems
please correct them. This went through a fairly tedious audit
before committing, but comments might have been changed incorrectly,
not changed at all, etc.
Swift SVN r7631
Because union layout may interleave tag bits with payload data, we need to be able to efficiently inject and remove tag bits from an address-only union in-place. To do this, we'll model address-only union initialization by projecting out the data address (union_data_addr) and storing to it, then overlaying the tag bits (inject_union_addr). To dispatch and project out the data, we'll use a destructive_switch_union_addr instruction that clears any tag bits in-place necessary to give a valid data address.
Swift SVN r7589
The instruction represents constructing a loadable union given a case and the data for that case, which will let us emit union constructor functions in SIL instead of IRGen (rdar://problem/14773182).
Swift SVN r7558
to being a semantic assign. The functional difference here is only
for unowned pointers, where now the conversion from strong to unowned
is implicit in the assign.
The logic behind this is that 'assign' is really part of SILGen, that
is only moved later to make it easier to make it be flow sensitive.
Since it is part of SILGen and will be using some of the type lowering
functionality used by SILGen, we should play by its rules.
No functionality change.
Swift SVN r7507
In designing the runtime model for generic unions with John, we decided we're going to need very different SIL semantics for destructuring address-only unions, so I don't think trying to stretch switch_union to cover all unions makes any sense anymore.
Swift SVN r7225
Have project_existential return $*This instead of $Builtin.OpaquePointer, and have protocol_method do the same for methods of opaque protocols. This makes it easier for passes to reason about the semantics of the projected address, since it's restricted by the semantics of SIL addresses.
Swift SVN r6872
Modules can be in either 'Raw' or 'Canonical' form, with different invariants on each. We don't actually distinguish those invariants yet, but this patch adds the field to SILModule and adds a "sil_stage" declaration to SIL printer/parser syntax.
Swift SVN r6793
We haven't fully updated references to union cases, and enums still are not
their own thing yet, but "oneof" is gone. Long live "union"!
Swift SVN r6783
This way we don't need to deal with the inaccuracy of decimal float literals. While we're here, modify the in-memory representation of IntegerLiteralInst and FloatLiteralInst to save the word array of the APInt instead of round-tripping through plain text.
Swift SVN r6676
Avoid the SSA watch word "use". The projected address or class reference from an existential can be spilled, phi-ed, or GVNed, but it's UB if it's passed to a protocol method from another existential, or if the address is dereferenced after the existential has been modified.
Swift SVN r6621
C types are always trivial and C function signatures don't get mangled by the platform ABI at the SIL level. ObjC methods uncurry left-to-right, "_cmd" is magicked away, and they follow ARC's ownership rules for reference counting.
Swift SVN r6619
None of the instructions I used to demonstrate the operand syntax actually use it. That's dumb.
Also refactor the grammar to fix an inaccurate use of 'sil-value'. We allow the '#n' value index even in places we don't require a type, but not for instruction or bb argument defs.
Swift SVN r6615
Avoid overspecifying optimization/diagnostic passes because those aren't nailed down yet. Don't use "shared" to refer to boxed variables; it's meaningless in this context.
Swift SVN r6610