Commit Graph

1960 Commits

Author SHA1 Message Date
Joe Groff
87325891a3 Move FoundationHelpers.mm to SwiftStubs. 2015-11-13 08:37:12 -08:00
Joe Groff
7658ec9783 Move Availability.mm to SwiftStubs.
The functionality is exported as part of the standard library, not the core runtime.
2015-11-13 08:37:12 -08:00
Joe Groff
ffa83c057f static-ize some helpers that don't need to be exported. 2015-11-13 08:37:12 -08:00
Mishal Shah
756dd23c1f Fix Linux build after 69a20622 which renamed a header 2015-11-11 20:46:01 -08:00
Joe Groff
69a206229d Runtime: Start splitting out stubs only needed by the standard library.
Set up a separate libSwiftStubs.a archive for C++ stub functionality that's needed by the standard library but not part of the core runtime interface. Seed it with the Stubs.cpp and LibcShims.cpp files, which consist only of stubs, though a few stubs are still strewn across the runtime code base.
2015-11-11 17:28:57 -08:00
John McCall
01c4c6a50d Utility functions in headers need to be 'static inline', not just
'static', or else the compiler will complain when they're unused.
2015-11-06 10:44:26 -08:00
Slava Pestov
ec8d952db0 Runtime: Remove redundant #ifdef that's already nested inside another, NFC 2015-11-05 21:46:04 -08:00
Slava Pestov
3d19691bab IRGen: Always use Swift reference counting when Obj-C interop is not available
The swift_unknown* entry points are not available on the Linux port.
Previously we would still attempt to use them in a couple of cases:

1) Foreign classes
2) Existentials and archetypes
3) Optionals of boxed existentials

Note that this patch changes IRGen to never emit the
swift_errorRelease/Retain entry points on Linux. We would like to
use them in the future if we ever adopt a tagged-pointer representation
for small errors. In this case, they can be brought back, and the
TypeInfo for optionals will need to be generalized to propagate the
reference counting of the payload type, instead of defaulting to
unknown if the payload type is not natively reference counted.
A similar change will need to be made to support blocks, if we ever
want to use the blocks runtime on Linux.

Fixes <rdar://problem/23335318>, <rdar://problem/23335537>,
<rdar://problem/23335453>.
2015-11-03 13:03:50 -08:00
Joe Groff
f716bb2c3e Runtime: Let allocError take an initial value.
This will let us eventually do tagged pointer optimization for small error values. We don't take advantage of this in IRGen yet, but we can take advantage of it in the dynamic cast code in a few places, so it gets exercised, and doing this now will let us backward-deploy the optimization when we do implement it in the future.
2015-11-02 19:07:20 -08:00
Joe Groff
8c7c2e6c03 Retire now-dead memory_order enum in Stubs.cpp. 2015-11-02 14:58:01 -08:00
Michael Gottesman
654ca4e0c5 Move Lazy.h from stdlib/public/runtime => include/swift/Basic
I am going to use this in a unittest for BlotMapVector.
2015-11-02 09:22:30 -08:00
Joe Groff
4fb68c8a1a stdlib & Runtime: Replace atomic RMW stubs with builtins.
Swift SVN r32954
2015-10-28 23:47:40 +00:00
Joe Groff
527221ff4d stdlib & Runtime: Replace atomicStore/Load stubs with builtins.
Swift SVN r32953
2015-10-28 23:04:35 +00:00
Joe Groff
eb330480cb stdlib & Runtime: Replace _swift_stdlib_atomicCompareExchangeStrong* stubs with Builtin calls.
NFC intended.

Swift SVN r32934
2015-10-28 01:58:52 +00:00
Erik Eckstein
4a1dffec32 Support for stack promotion in the runtime.
NFC yet.




Swift SVN r32928
2015-10-28 00:43:45 +00:00
Michael Gottesman
e696331e06 Fix a duplicate symbol linker error by making an inline definition out of line.
Swift SVN r32801
2015-10-21 21:45:14 +00:00
Slava Pestov
76f1168adf Remove dealloc_ref's [constructor] form since its no longer needed
Swift SVN r32688
2015-10-14 22:50:09 +00:00
Slava Pestov
418ab80da4 Runtime: Implement swift_deallocPartialClassInstance()
Swift SVN r32645
2015-10-13 00:30:14 +00:00
Joe Groff
42c71b7972 Don't mangle directness into type metadata symbols.
Anywhere we can't directly address type metadata in Swift, we've found we need a function call. Directness isn't useful here.

Swift SVN r32626
2015-10-12 17:22:40 +00:00
Roman Levenstein
0f7722eec6 [runtime-lib] Any Swift mmap /vm_allocate allocations should use a custom tag.
We now have dedicated tags for Swift on Apple operating systems. They are called: VM_MEMORY_SWIFT_RUNTIME and VM_MEMORY_SWIFT_METADATA.
Let's make use of them. This would allow tools like Instruments provide a more detailed analysis and statistics.

For now, we only tag the metadata allocations, as this is the only place where we use mmap at the moment.

rdar://22376248

Swift SVN r32584
2015-10-09 22:28:41 +00:00
Joe Groff
0cd5aa8c7c Change mangling for the Swift module from 'Ss' to 's'.
'Ss' appears in manglings tens of thousands of times in the standard library and is also incredibly frequent in other modules. This alone is enough to shrink the standard library by 59KB.

Swift SVN r32409
2015-10-02 22:39:44 +00:00
Dmitri Hrybenko
153d95efc6 SwiftShims: don't redeclare libc functions
Clang importer thinks that SwiftShims is the primary module where they
live, and this confuses code completion.

rdar://22488333

Swift SVN r32218
2015-09-25 03:33:50 +00:00
Xin Tong
6fe7d89678 This is part of a series of commits to remove reference forwarding
for some of the ARC entry points. rdar://22724641. After this commit,
swift_unknownRetain will forward no reference.

Swift SVN r32083
2015-09-18 22:14:03 +00:00
Xin Tong
dca508bfbb This is part of a series of commits to remove reference forwarding for
some of the ARC entry points. rdar://22724641. After this commit,
swift_retain_noresult will be completely replaced by swift_retain.
LLVMARCOpts pass is modified NOT to rewrite swift_retain to
swift_retain_noresult which forward no reference.

Swift SVN r32082
2015-09-18 21:56:50 +00:00
Xin Tong
bc3fe169b4 This is part of a series of commits to remove reference forwarding for some of the ARC entry points. rdar://22724641.
After this commit, swift_retain will return no reference and LLVMARCContract pass is modified NOT to rewrite
swift_retain_noresult to old swift_retain which forwarded the reference.

Swift SVN r32075
2015-09-18 20:35:39 +00:00
Michael Gottesman
121ef3ef9f Revert the series of commits for removing the return value from swift_retain_noresult.
I asked that the patches were split up so I could do post commit review.

This reverts commit r32059.
This reverts commit r32058.
This reverts commit r32056.
This reverts commit r32055.

Swift SVN r32060
2015-09-18 02:31:24 +00:00
Xin Tong
36f04d1cd6 fix a build break on linux for swift_retain returns no reference.
Swift SVN r32059
2015-09-18 01:54:20 +00:00
Xin Tong
4e46dacc3d Completely replace swift_retain_noresult with swift_retain. this is part of a series of commits
to remove reference forwarding for some of the ARC entry points. rdar://22724641. After this
commit, swift_retain_noresult will be completely replaced by swift_retain and LLVMARCOpts.cpp
will no longer canonicalize swift_retain to swift_retain_noresult as now swift_retain returns no
reference.

Swift SVN r32058
2015-09-18 01:51:17 +00:00
Xin Tong
cebd28956a fix a build break on linux for swift_retain returns no reference.
Swift SVN r32056
2015-09-18 00:53:44 +00:00
Xin Tong
955e4ed652 Change swift_retain/swift_retain_n to return no value. this is part of a series of commits
to remove reference forwarding for some of the ARC entry points. rdar://22724641. After this
commit, swift_retain will be the same as swift_retain_noresult, returning no reference.
LLVMARCContract pass is also modified NOT to rewrite swift_retain_noresult to the
old swift_retain which forwards the reference.

Swift SVN r32055
2015-09-18 00:41:35 +00:00
Xin Tong
275daaf750 recommiting. r31989. Implement weak/unowned retain_n/release_n entry points. rdar://22629226
Swift SVN r31991
2015-09-16 16:01:16 +00:00
Mark Lacey
fff32395cc Revert "Implement weak/unowned retain_n/release_n entry points. rdar://22629226"
This reverts commit r31989 because it broke the build due to a faulty
assert that fires in the refcounting unit test.

Swift SVN r31990
2015-09-16 06:15:31 +00:00
Xin Tong
206673b95d Implement weak/unowned retain_n/release_n entry points. rdar://22629226
Swift SVN r31989
2015-09-16 05:35:09 +00:00
Joe Groff
dd97410f94 IRGen: Check class constraint when casting metatypes to AnyObject.Type.
Fixes rdar://problem/22643781.

Swift SVN r31971
2015-09-15 21:40:15 +00:00
Xin Tong
ba677a96b6 Implement bridgeObjectRetain_n/Release_n in swift runtime. rdar://22108790
Swift SVN r31965
2015-09-15 18:53:11 +00:00
Michael Gottesman
16016ab06e Change the leaks detector to use Lazy so that we leak it on exit rather than invoking a static destructor.
Swift SVN r31905
2015-09-11 19:43:43 +00:00
Xin Tong
64135ef2ee Implement unknownRetain_n/Release_n entry points
rdar://21945003

Swift SVN r31902
2015-09-11 19:28:18 +00:00
Joe Groff
fd820f53e6 Runtime: Factor out _dynamicCastToFunction.
NFC

Swift SVN r31895
2015-09-11 16:47:07 +00:00
Joe Groff
57ba78e4c5 Runtime: Fix goto-fail-ism in function casts.
'break' in a for loop breaks out of the loop, not the switch. Oops. Fixes rdar://problem/22576226.

Swift SVN r31888
2015-09-11 05:01:38 +00:00
Joe Groff
0bf684c30d Runtime: Fix leak in failure path for dynamicCastClassToValueViaObjCBridgeable.
Caught by the leaks runner on DollarReduce perf test. Fixes rdar://problem/22646089.

Swift SVN r31873
2015-09-11 00:05:25 +00:00
David Farler
de8c7a3a2f Provide muloti4 on all archs, not just arm64.
Although this builtin is provided by clang rt builtins,
it isn't provided by libgcc, which is the default
runtime library on Linux, even when compiling with clang.
This implementation is copied here to avoid a new dependency
on compiler-rt on Linux.

Open up the ifdef to include non-Apple (i.e. Linux) builds.

rdar://problem/22616842

Swift SVN r31848
2015-09-10 02:18:37 +00:00
Joe Groff
3ff48d95c4 Runtime: Fix memory leak when swift_dynamicCast does a copy_on_success bridging cast.
In the course of preparing the bridging object to be bridged to a Swift value, we forwarded the cast flags to _dynamicCastUnknownClass unaltered, which caused a leak for copy-on-success casts since it introduced an extra retain. Fix this by simplifying _dynamicCastUnknownClass to have no retain/release behavior of its own. Fixes rdar://problem/22587077.

Swift SVN r31841
2015-09-10 00:51:10 +00:00
Joe Groff
773eadb9f2 IRGen/Runtime: Populate the runtime protocol conformance table with relative references.
By using relative references, either directly to symbols internal to the current TU, or to the GOT entry for external symbols, we avoid unnecessary runtime relocations, and we save space on 64-bit platforms, since a single image is still <2GB in size. For the 64-bit standard library, this trades 26KB of fake-const data in __DATA,__swift1_proto for 13KB of true-const data in __TEXT,__swift2_proto. Implements rdar://problem/22334380.

Swift SVN r31555
2015-08-28 18:07:22 +00:00
Arnold Schwaighofer
eb3d5e4d4a Revert "stdlib: Move the darwin String implementation over to use the ICU library."
Revert "Add test cases to exercise the native String vs cocoa buffer String path."
Revert "stdlib: Add back a test I removed"
Revert "stdlib: Fix hasPrefix,hasSuffix tests"
Revert "stdlib: Add documentation for the cached ascii collation tables"

This reverts commit 31493, 31492, 31491, 31490, 31489.

There are linking errors in SwiftExternalProjects (we probably have to link
against libicucore somewhere).

Swift SVN r31543
2015-08-27 21:02:32 +00:00
Joe Groff
43d620c7e0 IRGen: Export direct metadata symbols at the address point of the metadata object.
This is more resilient, since we want to be able to add more information behind the address point of type objects. The start of the metadata object is now an internal "full metadata" symbol.

Note that we can't do this for known opaque metadata from the C++ runtime, since clang doesn't have a good way to emit offset symbol aliases, so for non-nominal metadata objects we still emit an adjustment inline. We also aren't able to generate references to aliases within the same module due to an MC bug with alias refs on i386 and armv7 (rdar://problem/22450593).

Swift SVN r31523
2015-08-27 05:18:38 +00:00
Joe Groff
f705c561e3 Revert "IRGen: Export direct metadata symbols at the address point of the metadata object."
This reverts commit r31515. It causes an LLVM error on the release bots.

Swift SVN r31516
2015-08-27 01:44:56 +00:00
Joe Groff
8e2ce60f5b IRGen: Export direct metadata symbols at the address point of the metadata object.
This is more resilient, since we want to be able to add more information behind the address point of type objects, and also makes IR a lot less cluttered. The start of the metadata object is now an internal "full metadata" symbol.

Note that we can't do this for known opaque metadata from the C++ runtime, since clang doesn't have a good way to emit offset symbol aliases, so for non-nominal metadata objects we still emit an adjustment inline.

Swift SVN r31515
2015-08-27 01:34:22 +00:00
Arnold Schwaighofer
2277086eb4 stdlib: Add documentation for the cached ascii collation tables
Swift SVN r31493
2015-08-26 15:14:22 +00:00
Arnold Schwaighofer
502f1e3de1 stdlib: Move the darwin String implementation over to use the ICU library.
Reapply of 31474 with a fix in _compareCocoaBuffer to use the bufferSizeRhs
variable instead of bufferSizeLhs for the right hand side buffer.

We no longer create intermediate NSString copies to compare and hash swift
Strings. Instead we call directly into the ICU library.

I measured a 1.2 to 2x improvement on dictionary benchmarks as a result of this.
The SuperChars benchmark is also about 1.2x faster because of this.

Pure ASCII comparison has gotten a little bit slower (20% on a pure comparison
micro-benchmark) because we no longer do a memcmp. Doing a memcmp on ASCII is
not the same as the default unicode collation. Instead we have to a string scan.
The default unicode collation does not order like ASCII does and ignores
characters (for example the \0 character).

rdar://18992510

Swift SVN r31489
2015-08-26 15:14:18 +00:00
Arnold Schwaighofer
2d8f29e710 Revert "stdlib: Fix hasPrefix,hasSuffix tests"
Revert "stdlib: Add back a test I removed"
Revert "Add test cases to exercise the native String vs cocoa buffer String path."
Revert "stdlib: Move the darwin String implementation over to use the ICU library."

This reverts commit r31477, r31476, r31475, r31474.

Commit r31474 broke the ASAN build.

Swift SVN r31488
2015-08-26 13:09:03 +00:00