Commit Graph

1684 Commits

Author SHA1 Message Date
Michael Gottesman
19b6de625d [capture-promotion] Change isNonEscapingUse to use a visitor. 2017-03-31 09:48:53 -07:00
Michael Gottesman
c37367284c [capture-promotion] Change recursion to use a real stack instead of function stacks. 2017-03-30 20:16:08 -07:00
Michael Gottesman
c81977454b [capture-promotion] Add debugging messages to capture promotion. 2017-03-30 17:04:10 -07:00
Michael Gottesman
3af929eafd Merge pull request #8447 from gottesmm/gardening_and_camelcasing
[gardening] camelCase helper functions correctly.
2017-03-30 16:58:11 -07:00
Michael Gottesman
65b523a115 [gardening] camelCase helper functions correctly. 2017-03-30 15:52:08 -07:00
Roman Levenstein
7887eb30a3 [sil-capture-promotion] Properly handle generic SILBoxTypes.
- Use SILFunction::getTypeLowering, because it knows how to handle generic contexts properly
- Map interface types into context
- Fix a use-after-release runtime bug, uncovered by recent Erik's changes.

Fixes rdar://31309883.
2017-03-30 14:09:54 -07:00
Erik Eckstein
e9b4db13ee Reinstate "AllocBoxToStack: Improve alloc_stack/dealloc_stack scoping"
This reverts commit c7ef60c7ed.

It also contains an additional test for the fix in StackNesting
2017-03-30 09:40:09 -07:00
Erik Eckstein
c41de405c4 fix a wrong assert in StackNesting 2017-03-30 09:33:00 -07:00
Erik Eckstein
c7ef60c7ed Revert "AllocBoxToStack: Improve alloc_stack/dealloc_stack scoping"
It broke some bots.

This reverts commit 43ddc2a643.
2017-03-30 07:59:05 -07:00
Slava Pestov
695a8d2065 Merge pull request #8407 from slavapestov/rename-everything-without-asking-permission
SIL: Terminology change: [fragile] => [serialized]
2017-03-29 20:08:15 -07:00
Erik Eckstein
43ddc2a643 AllocBoxToStack: Improve alloc_stack/dealloc_stack scoping
Instead of inserting all alloc_stack/dealloc_stack instructions at the begin/end of the function, insert them at the actual lifetime boundaries.

rdar://problem/16723128
2017-03-29 17:23:16 -07:00
Slava Pestov
8fe8b89b0f SIL: Terminology change: [fragile] => [serialized]
Also, add a third [serializable] state for functions whose bodies we
*can* serialize, but only do so if they're referenced from another
serialized function.

This will be used for bodies synthesized for imported definitions,
such as init(rawValue:), etc, and various thunks, but for now this
change is NFC.
2017-03-29 16:47:28 -07:00
Erik Eckstein
607318e0c7 Utility for correcting the nesting of stack allocation/deallocation instructions in SIL.
This is useful for optimizations (like AllocBoxToStack) which create (de-)alloc_stack instructions.
They can just insert the new instructions anywhere without worrying about nesting and correct the nesting afterwards.
2017-03-29 15:41:04 -07:00
Slava Pestov
1f260281b6 Merge pull request #8366 from brentdax/di-diagnosis-crash
[SIL][DI] Don’t crash when emitting closure errors
2017-03-28 23:58:50 -07:00
Roman Levenstein
a05cc2c8b5 Enable simple version of partial specialization by default
The simple version does not allow for partial specialization of generic parameters whose replacement types in a substitution are generic.
2017-03-28 15:56:40 -07:00
Andrew Trick
f5f5a9ac2b AddressLowering: Fix indirect concrete existential arguments. 2017-03-28 13:46:28 -07:00
Brent Royal-Gordon
c6f62b1fae [SIL][DI] Fix diagnostic bug more cleanly
No reason to call getCalledValue() twice.
2017-03-27 18:37:17 -07:00
Michael Gottesman
f301044384 [ownership-model] Teach the ownership model eliminator how to eliminate the default argument of a switch_enum and tighten up assertions in SILVerifier.
rdar://31145255
2017-03-27 16:25:37 -07:00
Brent Royal-Gordon
bf1791b492 [SIL][DI] Don’t crash when emitting closure errors
When the DI lifetime checker diagnoses an `inout`-related error, it tries to examine the function you’re calling to emit its name in the error message. Unfortunately, it implicitly assumes that `ApplyExpr::getCalledValue()` will find a `ValueDecl` to return; if the `ApplyExpr` directly calls a closure, it won’t, and so `handleInOutUse` will try to `dyn_cast` a `nullptr`. This change adds a check to avoid that.
2017-03-27 01:01:08 -07:00
John McCall
57ecaa7fae Add begin_access and end_access instructions.
NFC because we're not actually emitting them.
2017-03-26 04:37:05 -04:00
Roman Levenstein
8082e820c9 [sil-optimizer] Make compile time concatenation of constant strings work again
This guaranteed optimization got lost when a + operator for Strings was made a static method on type String.

Fixes SR-4348
2017-03-24 15:55:50 -07:00
Saleem Abdulrasool
092650cad6 Merge pull request #8276 from compnerd/vars
SILOptimizer: remove unused variable
2017-03-23 19:16:37 -07:00
Roman Levenstein
e3bc23cc09 Merge pull request #8253 from swiftix/wip-gsb-layout-constrains-fixes
[GSB] Improve handling of layout constraints
2017-03-22 17:36:05 -07:00
Roman Levenstein
4e2262944d Extend the representation of layout constraints
- Add support for _Class and _NativeClass layout constraints, which are supposed to represent T: Superclass and P: class constraints in the future.
- Use the re-factoring to also reduce the number of dynamic allocations when creating layout constraints. Simple non-parametrized layout constraints are now represented as statically allocated singletons (static members of LayoutConstraintInfo).
2017-03-22 16:37:38 -07:00
Saleem Abdulrasool
8669365feb SILOptimizer: remove unused variable
swift/lib/SILOptimizer/Utils/Generics.cpp:1429:9: warning: unused variable 'SM' [-Wunused-variable]
2017-03-22 11:46:27 -07:00
Saleem Abdulrasool
ccae6e81f8 SILOptimizer: avoid "deprecation" warnings
The `dump` method is meant for interactive use in debuggers only.  Use
the parameter form to avoid the warning.
2017-03-22 11:43:50 -07:00
Roman Levenstein
fae0628a97 Implement partial specialization which supports generic substitutions.
Use -sil-partial-specialization-with-generic-substitutions to enable the partial specialization even in cases of substitutions containing generic replacement types.
2017-03-21 08:46:40 -07:00
swift-ci
d12334301e Merge pull request #8236 from hughbe/clang-latest-error-fixes 2017-03-21 06:04:17 -07:00
Hugh Bellamy
d1849d7c28 Fix top of tree Clang compilation errors 2017-03-21 19:16:39 +07:00
Hugh Bellamy
d9879522fb Fix top of tree Clang unused lambda capture warnings 2017-03-21 19:15:08 +07:00
Slava Pestov
99da2ea244 Merge pull request #8211 from practicalswift/use-is-instead-of-getas-where-appropriate
[gardening] Use .is<T>() instead of .getAs<T>() if the result is not needed
2017-03-21 00:39:23 -07:00
Erik Eckstein
977b5c05ad Mangling: add a verifier that checks if every mangled symbol can be demangled and remangled. 2017-03-20 16:12:23 -07:00
practicalswift
83526fe224 [gardening] Use .is<T>() instead of .getAs<T>() if the result is not needed 2017-03-20 22:54:01 +01:00
Erik Eckstein
d70bfc5de2 rename namespace NewMangling -> Mangle 2017-03-20 10:09:30 -07:00
Devin Coughlin
fdd9ea6c7d SILGen: Reapply 'Add experimental TSan instrumentation for inout accesses.'
(This re-applies #7736 with an update to the
tsan-inout.swift execution test to handle configurations where
TSan's ignore_interceptors_accesses is enabled by default.)

Add SILGen instrumentation to treat inout accesses as Thread Sanitizer writes.
The goal is to catch races on inout accesses even when there is a not an
llvm-level read/write to a particular address. Ultimately
this will enable TSan to, for example, report racy writes to distinct
stored properties of a common struct as a data race.

This instrumentation is off by default. It can be enabled with the
'enable-experimental-tsan-inout-instrumentation' frontend flag.

The high-level approach is to add a SIL-level builtin that represents a call
to a TSan routine in compiler-rt. Then, when emitting an address for an LValue
as part of an inout expression, we call this builtin for each path component
that represents an LValue. I've added an 'isRValue()' method to PathComponent
that tracks whether a component represents an RValue or an LValue. Right the
only PathComponent that sometimes returns 'true' is ValueComponent().

For now, we're instrumenting only InoutExprs, but in the future it probably
makes sense to instrument all LValue accesses. In this patch I've
added a 'TSanKind' parameter to SILGenFunction::emitAddressOfLValue() and
its helpers to limit instrumentation to inout accesses. I envision that this
parameter will eventually go away.
2017-03-18 20:10:19 -07:00
Erik Eckstein
2fbbef2fb4 Mangling: drop the support of mangling a function specialization argument which is an old-mangled function 2017-03-17 16:10:36 -07:00
Erik Eckstein
1625345b90 Remove the old mangler.
NFC
2017-03-17 16:10:36 -07:00
practicalswift
26a67fe538 [gardening] Remove unused variable CanGenericSig 2017-03-17 08:19:36 +01:00
Greg Parker
c17cfb69d8 Revert "SILGen: Add experimental TSan instrumentation for inout accesses. (#7736)"
This reverts commit 52d5178a3e.
2017-03-16 21:11:58 -07:00
Devin Coughlin
52d5178a3e SILGen: Add experimental TSan instrumentation for inout accesses. (#7736)
Add SILGen instrumentation to treat inout accesses as Thread Sanitizer writes.
The goal is to catch races on inout accesses even when there is a not an
llvm-level read/write to a particular address. Ultimately
this will enable TSan to, for example, report racy writes to distinct
stored properties of a common struct as a data race.

This instrumentation is off by default. It can be enabled with the
'enable-experimental-tsan-inout-instrumentation' frontend flag.

The high-level approach is to add a SIL-level builtin that represents a call
to a TSan routine in compiler-rt. Then, when emitting an address for an LValue
as part of an inout expression, we call this builtin for each path component
that represents an LValue. I've added an 'isRValue()' method to PathComponent
that tracks whether a component represents an RValue or an LValue. Right the
only PathComponent that sometimes returns 'true' is ValueComponent().

For now, we're instrumenting only InoutExprs, but in the future it probably
makes sense to instrument all LValue accesses. In this patch I've
added a 'TSanKind' parameter to SILGenFunction::emitAddressOfLValue() and
its helpers to limit instrumentation to inout accesses. I envision that this
parameter will eventually go away.
2017-03-16 17:08:48 -07:00
swift-ci
49078dd6be Merge pull request #8114 from eeckstein/remove-conformancecollector 2017-03-15 15:23:22 -07:00
Erik Eckstein
a16beaea3c Remove the now usused ConformanceCollector utility.
It was used for dead witness table elimination. But this is done now by lazy emission in IRGen.
Also update DeadFunctionElimination.
NFC.
2017-03-15 10:18:18 -07:00
Roman Levenstein
b6c546b585 [capture-propagation] Support generic partial_apply instructions 2017-03-15 08:27:33 -07:00
Roman Levenstein
c336dafb04 [sil-generic-specializer] Provide a possibility to disable the indirect-to-direct conversions of parameters and results
This is required by the capture propagation pass. Indirect-to-direct conversions are still performed by default.
2017-03-15 08:27:21 -07:00
Greg Parker
44135ae69a Revert "[sil-capture-propagation] Switch to the new notifyAddFunction API" 2017-03-15 00:49:07 -07:00
Roman Levenstein
78f5211164 [capture-propagation] Support generic partial_apply instructions 2017-03-14 17:40:58 -07:00
Roman Levenstein
b3f558321a [sil-generic-specializer] Provide a possibility to disable the indirect-to-direct conversions of parameters and results
This is required by the capture propagation pass. Indirect-to-direct conversions are still performed by default.
2017-03-14 17:37:19 -07:00
Greg Parker
5c01a65a40 Revert "[sil-capture-propagation] Support generic partial_apply instructions" 2017-03-14 17:32:42 -07:00
Roman Levenstein
ea3d69130c Merge pull request #8081 from swiftix/wip-capture-propagation-generics
[sil-capture-propagation] Support generic partial_apply instructions
2017-03-14 17:09:12 -07:00
Joe Shajrawi
e20653ad04 Merge pull request #8090 from shajrawi/ConsumptionKind_UnconditionalCheckedCastValue
Add consumption kind to UnconditionalCheckedCastValueInst
2017-03-14 15:30:26 -07:00