Commit Graph

2195 Commits

Author SHA1 Message Date
Slava Pestov
94d4b5aa23 DI: Small cleanup now that SelfInit is only used for classes and class-bound protocols 2017-10-13 23:51:15 -07:00
Slava Pestov
b5eeae7446 DI: All enum initializers should be delegating
Again, since there's no distinction between an enum initializer that
delegates to 'self.init' from one that assigns to 'self', we can remove
the special handling of enum initializers in the 'root self' case.

Now, 'root self' is only used for designated initializers in classes
with no superclass, and struct initializers that perform memberwise
initialization of stored properties.

This regresses some diagnostics, because the logic for delegating
init diagnostics is missing some heuristics present in the root self
case. I will fix this in a subsequent patch.
2017-10-13 23:51:15 -07:00
Slava Pestov
0c16aedb60 DI: All protocol extension initializers should be delegating
Previously protocol extension initializers which called 'self.init' were
considered 'delegating', and ones that assign to 'self' were considered
'root'.

Both have the same SIL lowering so the distinction is not useful, and
removing it simplifies some code.
2017-10-13 23:51:14 -07:00
Slava Pestov
c3cf4acbbf DI: For value types, handle self.init like an assignment instead of vice versa
This allows, for example, an initializer to conditionally assign
to self or call self.init, along different control flow paths.

It also means that it is legal to call self.init() multiple times
in a value type initializer, but this... is fine. The old 'self'
is destroyed.

Fixes <rdar://problem/33137910>.
2017-10-13 23:51:14 -07:00
Slava Pestov
9a7a1de595 DI: Look through begin_access/end_access for assignment to self 2017-10-13 23:51:14 -07:00
Slava Pestov
5ffbd281c5 DI: Fix diagnostic for return from address-only initializer without calling self.init 2017-10-13 23:51:14 -07:00
Slava Pestov
e51556345d DI: Consolidate and clean up some diagnostics 2017-10-13 23:51:14 -07:00
Roman Levenstein
53754a7a69 Add a new simple utility optimization pass for serialization of SILModules 2017-10-13 23:19:19 -07:00
Slava Pestov
0acf3ac8d9 SIL: Remove is_nonnull instruction 2017-10-13 17:38:32 -07:00
Joe Shajrawi
39c7612cca Merge pull request #12411 from shajrawi/silcombine_bugfix
SILCombiner: fix an infinite loop corner-case
2017-10-12 17:05:28 -07:00
Joe Shajrawi
bdafb354bd SILCombiner: fix an infinite loop corner-case 2017-10-12 16:34:31 -07:00
Doug Gregor
cd3c63cbfd [AST] Stop including GenericSignature.h in other headers.
Except GenericEnvironment.h, because you can't meaningfully use a
GenericEnvironment without its signature. Lots less depends on
GenericSignature.h now. NFC
2017-10-12 14:23:46 -07:00
Roman Levenstein
a7ee05dd48 Small code clean-up in DeadFunctionElimination 2017-10-11 13:36:59 -07:00
Roman Levenstein
6f3b326d12 IRGen should not emit bodies of public_external functions unless it is a transparent function.
Recent changes that eliminated the -sil-serialize-all mode and adding this check to IRGen allow us to get rid of ExternalFunctionDefinitionsElimination and ExternalDefsToDecls passes, which are not needed anymore.
2017-10-11 08:29:46 -07:00
Huon Wilson
1dee31fe2b [GSB] subst Requirements directly; no need for the extra argument. 2017-10-10 20:17:42 -07:00
swift-ci
756c196188 Merge pull request #12370 from gottesmm/pr-077cac11f514c287a53445a8f7e142bbcb4abb0c 2017-10-10 17:16:56 -07:00
Joe Shajrawi
89cb274717 Merge pull request #12356 from shajrawi/sil_combine_bugfix_v2
Fixes a bug in SILCombiner that caused a use-after-free
2017-10-10 16:29:39 -07:00
Michael Gottesman
79e07c7db2 [di] DI assumes that all structs it analyzes will have /1/ property... this is not always true =><=.
The culprit here is NSManagedObject subclasses that only have @NSManaged
attributes.

This doesn't affect predictable mem opts since this issue is in the
DIMemoryUseCollector that only affects DI and that I have removed.

rdar://34589327
2017-10-10 13:58:34 -07:00
Joe Shajrawi
ac8a48b2c2 Fixes a bug in SILCombiner that caused a use-after-free 2017-10-10 13:40:14 -07:00
swift-ci
6cc22fe5ea Merge pull request #12357 from DougGregor/module-free-gsb 2017-10-10 11:16:17 -07:00
Doug Gregor
1f1b75a56d [AST] Eliminate ModuleDecl parameters from GenericSignature. 2017-10-10 10:01:39 -07:00
Doug Gregor
936a701b15 [AST] Stop uniquing canonical GSBs based on the module.
Now that the GenericSignatureBuilder is no longer sensitive to the input
module, stop uniquing the canonical GSBs based on that module. The main
win here is when deserializing a generic environment: we would end up 
creating a canonical GSB in the module we deserialized and another
canonical GSB in the module in which it is used.
2017-10-10 09:41:23 -07:00
Doug Gregor
ef542ffd8a [GSB] Eliminate the stored LookupConformanceFn to the GSB.
Implement a module-agnostic conformance lookup operation within the GSB
itself, so it does not need to be supplied by the code constructing the
generic signature builder. This makes the generic signature builder
(closer to) being module-agnostic.
2017-10-10 09:41:23 -07:00
Erik Eckstein
ab934d0500 DefiniteInitialization: fixed crash for wrong super call with inout instance variable
Fixes rdar://problem/22960985
2017-10-10 09:24:46 -07:00
Slava Pestov
c2f2eb6c3c SILOptimizer: Devirtualizer support for witness thunks with a class-constrained 'Self' 2017-10-09 19:53:49 -07:00
Doug Gregor
fa5852c9fe Merge pull request #12334 from DougGregor/callee-analysis-witness-thunks
[Callee analysis] Consider witness thunks when known.
2017-10-09 17:56:32 -07:00
Jordan Rose
192b523a8e Revert "Fix issue with 'Self' metadata when class conforms to protocol with default implementations" (#12344)
It broke the 32-bit iOS simulator, and possibly the 64-bit simulator as well. Reverts 5618553.
2017-10-09 10:02:48 -07:00
Slava Pestov
e76b34e506 SILOptimizer: Devirtualizer support for witness thunks with a class-constrained 'Self' 2017-10-08 18:58:00 -07:00
Slava Pestov
488aa70600 Merge pull request #12329 from slavapestov/archetype-get-interface-type
Archetypes now store an interface type
2017-10-08 16:09:52 -07:00
Doug Gregor
aad6b4090a [Callee analysis] Consider witness thunks when known.
Compute the callees of the witness thunks in a witness table more
accurately. Patch from rdar://problem/23382111, originally written by
Mark Lacey a while back, polished up/tested by me.
2017-10-07 23:19:55 -07:00
Chris Lattner
80da9b6cf7 Shrink some comments to fit in 80 cols. 2017-10-07 21:30:15 -07:00
Slava Pestov
e9dd4004c1 SILOptimizer: Replace a few mapTypeOutOfContext() calls with ArchetypeType::getInterfaceType() 2017-10-07 05:44:57 -07:00
Slava Pestov
c272d41e2f Re-apply "SIL: Remove special meaning for @_semantics("stdlib_binary_only")"
With -sil-serialize-all gone, this no longer means anything; just
don't declare the function as @_inlineable instead.

Fixes <rdar://problem/34564380>.
2017-10-04 14:07:52 -07:00
Jordan Rose
aab5f7aa4f Revert "SIL: Remove special meaning for @_semantics("stdlib_binary_only")" (#12270)
It still affects StdlibUnittest, which is still using -sil-serialize-all.
2017-10-04 12:49:21 -07:00
Slava Pestov
e806b6248d SIL: Remove dynamic_method instruction 2017-10-04 03:53:16 -07:00
Slava Pestov
7bf3b90b62 SIL: Split off objc_method / objc_super_method from class_method / super_method
This replaces the '[volatile]' flag. Now, class_method and
super_method are only used for vtable dispatch.

The witness_method instruction is still overloaded for use
with both ObjC protocol requirements and Swift protocol
requirements; the next step is to make it only mean the
latter, also using objc_method for ObjC protocol calls.
2017-10-03 22:13:31 -07:00
Slava Pestov
0fad13eeba SIL: Remove special meaning for @_semantics("stdlib_binary_only")
With -sil-serialize-all gone, this no longer means anything; just
don't declare the function as @_inlineable instead.

Fixes <rdar://problem/34564380>.
2017-10-03 13:48:22 -07:00
Roman Levenstein
0918780f61 Merge pull request #12191 from swiftix/sil-serialize-all-improvments
Stop using -sil-serialize-all when building the standard library
2017-10-02 19:46:45 -07:00
Erik Eckstein
a51d9b950b SILCombine: fix propagation of existential self into witness method call
In case of a mutating method call we replaced the self argument with the source of a copy_addr. This let the call modify the wrong self value.

rdar://problem/34753633
2017-10-02 16:04:21 -07:00
Roman Levenstein
53a6d89a9d More fixes for pre-specializations
Since the bodies of pre-specializaitons are not serialized, do not use the `[serialized]` attribute for them.
2017-10-02 14:34:14 -07:00
Roman Levenstein
c15ffa0571 Some fixes for the Serialized attribute of pre-specializations
Pre-specializations need some special handling when it comes to the Serialized attribute. Their bodies should not be SIL serialized. Instead, only their declarations should be serialized.

And since their bodies are not serialized and cannot be imported by the client code, it is OK if pre-specializations reference non-fragile functions inside their bodies. Due to the same reason, it is fine if pre-specializations are referenced from fragile functions, even though these pre-specializations are not fragile in a usual sense.
2017-09-29 12:45:31 -07:00
Roman Levenstein
fb0761d97a Add predicates to check if a SILModule is representing the (optimized) OnoneSupport
It is cleaner to use these predicates rather than checking for a complex condition in different places.
2017-09-29 12:36:35 -07:00
Doug Gregor
d93bed5ed1 [GSB] Move a well-formed GenericSignatureBuilder to be the canonical builder.
Once we compute a generic signature from a generic signature builder,
all queries involving that generic signature will go through a separate
(canonicalized) builder, and the original builder can no longer be used.
The canonicalization process then creates a new, effectively identical
generic signature builder. How silly.

Once we’ve computed the signature of a generic signature builder, “register”
it with the ASTContext, allowing us to move the existing generic signature
builder into place as the canonical generic signature builder. The builder
requires minimal patching but is otherwise fully usable.

Thanks to Slava Pestov for the idea!
2017-09-28 16:19:08 -07:00
Doug Gregor
0a1583fb87 [GSB] Tighten up interfaces for computing a generic signature.
Funnel all places where we create a generic signature builder to compute
the generic signature through a single entry point in the GSB
(`computeGenericSignature()`), and make `finalize` and `getGenericSignature`
private so no new uses crop up.

Tighten up the signature of `computeGenericSignature()` so it only works on
GSB rvalues, and ensure that all clients consider the GSB dead after that
point by clearing out the internal representation of the GSB.
2017-09-28 14:27:15 -07:00
Roman Levenstein
d9d58bc6c5 [sil-combine] Fix a bug in the convert_function peephole
Bail if the return type of the converted function is different from the
return type of the apply instruction.

Fixes rdar://problem/34603304
2017-09-28 09:03:40 -07:00
Joe Shajrawi
3edb16d51b PGO: outline new isProfitableToInline heuristic 2017-09-26 16:14:46 -07:00
Joe Shajrawi
75939510cd PGO: Use ProfileCounter instead of Optional<uint64_t> to hold profile counts 2017-09-26 13:34:46 -07:00
Joe Shajrawi
b82bc4d97f PGO - refactor PerformanceInliner code 2017-09-26 11:14:55 -07:00
Joe Shajrawi
915ae0e28f PGO: New(er) IHF heuristic 2017-09-26 11:14:55 -07:00
Joe Shajrawi
f4e6bb3725 PGO: add support for checked_cast__br 2017-09-26 11:14:55 -07:00