Now the pass does not need to know about the pass manager. We also don't have
runOnFunction or runOnModule anymore because the trnasformation knows
which module it is processing. The Pass itself knows how to invalidate the
analysis, based on the injected pass manager that is internal to the
transformation.
Now our DCE transformation looks like this:
class DCE : public SILModuleTransform {
void run() {
performSILDeadCodeElimination(getModule());
invalidateAnalysis(SILAnalysis::InvalidationKind::All);
}
};
Swift SVN r13598
- purge @inout from comments in the compiler except for places talking about
the SIL argument convention.
- change diagnostics to not refer to @inout
- Change the astprinter to print InoutType without the @, so it doesn't show
up in diagnostics or in closure argument types in code completion.
- Implement type parsing support for the new inout syntax (before we just
handled patterns).
- Switch the last couple of uses in the stdlib (in types) to inout.
- Various testcase updates (more to come).
Swift SVN r13564
The old devirtualization procedure did not take into account the substitution list in the apply inst.
The new optimization works on the apply instruction that uses the archetype_method instruction.
We do not handle polymorphic types because we don't modify the protocol conformance yet.
Swift SVN r12826
For example, if ABC is not a generic type we can replace this instruction
with a function_ref instruction to a specific function:
archetype_method $ABC, #pingable.ping!1
Swift SVN r12571
In many cases these calls are constructors that were too big to be inlined.
We now devirtualize this code:
class ABC {
init() { /* Don't inline */ }
func member() { }
}
func foo() {
var x = ABC()
x.member()
}
Swift SVN r12223