Commit Graph

28 Commits

Author SHA1 Message Date
Slava Pestov
4d21d127aa Mangler: Add mangling for class metadata base offset 2017-12-08 13:50:56 -08:00
Erik Eckstein
c9f28c81c2 docs: fix sphinx build error 2017-12-05 09:17:44 -08:00
Doug Gregor
31723be232 Merge pull request #13264 from DougGregor/se-0143-better-fail-than-crash
[Runtime] Always fail to find a conditional conformance at runtime.
2017-12-04 21:50:25 -08:00
Doug Gregor
4f8edeb913 [Runtime] Always fail to find a conditional conformance at runtime.
Proper evaluation of conditional conformances at runtime (e.g., as part of
dynamic casting) is too large to tackle in the Swift 4.1 timeframe. For now,
record that a conformance is conditional in the protocol conformance record,
and always return "does not conform" to such types.

Fixes rdar://problem/35761301.
2017-12-04 16:51:52 -08:00
Erik Eckstein
ee608763c2 docs: small simplification and added comments in the mangling grammar doc. 2017-12-04 15:41:21 -08:00
Joe Shajrawi
d8289aa3ec Code size: destroy_addr outline 2017-11-17 16:10:27 -08:00
Joe Shajrawi
5aff0891b7 Code size: copy_addr outline part 2 - Support Archetypes 2017-11-15 15:26:44 -08:00
John McCall
7743be30f6 Add a "token" type to SIL to allow dependencies to be expressed without
allowing abstraction.
2017-11-13 04:03:21 -05:00
Pavel Yaskevich
fdc43cf151 [ABI/Metadata] Re-arrange space allocation of function metadata flags
This changes layout of the `TargetFunctionTypeFlags` to allocate
8 bits for flags, 8 bits for convesion and 16 bits for number of
parameters. Documentation is updated accordingly.
2017-11-08 23:42:59 -08:00
Doug Gregor
1d8bc93238 Merge pull request #12740 from DougGregor/abi-generic-signatures
[ABI] Initial draft of canonicalization and minimization of generic signatures
2017-11-03 22:28:31 -07:00
Doug Gregor
0790739a2f Describe a protocol requirement signature for the ABI 2017-11-03 22:27:33 -07:00
Doug Gregor
14db368827 Clarify discussion of canonical concrete types and type parameters.
Also address Slava's feedback on the first draft.
2017-11-03 22:09:07 -07:00
Pavel Yaskevich
7a2117bdcf [Mangling] Preserve all parameter flags in single parameter function mangling
Currently if function has a single parameter we'd skip mangling some of the
parameter flags e.g. `__shared`, `inout` still works because it's part of
the type itself (currently) but would be broken too if that were to change.
2017-11-03 17:00:24 -07:00
Doug Gregor
488c6e868e [ABI] Initial draft of canonicalization and minimization of generic signatures 2017-11-02 23:46:47 -07:00
Joe Shajrawi
f4db36426c Code Size: Outline copy addr instruction 2017-10-31 17:03:48 -07:00
Andrew Trick
d369aa4070 Support @noescape SIL function types. (#12420)
Support for @noescape SILFunctionTypes.

These are the underlying SIL changes necessary to implement the new
closure capture ABI.

Note: This includes a change to function name mangling that
primarily affects reabstraction thunks.

The new ABI will allow stack allocation of non-escaping closures as a
simple optimization.

The new ABI, and the stack allocation optimization, also require
closure context to be @guaranteed. That will be implemented as the
next step.

Many SIL passes pattern match partial_apply sequences. These all
needed to be fixed to handle the convert_function that SILGen now
emits. The conversion is now needed whenever a function declaration,
which has an escaping type, is passed into a @NoEscape argument.

In addition to supporting new SIL patterns, some optimizations like
inlining and SIL combine are now stronger which could perturb some
benchmark results.

These underlying SIL changes should be merged now to avoid conflicting
with other work. Minor benchmark discrepancies can be investigated as part of
the stack-allocation work.

* Add a noescape attribute to SILFunctionType.

And set this attribute correctly when lowering formal function types to SILFunctionTypes based on @escaping.

This will allow stack allocation of closures, and unblock a related ABI change.

* Flip the polarity on @noescape on SILFunctionType and clarify that
we don't default it.

* Emit withoutActuallyEscaping using a convert_function instruction.

It might be better to use a specialized instruction here, but I'll leave that up to Andy.

Andy: And I'll leave that to Arnold who is implementing SIL support for guaranteed ownership of thick function types.

* Fix SILGen and SIL Parsing.

* Fix the LoadableByAddress pass.

* Fix ClosureSpecializer.

* Fix performance inliner constant propagation.

* Fix the PartialApplyCombiner.

* Adjust SILFunctionType for thunks.

* Add mangling for @noescape/@escaping.

* Fix test cases for @noescape attribute, mangling, convert_function, etc.

* Fix exclusivity test cases.

* Fix AccessEnforcement.

* Fix SILCombine of convert_function -> apply.

* Fix ObjC bridging thunks.

* Various MandatoryInlining fixes.

* Fix SILCombine optimizeApplyOfConvertFunction.

* Fix more test cases after merging (again).

* Fix ClosureSpecializer. Hande convert_function cloning.

Be conservative when combining convert_function. Most of our code doesn't know
how to deal with function type mismatches yet.

* Fix MandatoryInlining.

Be conservative with function conversion. The inliner does not yet know how to
cast arguments or convert between throwing forms.

* Fix PartialApplyCombiner.
2017-10-17 13:07:25 -07:00
Erik Eckstein
e21b9124ee Demangler: fix demangling and remangling of associated type paths.
fixes SR-6138
2017-10-16 17:30:34 -07:00
Pavel Yaskevich
c5cff769c7 [IRGen] Update Function Metadata to use AnyFunctionType::Param
This changes layout of the parameter metadata from single tuple record
(in case of materializable type) to N records each corresponding to
invididual function parameter, where functions with no parameters
`() -> Void` get 0 records allocated.
2017-10-12 15:58:19 -07:00
Pavel Yaskevich
affbd5e4ea [AST] Fix function signature mangler to aways respect parens 2017-10-11 21:45:05 -07:00
Joe Groff
78d75428d6 SILGen: Lower key path subscript indexes.
And fill out SIL support for parsing, printing, and serializing key path
patterns with captured indexes.
2017-09-15 10:00:32 -07:00
Alex Hoppen
1c7e289b96 [Mangling] Adjust subscript mangling to not include "subscript"
Change the mangling of accessors to have a variable or subscript node
as their only child node, while subscript nodes no longer contain a decl
name.
2017-09-10 19:44:07 +02:00
Arnold Schwaighofer
48bd2bba76 Mangling changes for outlined Objective-C method calls
rdar://33387700
2017-09-06 08:37:30 -07:00
Erik Eckstein
c1e98b9df2 mangling: Add mangling for outlined global variables 2017-08-23 09:15:01 -07:00
swift-ci
14b4dd08f8 Merge pull request #11302 from jckarter/key-path-abi-doc 2017-08-01 16:58:46 -07:00
Joe Groff
548aab55d0 Add document describing layout of KeyPath objects. 2017-08-01 16:13:39 -07:00
Robert Widmann
ca7b141b30 [Gardening] Remove one last dangling link 2017-07-31 17:46:36 -07:00
Joe Groff
26a9eed2c5 ABI/TypeMetadata.rst: Remove dangling link 2017-07-31 16:22:19 -07:00
Joe Groff
7c71b3263f Break docs/ABI.rst into a subdirectory of documents.
There's a lot of information here for one document, so I think another layer of organization is warranted. This commit only breaks up the existing content by heading, it does not update or otherwise change any content.
2017-07-31 11:26:41 -07:00