Commit Graph

9332 Commits

Author SHA1 Message Date
Michael Gottesman
e4f365516d [sil] Also give Placeholder a parent SILFunction. 2024-02-27 17:15:49 -08:00
Joe Groff
fe7049ed13 SIL: More accurate for type lowering whether a type is trivial based on conditional Copyable requirements.
We want a conditionally-copyable type to still be classified as trivial in cases
where it's bitwise-copyable, has a trivial deinit, and is Copyable. The previous
implementation here only checked at the declaration level whether a type was
Copyable or not; get a more accurate answer by consulting the combination
of information in the substituted type and abstraction pattern we have
available during type lowering so that we classify definitely-copyable substitutions
of a conditionally-copyable type as trivial. Should fix rdar://123654553 and
rdar://123658878.
2024-02-27 15:01:20 -08:00
Michael Gottesman
ac08efdab4 [sil] Add a SILVerifier check that all SILUndef's parent function back pointer contains the SILFunction that maps to it. 2024-02-27 13:14:48 -08:00
Michael Gottesman
34f87eb477 [sil] Make notifyMovedInstruction rewire the undef of values. 2024-02-27 13:14:48 -08:00
Michael Gottesman
11f0ff6e32 [sil] Ensure that all SILValues have a parent function by making it so that SILUndef is uniqued at the function instead of module level.
For years, optimizer engineers have been hitting a common bug caused by passes
assuming all SILValues have a parent function only to be surprised by SILUndef.
Generally we see SILUndef not that often so we see this come up later in
testing. This patch eliminates that problem by making SILUndef uniqued at the
function level instead of the module level. This ensures that it makes sense for
SILUndef to have a parent function, eliminating this possibility since we can
define an API to get its parent function.

rdar://123484595
2024-02-27 13:14:47 -08:00
John McCall
7b3415aa23 Properly erase closure isolation to @isolated(any).
We do this by pushing the conversion down to the emission of the
closure expression, then teaching closure emission to apply the isolation
to the closure.  Ideally, we combine the isolation along with the rest of
the conversion peephole, but if necessary, we make sure we emit the
isolation.
2024-02-26 22:50:58 -05:00
Andrew Trick
b0f3338d25 Merge pull request #71826 from atrick/forwarding-utils
SwiftCompilerSources: support for ForwardingInstructions, ConversionInstructions, OwnershipTransitionInstruction
2024-02-26 05:30:50 -08:00
Andrew Trick
a048455ad4 Fix MarkUnresolvedReferenceBindingInst handling
It should be treated as a marker instruction. This looks like a mistake.
2024-02-26 00:12:07 -08:00
Ben Barham
1306f2b32a Merge pull request #71863 from bnbarham/remove-makearrayref
Use the new template deduction guides rather than `makeArrayRef`
2024-02-25 21:06:51 -08:00
Andrew Trick
a3cbc28078 SwiftCompilerSources: Add enum BeginAccess.AccessKind
So we can switch over it.
2024-02-25 10:22:06 -08:00
Slava Pestov
6ac91cde5d Merge pull request #71821 from slavapestov/inheritance-clause-fixes
Refactor protocol inheritance clauses and existential layout for non-copyable generics
2024-02-24 11:58:03 -05:00
Slava Pestov
0e31d41072 AST: Move GenericSignature::typeErased() to SIL
This is used by the specializer and belongs at the SIL level.
2024-02-24 07:25:59 -05:00
Ben Barham
f292ec9784 Use the new template deduction guides rather than makeArrayRef
LLVM has removed `make*ArrayRef`, migrate all references to their
constructor equivalent.
2024-02-23 20:04:51 -08:00
John McCall
b4a5ad2f4d Merge pull request #71833 from rjmccall/function-subtype-peephole-preparation
Propagate function subtype conversion information down to closure emission
2024-02-23 21:42:59 -05:00
Meghana Gupta
c901f97d8f Update visitRecursivelyLifetimeEndingUses for users with multiple results 2024-02-23 15:29:06 -08:00
John McCall
5c2cd18a5b Teach SILGen to try to peephole a function conversion into the emission of
a closure expression, then don't actually do it.  The long term plan is
to actually do this, which should just be a matter of taking some of the
code out of reabstraction thunk emission and using it in prolog/epilog/return
emission.  In the short term, the goal is just to get the conversion
information down to the closure emitter so that we can see that we're
erasing into an `@isolated(any)` type and then actually erase the
closure's isolation properly instead of relying on type-based erasure,
which can't handle parameter/capture isolation correctly.
2024-02-23 02:59:39 -05:00
Pavel Yaskevich
f9ec3b1d7e Merge pull request #71796 from xedin/make-dist-new-requirements-conditionally-available
[Distributed] Make new protocol requirements conditionally available
2024-02-22 15:18:52 -08:00
Joe Groff
161183cbc4 Merge pull request #71803 from jckarter/begin-borrow-fixed-switch-subject
SIL: Enclose switch subjects in a new begin_borrow [fixed] variant.
2024-02-22 14:45:17 -08:00
Erik Eckstein
3488cd364f SIL: remove instruction leaks checking
It's not thread safe and can cause false alarms in case multiple modules exist in different threads. E.g. when building swiftmodules from interfaces.
The leaking check is not important anymore because the builder APIs enforce that instructions are not leaking.
I.e. it's not possible to create an instruction without inserting it into a basic block. Also, it's not possible to remove an instruction from a block without deleting it.

rdar://122169263
2024-02-22 14:09:11 +01:00
Erik Eckstein
c996601f97 SIL: object instruction is not a forwarding instruction
Because it can only appear in the initializer list of a global variable.
2024-02-22 07:12:10 +01:00
Erik Eckstein
68cc6c8780 SwiftCompilerSources: add all missing instruction classes
And require that all new instructions must be added and registered in SwiftCompilerSources as well.
2024-02-22 07:12:10 +01:00
Joe Groff
d75a62ce64 SIL: Enclose switch subjects in a new begin_borrow [fixed] variant.
We want to preserve the borrow scope during switch dispatch so that move-only
checking doesn't try to analyze destructures or consumes out of it. SILGen
should mark anywhere that's a potential possibility with its own marker so that
it gets borrow checked independently.
2024-02-21 20:41:20 -08:00
Ben Barham
5637284e48 Merge pull request #71368 from bnbarham/std-optional-all-the-things
Migrate llvm::Optional to std::optional
2024-02-21 16:54:00 -08:00
Pavel Yaskevich
39b81ac783 [AST] Handle generic actor system when trying to produce a ref to decodeNextArgument 2024-02-21 13:29:47 -08:00
Pavel Yaskevich
65d164a9c3 Revert "[SIL] Distributed: Remove logic related to ad-hoc requirements from SILFunction"
This reverts commit 1909b12370.
2024-02-21 13:29:47 -08:00
nate-chandler
b719a6aac1 Merge pull request #71783 from nate-chandler/nfc/20240221/1
[NFC] Removed non-verifier uses of MemoryLocations.
2024-02-21 12:44:10 -08:00
Ben Barham
ef8825bfe6 Migrate llvm::Optional to std::optional
LLVM has removed llvm::Optional, move over to std::optional. Also
clang-format to fix up all the renamed #includes.
2024-02-21 11:20:06 -08:00
John McCall
68806b4ff5 Merge branch 'main' into isolated-any-silgen 2024-02-20 12:54:12 -05:00
John McCall
868fc6ad46 Basic SILGen for @isolated(any).
The main piece that's still missing here is support for closures;
they actually mostly work, but they infer the wrong isolation for
actor-isolated closures (it's not expressed in the type, so obviously
they're non-isolated), so it's not really functional.  We also have
a significant problem where reabstraction thunks collide incorrectly
because we don't mangle (or represent!) formal isolation into
SILFunctionType; that's another follow-up.  Otherwise, I think SILGen
is working.
2024-02-19 21:21:03 -05:00
Joe Groff
01405ba2e8 Fixes for compound payloads in borrowing switches.
Fill in a missing path for destructuring loadable elements from
address-only tuples in a borrowing context. Enclose projections in their
own separate accesses so that they are analyzed independently by the
move checker.
2024-02-19 17:37:34 -08:00
Nate Chandler
600164257a [NFC] Moved SmallBitVector dumping to Basic.
Moved out of MemoryLocations.h and merged the implementations of <<,
keeping the version from MemoryLocations with its brackets and commas
available via a flag but defaulting the implementation previously in the
header.
2024-02-19 11:41:38 -08:00
eeckstein
2294d9f170 Merge pull request #71650 from eeckstein/deinit-perf-error
PerformanceDiagnostics: print an error in embedded swift if a value type deinit cannot be devirtualized
2024-02-15 21:25:43 +01:00
nate-chandler
21eaaaa00a Merge pull request #71632 from nate-chandler/bitwise-copyable/dont-infer-package
[BitwiseCopyable] Don't infer for packages types.
2024-02-15 06:39:45 -08:00
Erik Eckstein
171cca4ec7 PerformanceDiagnostics: print an error in embedded swift if a value type deinit cannot be devirtualized
Not de-virtualized value type deinits can require metatype in case the deinit needs to be called via the value witness table.
Usually this does not happen because deinits are mandatory de-virtualized. But it can show up if e.g. wrong build options are used.

rdar://122651706
2024-02-15 14:01:45 +01:00
Michael Gottesman
23ab974574 Merge pull request #71567 from gottesmm/transferring-param
[transferring] Implement transferring result and clean up transferring param support by making transferring a bit on param instead of a ParamSpecifier.
2024-02-14 17:54:48 -08:00
Nate Chandler
b4323c8831 [TypeLowering] Loosen assertion. 2024-02-14 16:35:55 -08:00
Nate Chandler
50deb13747 [TypeLowering] Loosen assertion.
Types appearing in the context of variadic generics may be trivial but
not conform to BitwiseCopyable.
2024-02-14 16:35:55 -08:00
Nate Chandler
8621742fed [BitwiseCopyable] Don't infer for packages types.
Like public and @usableFromInline types, package types too are exported.
In the case of a module built with library evolution, they may cease to
conform in the future.  Apply the same rule regardless of that build
configuration.
2024-02-14 16:35:55 -08:00
Michael Gottesman
f3edb5730a [transferring] Add support for transferring results.
rdar://121324697
2024-02-14 14:39:02 -08:00
Nate Chandler
427d9cbcba [TypeLowering] Loosen assertion. 2024-02-14 09:57:43 -08:00
Nate Chandler
10dd58152b NFC: [TypeLowering] Add flag to skip verify.
To allow skipping it when verification has a false positive.
2024-02-14 09:57:43 -08:00
Nate Chandler
187f434798 [BitwiseCopyable] Uniform inference for non-frozen
Don't key inference behavior off of library evolution mode.
2024-02-14 09:57:43 -08:00
Nate Chandler
3b0a13a1fd [BitwiseCopyable] Don't verify for interfaces.
Modules built without the feature enabled will have swiftinterfaces
whose types don't conform to the protocol.
2024-02-14 08:20:16 -08:00
Erik Eckstein
6e8b80c791 SIL: add printing and parsing support for specialized vtables
If the vtable refers to a specialized class, a SIL type specifies the bound generic class type:
```
  sil_vtable $G<Int> {
    // ...
  }
```
2024-02-14 09:51:36 +01:00
John McCall
b23bc82cdb Merge pull request #71574 from rjmccall/isolation-any-sil-irgen
SIL and IRGen support for `@isolated(any)` function types
2024-02-13 11:57:16 -05:00
Doug Gregor
eeeb8c3f18 Merge pull request #71577 from DougGregor/silgen-no-peeping-typed-throws-closures
[SILGen] Don't peephole closures with abstraction differences in the thrown error
2024-02-13 08:53:45 -08:00
Joe Groff
2170b4e725 Merge pull request #71489 from jckarter/borrowing-switch-8
MoveOnlyAddressUtils: Fixes for borrowing switch over address-only types.
2024-02-13 07:51:40 -08:00
John McCall
d5142668f4 SIL and IRGen support for @isolated(any). SILGen to come. 2024-02-13 03:04:13 -05:00
Pavel Yaskevich
db020c1486 Merge pull request #71435 from xedin/fix-need-for-adhoc-distributed-requirements
[Distributed] Re-implement ad-hoc requirements into dynamic witness table lookup for `SerializationRequirement` conformance
2024-02-13 00:02:05 -08:00
Doug Gregor
3edbb06632 [SILGen] Don't peephole closures with abstraction differences in the thrown error
The prolog and epilog code in SILGen is not set up to deal with
abstraction differences in the thrown error type of closures, so disable
the peephole optimization for closure literals.

Fixes https://github.com/apple/swift/issues/71401 / rdar://122366566,
which I've stared at for waaaaay too many hours.
2024-02-12 23:15:07 -08:00