Commit Graph

5381 Commits

Author SHA1 Message Date
Joe Shajrawi
5aff0891b7 Code size: copy_addr outline part 2 - Support Archetypes 2017-11-15 15:26:44 -08:00
Joe Shajrawi
18b0240f02 Outline copy_addr part 1 clean-up: Remove Enum's TIK < Loadable check - archetype check covers it 2017-11-15 15:24:16 -08:00
Slava Pestov
72ad29a5fb Merge pull request #12935 from adrian-prantl/cherry
master-next: Update IRGenDebugInfo.cpp for LLVM r313825
2017-11-14 20:25:43 -08:00
Bob Wilson
ddf8148afc master-next: Update IRGenDebugInfo.cpp for LLVM r313825
LLVM r313825 replaced llvm::FindAllocaDbgDeclare with FindDbgAddrUses,
and we also need to include LLVM's IntrinsicInst.h header now.

rdar://problem/34574938
(cherry picked from commit 6b446a0d38)
2017-11-14 16:43:25 -08:00
swift-ci
d3b8ffc42a Merge remote-tracking branch 'origin/master' into master-next 2017-11-14 12:09:04 -08:00
Erik Eckstein
8846fdf814 IRGen: consider the function-level optimization mode for setting the minsize attribute on llvm functions. 2017-11-14 11:25:02 -08:00
Erik Eckstein
90c21be191 Unify the implementation of optimization mode in various option classes.
This commit is mostly refactoring.

*) Introduce a new OptimizationMode enum and use that in SILOptions and IRGenOptions
*) Allow the optimization mode also be specified for specific SILFunctions. This is not used in this commit yet and thus still a NFC.

Also, fixes a minor bug: we didn’t run mandatory IRGen passes for functions with @_semantics("optimize.sil.never")
2017-11-14 11:25:02 -08:00
swift-ci
58a657b57a Merge remote-tracking branch 'origin/master' into master-next 2017-11-13 16:49:27 -08:00
Arnold Schwaighofer
f10f8d55dc IRGen: Nuke isSILOnly usage
It queried for [transparent] [serialized] definitions and only had an effect
when the module was compiled with -Onone because we remove [serialized]
as part of the optimizer pipeline.

It was causing bad effects when the module we imported from was compiled
with -Onone:

 The definition would be marked internal in said module.

and the importing module is compile with -O:

 The definition would be marked as available_externally.

because neither would guaranteed the presence of a definition of the
imported symbol available to the importer.

rdar://35100697
2017-11-13 14:33:39 -08:00
swift-ci
90cc83fabc Merge remote-tracking branch 'origin/master' into master-next 2017-11-13 02:09:19 -08:00
John McCall
045998544f Add begin_apply, abort_apply, and end_apply instructions to allow
yield_once coroutines to be executed.
2017-11-13 04:03:54 -05: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
swift-ci
264563c182 Merge remote-tracking branch 'origin/master' into master-next 2017-11-10 16:49:38 -08:00
swift-ci
2996e332b4 Merge pull request #12861 from adrian-prantl/35430708 2017-11-10 16:33:21 -08:00
Adrian Prantl
578fca1ee3 Move the logic for ignoring the debug locations for closure setup code into SILGen.
NFC-ish.
2017-11-10 14:37:32 -08:00
swift-ci
71fc455b8d Merge remote-tracking branch 'origin/master' into master-next 2017-11-10 14:09:31 -08:00
Huon Wilson
4a2d422185 Merge pull request #12531 from huonw/conditional-conformance-irgen
IRGen for conditional conformances
2017-11-10 14:01:51 -08:00
swift-ci
0896d1278f Merge remote-tracking branch 'origin/master' into master-next 2017-11-10 10:49:45 -08:00
Arnold Schwaighofer
8c0e3fb5e4 IRGen: emitObjCPartialApplicationForwarder support @callee_guaranteed
@callee_guaranteed closure applications don't own their context.

SR-5441
rdar://33255593
2017-11-10 09:35:07 -08:00
Huon Wilson
6dd8bec47e [AST] Unify computation of 'has arguments?' for witness table accessors. 2017-11-09 17:51:48 -08:00
Huon Wilson
901bd35e5a [IRGen] Pass witness tables for conditional conformances to witness table accessor.
When calling an accessor, one has to pull the witness tables for each
conditional conformance requirement into a(n appropriately ordered) buffer that
is passed to the accessor. This is simple enough, if the appropriate
specialization of the relevant conformances are known, which the compiler didn't
track deep enough until now.
2017-11-08 17:02:50 -08:00
Huon Wilson
4743b8ae5c [IRGen] Pull witness tables out of self witness table in witness_method thunks.
These are passed down to the "true" function, and so need to be made available.
2017-11-08 17:02:50 -08:00
Huon Wilson
bdff7aa3f4 [IRGen] Polymorphic convention needs to consider conditional requirements from the self witness table.
Conditional requirements shouldn't appear in witness_method's (IR) signature,
since they differ from conformance to conformance. PolymorphicConvention just
needs to consider these fulfilled by the self witness table, since they
can/should be pulled out of there.
2017-11-08 17:02:50 -08:00
Huon Wilson
b9336c7389 [IRGen] Dynamically fill in conditional conformance wtables.
This requires the witness table accessor function to gain two new parameters: a
pointer to an array of witness tables and their count. These are then passed down
to the instantiation function which reads them out of the array and writes them
into the newly-allocated witness table.

We use the count to assert that the number of conditional witness tables passed
in is what the protocol conformance expects, which is especially useful while
the feature is still experimental: it is a compiler/runtime bug if an incorrect
number is passed.
2017-11-08 17:02:50 -08:00
Huon Wilson
4f53475dd9 [IRGen] Support fulfilling conformances from conditional requirements.
A concrete conformance may involve conditional conformances, which are witness
tables that we can access from the original conformance's one. We need to track
metadata and be able to follow it in a metadata path.
2017-11-08 17:02:50 -08:00
Huon Wilson
51bea6b575 [IRGen] Reserve witness table private data space for conditional conformance tables.
Pointers to the witness tables of any conditional conformances are placed into
private data, closest to the base pointer, i.e. wtable_ptr[-1] will be the
first (if any) conditional conformance witness table. These always need to be
provided by the context, and copied in when the witness table is instantiated,
making reserving space easy: increment the size of the private data section.
2017-11-08 17:02:50 -08:00
swift-ci
dea6f91f0a Merge remote-tracking branch 'origin/master' into master-next 2017-11-08 12:09:39 -08:00
Pavel Yaskevich
cbee90cf5d Merge pull request #12812 from xedin/bring-back-function-metadata-changes
[IRGen] Improve function type metadata representation
2017-11-08 12:03:54 -08:00
swift-ci
5b2077c651 Merge remote-tracking branch 'origin/master' into master-next 2017-11-08 03:09:43 -08:00
Greg Parker
9a38e609af [IRGen][runtime] Reduce object header to 8 bytes on 32-bit platforms. (#12790)
SR-4353, rdar://29765800
2017-11-08 02:50:11 -08:00
swift-ci
760565d489 Merge remote-tracking branch 'origin/master' into master-next 2017-11-07 12:49:39 -08:00
Pavel Yaskevich
be3d1af525 [ABI/Runtime] NFC: Rename function metadata arguments to parameters 2017-11-07 12:45:32 -08:00
Pavel Yaskevich
622cc1c64a [ABI/IRGen] Add custom function parameter flags representation for metadata use 2017-11-07 12:45:32 -08:00
Pavel Yaskevich
e9d4a5304e [IRGen] Fix function metadata endpoints to use separate parameter/flags arguments
Switch most general endpoint to be `flags, parameters, parameterFlags, result`,
instead of opaque `void **`, more specialized ones to use follow argument scheme:
`flags, param0, [flags0], ..., paramN, [flagsN], result` and store parameter/flags
information separately in `FunctionCacheEntry::{Key, Data}` as well.
2017-11-07 12:45:32 -08:00
Pavel Yaskevich
f5ed1a8759 [IRGen] Switch function metdata to use Metdata * for parameter references 2017-11-07 12:45:32 -08:00
Pavel Yaskevich
9b3739b91d [IRGen] Add parameter flags to function type metadata
Currently only single 'inout' flag has been encoded into function
metadata, these changes extend function metadata to support up to
32 flags per parameter.
2017-11-07 12:45:32 -08:00
Pavel Yaskevich
610c5450bb Merge pull request #12788 from xedin/revert-function-metadata-changes
Revert function metadata changes
2017-11-07 12:35:40 -08:00
swift-ci
4b5fce50e7 Merge remote-tracking branch 'origin/master' into master-next 2017-11-07 03:29:00 -08:00
swift-ci
69a6e5e260 Merge pull request #12789 from rjmccall/sil-coroutines 2017-11-07 03:22:22 -08:00
John McCall
14d6390352 Add "yield" and "unwind" instructions to SIL. 2017-11-07 03:51:54 -05:00
Pavel Yaskevich
659c1bc2e0 Revert "[IRGen] Add parameter flags to function type metadata"
This reverts commit b33a6c7cdf.
2017-11-07 00:24:24 -08:00
Pavel Yaskevich
37185390f8 Revert "[IRGen] Switch function metdata to use Metdata * for parameter references"
This reverts commit 99f188e311.
2017-11-07 00:24:23 -08:00
Pavel Yaskevich
72bf180d0f Revert "[IRGen] Fix function metadata endpoints to use separate parameter/flags arguments"
This reverts commit 728d2a4c2f.
2017-11-07 00:24:22 -08:00
Pavel Yaskevich
aa89c4f4a8 Revert "[ABI/IRGen] Add custom function parameter flags representation for metadata use"
This reverts commit f6b0d2d2cf.
2017-11-07 00:24:21 -08:00
Pavel Yaskevich
4f354a7f09 Revert "[ABI/Runtime] NFC: Rename function metadata arguments to parameters"
This reverts commit 801b35e28c.
2017-11-07 00:24:20 -08:00
John McCall
5c33d2106a Add simple accessor/generator coroutine support to SILFunctionType. 2017-11-07 01:50:12 -05:00
swift-ci
d340ba97e3 Merge remote-tracking branch 'origin/master' into master-next 2017-11-06 20:09:01 -08:00
Pavel Yaskevich
e23a6f1359 Merge pull request #12500 from xedin/fn-metadata-changes
[IRGen] Improvements to function type metadata
2017-11-06 19:50:19 -08:00
swift-ci
36329d15a2 Merge remote-tracking branch 'origin/master' into master-next 2017-11-06 11:49:51 -08:00
Joe Groff
f8aef0a7e3 Merge pull request #12732 from jckarter/objc-class-metadata-unwrapping
[WIP] Runtime: Put ObjC class wrapper unwrapping behind a runtime call.
2017-11-06 11:32:15 -08:00