Commit Graph

4247 Commits

Author SHA1 Message Date
Dmitri Gribenko
a609277f55 IOKit depends on Dispatch 2016-02-18 09:43:30 -08:00
Joe Groff
ae0e855aaf Revert "Runtime: Remove retainCount entry points."
This reverts commit 51e0594e1c. The retainCount
entry points are used by Instruments.
2016-02-18 09:38:23 -08:00
Chris Lattner
d73141479e Merge pull request #1348 from Nirma/constant_predicate
Change _predicate from variable to constant.
2016-02-18 09:00:13 -08:00
practicalswift
bb3f6ac508 [gardening] Fix header consistency for recently introduced .S file 2016-02-18 15:36:05 +01:00
Nicholas Maccharoli
4d1efe984b Change _predicate from variable to constant. 2016-02-18 20:57:57 +09:00
Dmitri Gribenko
708d90aa80 Adjust IOKit dependencies to be only in effect on OS X 2016-02-18 02:38:16 -08:00
Dmitri Gribenko
f775457699 Add missing dependencies for the IOKit overlay 2016-02-18 02:22:22 -08:00
John McCall
e249fd680e Destructure result types in SIL function types.
Similarly to how we've always handled parameter types, we
now recursively expand tuples in result types and separately
determine a result convention for each result.

The most important code-generation change here is that
indirect results are now returned separately from each
other and from any direct results.  It is generally far
better, when receiving an indirect result, to receive it
as an independent result; the caller is much more likely
to be able to directly receive the result in the address
they want to initialize, rather than having to receive it
in temporary memory and then copy parts of it into the
target.

The most important conceptual change here that clients and
producers of SIL must be aware of is the new distinction
between a SILFunctionType's *parameters* and its *argument
list*.  The former is just the formal parameters, derived
purely from the parameter types of the original function;
indirect results are no longer in this list.  The latter
includes the indirect result arguments; as always, all
the indirect results strictly precede the parameters.
Apply instructions and entry block arguments follow the
argument list, not the parameter list.

A relatively minor change is that there can now be multiple
direct results, each with its own result convention.
This is a minor change because I've chosen to leave
return instructions as taking a single operand and
apply instructions as producing a single result; when
the type describes multiple results, they are implicitly
bound up in a tuple.  It might make sense to split these
up and allow e.g. return instructions to take a list
of operands; however, it's not clear what to do on the
caller side, and this would be a major change that can
be separated out from this already over-large patch.

Unsurprisingly, the most invasive changes here are in
SILGen; this requires substantial reworking of both call
emission and reabstraction.  It also proved important
to switch several SILGen operations over to work with
RValue instead of ManagedValue, since otherwise they
would be forced to spuriously "implode" buffers.
2016-02-18 01:26:28 -08:00
William Dillon
d0d9b1de5a Discard swift.ld and support gold linker 2016-02-17 17:47:35 -08:00
Dmitri Gribenko
473ffe55f4 IOKit overlay: fix coding style 2016-02-17 09:13:11 -08:00
Dmitri Gribenko
0795970fa7 Merge pull request #1096 from mattrajca/master
Added an an overlay for IOKit that adds the kIOReturnError* constants
2016-02-17 09:11:25 -08:00
Maksim Odnoletkov
9fffeda0ae Re-format to fit 80 columns 2016-02-17 00:43:52 +03:00
Maksim Odnoletkov
7bfabd535c [stdlib] Fixed IntervalType.overlaps for empty interval case 2016-02-16 22:19:02 +03:00
Slava Pestov
e5dac9c793 Runtime: Fix crash with non-pointer isa in swift_deallocPartialClassInstance()
Deallocation of partially-initialized instances of @objc classes
isn't supported yet, but let's avoid a regression compared to
Swift 2.1 behavior by fixing the one case that used to work,
where the early return occurs after all stored properties have
been initialized.

Fixes SR-704.
2016-02-15 14:36:48 -08:00
Dmitri Gribenko
8b86dac8c1 Revert "[gardening] Fix typo: "nul-terminated" → "null-terminated"" 2016-02-13 15:27:53 -08:00
Chris Lattner
2ba93a2ba9 Merge pull request #1300 from peterfriese/gardening-typo-nul-terminated
[gardening] Fix typo: "nul-terminated" → "null-terminated"
2016-02-13 09:08:51 -08:00
David Farler
46b7d549e5 [Reflection] Update Linux linker script for .swift3_fieldmd, .swift3_assocty 2016-02-12 16:34:28 -08:00
Dmitri Gribenko
2d27beccfc Merge pull request #1286 from natecook1000/natecook-doc-consistency
[stdlib] Documentation consistency fixes
2016-02-12 08:59:21 -08:00
Nate Cook
355fa4d064 Mark true as code in documentation comments. 2016-02-12 04:21:57 -06:00
Nate Cook
51251dc133 Convert imperative function summaries to present.
i.e., "Return ..." -> "Returns ..."
2016-02-12 04:20:39 -06:00
Nate Cook
f3c4e0ac74 Remove style on *generator* and friends. 2016-02-12 04:20:01 -06:00
Nate Cook
d9575c2d7f Make doc consistency fix for String.UnicodeScalarView´ 2016-02-12 01:56:37 -06:00
Jordan Rose
7f221323ca Merge pull request #1271 from hpux735/VarArgs
Add support for __gnuc_va_list to ClangImporter.
2016-02-11 20:22:33 -08:00
William Dillon
582c268ae9 Add support for __gnuc_va_list to ClangImporter
The implementation of va_list is pretty inconsistent across platforms.
On linux-arm __gnuc_va_list is the type used. This change adds that to ClangImporter.
The change to the test is optional, but it dramatically improves the error message printed to the console when the test fails.
Finally, the change to the application of alignment padding is due to the fact that all ARM platforms other than iOS need AAPCS-complient alignemnt.
2016-02-12 03:16:44 +00:00
Nate Cook
44e866ce21 Fix Optional errors. 2016-02-11 13:40:36 -06:00
Nate Cook
32f81e8238 Add missing abstracts for types and protocols. 2016-02-11 11:47:27 -06:00
Nate Cook
5849e167dd [stdlib] Fix a spate of typos.
Fix bulleted list formatting in Unsafe(Mutable)Pointer.
Fix incorrect type mentions on CustomPlaygroundQuickLookable.
Use 'An' instead of 'A' before '8-bit (un)signed integer.
Fix error in Range sample code.
Fix typo in Dictionary.updateValue(_:forKey:) doc comment.
Remove extra documentation in Mirror.AncestorRepresentation.
Fix improper case for operators and methods in IntegerArithmeticType.
2016-02-11 11:39:39 -06:00
Peter Friese
888d0f3fa6 [gardening] Fix typo: "nul-terminated" → "null-terminated" 2016-02-11 11:03:38 +00:00
Peter Friese
723484ef24 [gardening] Fix typo: "nul-terminated" → "null-terminated" 2016-02-11 10:11:02 +00:00
Dmitri Gribenko
410a34e078 Merge pull request #1255 from modocache/fix-minor-typos
[stdlib] Fix extra "it" typo
2016-02-10 10:44:36 -08:00
Brian Gesiak
a69507d493 [stdlib] Fix extra "it" typo 2016-02-10 13:40:05 -05:00
Jordan Rose
a4a4a80ac4 [CMake] Don't pass -sil-serialize-all under SWIFT_STDLIB_ENABLE_RESILIENCE.
Thanks, Slava!
2016-02-10 10:29:01 -08:00
Nadav Rotem
422764545c [Runtime] Improve the metadata hashing function.
The inputs to the hash function is pointers that have a predictable patten. The
hashes that we were generating and using for the metadata caches were not very
good, and as a result we generated very deep search trees. A small change that
improved the utilization of the 'length' field and another bit-rotate round
improved the quality of the hash function.

I am going to attach to the github commit two pictures. The first picture is the
binary with the old hash. The first tree is very deep and sparse. The second
picture is with the new hash function and the tree is very wide and uniform.  I
used the benchmark 'TypeFlood' in debug mode to generate huge amounts of
metadata.
2016-02-10 00:07:42 -08:00
Joe Groff
32872cb74a IRGen/Runtime: Relative-reference the nominal type descriptor and parent type from metadata.
Save a couple relocations per concrete value type, leaving only the value witness table as an absolute symbol.
2016-02-09 15:17:03 -08:00
Chris Lattner
b5dfb1e613 Merge pull request #1247 from practicalswift/typo-fixes-20160209
[gardening] Fix recently introduced typos: "overrideable" → "overridable", "collission(s)" → "collision(s)"
2016-02-09 14:09:02 -08:00
Chris Lattner
5bad3ba49a Warn about implicit tuple splat in a parameter list. 2016-02-09 14:01:50 -08:00
practicalswift
71ae776039 [gardening] Fix recently introduced typo: "collission" → "collision" 2016-02-09 22:47:08 +01:00
Nadav Rotem
93d4e93655 Fix a bug in the protocol conformance code.
Before this commit we only checked the conformance of the first protocol that
matched the conformance entry, which is incorrect. We need to check all of the
entries that match the key before deciding that a type does not conform to a
protocol.

This commit fixes repl_conformance_lookup.swift
2016-02-08 22:57:51 -08:00
Nadav Rotem
cdbf839f6c [Runtime Mem] Convert the metadata map from open to closed hash map.
This change cuts the number of mallocs() in the metadata caches in half.

The current metadata cache data structure uses a linked list for each entry in
the tree to handle collissions.  This means that we need at least two memory
allocations for each entry, one for the tree node and one for the linked list
node.

This commit changes the map used by the metadata caches from an open hash map
(that embeds a linked list at each entry) into an closed map that uses a
different hash value for each entry. With this change we no longer accept
collissions and it is now the responsibility of the user to prevent collissions.
The new get/trySet API makes this responsibility explicit. The new design also
goes well with the current design where hashing is done externally and the fact
that we don't save the full key, just the hash and the value to save memory.

This change reduces the number of allocated objects per entry in half. Instead
of allocating two 32-byte objects (one for the tree node and one for the linked
list) we just allocate a single entry that contains the hash and the value.

Unfortunately, values that are made of two 64-bit pointers (like protocol
conformance entries) are now too big for the 32-byte tree entry and are rounded
up to 48 bytes. In practice this is not a big deal because malloc has 48-byte pool
entries.
2016-02-08 22:57:50 -08:00
Xin Tong
d4a95eead5 Turn a function internal to preemptively avoid conflict 2016-02-08 13:35:24 -08:00
Dmitri Gribenko
76fbef8b45 Merge pull request #1233 from practicalswift/fix-header
[gardening] Fix file header formatting for recently added file.
2016-02-08 12:55:42 -08:00
Xin Tong
be9fec315a Add a caller to _Prespecialize._specializeArrays() and _Prespecialize._specializeRanges() to keep them alive
We now run a dead function elim before running any generic specializer. generic specializer generates some
prespecialized functions and explicitly keep them alive (i.e. make them not removeable by dead function elim)

However, the recently added dead function elimination gets rid of the calls which the prespecialization uses
to generate the prespecialization.

Create a caller with special name (avoid conflict) to make sure the specialization does happen.

Hopefully, eventually we will be able to move to a cleaner approach to do prespecialization.

rdar://24543234
2016-02-08 12:53:19 -08:00
practicalswift
6e23e99006 [gardening] Fix file header formatting for recently added file. 2016-02-08 20:04:00 +01:00
Joe Groff
f7291b21ec Runtime: Build with -fvisibility=hidden.
...and explicitly mark symbols we export, either for use by executables or for runtime-stdlib interaction. Until the stdlib supports resilience we have to allow programs to link to these SPI symbols.
2016-02-08 08:06:02 -08:00
David Farler
95b4abc9fb Pin the reflection data sections on Linux
These had similar problems to the protocol conformance sections during
Linux bringup. There are relative offsets from the main reflection
section to the two string sections, so their position relative to each
other must remain fixed.
2016-02-07 21:40:09 -08:00
Dmitri Gribenko
ab12335041 Merge pull request #1211 from natecook1000/natecook-utf16-randomaccess
Add 'ExtraStringAPIs.swift' to make list.
2016-02-07 20:04:48 -08:00
Michael Gottesman
c684568042 [upstream-fix] llvm::RoundUpToAlignment was renamed to llvm::alignTo. 2016-02-06 11:22:27 -08:00
Doug Gregor
42bb2528dd [Overload resolution] Prefer functions with fewer defaulted/variadic arguments.
When comparing two functions for overload resolution, break apart the
parameter lists to compare individual parameters rather than comparing
the tuples. This allows us to prefer functions with fewer arguments to
ones with more, defaulted or variadic arguments. That preference was
already encoded in the constraint optimizer, which led to some strange
behavior where the preference was expressed for function calls but not
for calls to initializers. Fixes rdar://problem/24128153.

The standard library change tweaks the anachronistic, unavailable
"print" variants somewhat. The only behavior change here is a slight
regression for cases like:

  print(a: 1, b: 2)

where we used to produce a diagnostic:

  Please wrap your tuple argument in parentheses: 'print((...))'

but we now get:

  argument labels '(a:, b:)' do not match any available overloads

However, this regression will happen at some point *anyway*, if
SE-0029 (or anything else that removes the implicit tuple splat
operation) goes through.
2016-02-05 11:41:01 -08:00
Nate Cook
428bbbe603 Add 'ExtraStringAPIs.swift' to make list. 2016-02-05 11:03:44 -06:00
Slava Pestov
3624b1fc6b Runtime: Support for resiliently adding protocol requirements with default implementations
This is the first patch in a series that will allow new protocol
requirements to be added resiliently, with the runtime filling in
default implementations in witness tables.

First, this adds a new flag to the protocol descriptor indicating
that the protocol is resilient. In this case, there are two
additional fields, MinimumWitnessTableSizeInWords and
DefaultWitnessTableSizeInWords, followed by tail-allocated
default witnesses.

The swift_getGenericWitnessTable() entry point now fills in the
default witnesses from the protocol if the given witness table
template is smaller than the expected witness table size.

This also changes the layout of instantiated witness tables to move
the address point to the end of private data. Previously the private
data came after the requirements, but this meant that adding new
requirements would require sliding the private data at runtime and
accessing it indirectly. It is much simpler to access it from
negative offsets instead.

I updated IRGen to emit the new metadata, but currently all protocols
are flagged as not resilient, and default witnesses are not emitted;
this will come in a subsequent patch once some more plumbing is
in place.

To avoid generating GOT entries for references to protocols defined
in the current module, I had to add some hacks to the existing hack
for this. I'll hopefully clean this up in a principled manner later.
2016-02-04 17:34:55 -08:00