Commit Graph

9293 Commits

Author SHA1 Message Date
Doug Gregor
51eed19d4b [Typed throws] Type system support for typed throws.
Add the thrown type into the AST representation of function types,
mapping from function type representations and declarations into the
appropriate thrown type. Add tests for serialization, printing, and
basic equivalence of function types that have thrown errors.
2023-09-29 10:51:53 -07:00
Kuba Mracek
f34bef89bf [embedded] Relax getOrCreateFunction assert instead of changing serialization rules 2023-09-29 08:57:19 -07:00
Nate Chandler
dab8c146a6 [SwiftCompilerSources] Bridged in-IR testing.
Added the bridging types involved and the basic functionality.
2023-09-28 11:33:50 -07:00
swift-ci
ddbe38ec7b Merge remote-tracking branch 'origin/main' into rebranch 2023-09-28 09:38:05 -07:00
Yuta Saito
8cfcc245b5 Merge pull request #68524 from kateinoigakukun/katei/expose-wasm-sym
[wasm] Add `@_expose(wasm)` attribute for top-level functions
2023-09-28 09:17:48 -07:00
Andrew Trick
a5d8aafb23 SwiftCompilerSources: Replace BlockArgument with Phi and TermResult.
All SILArgument types are "block arguments". There are three kinds:
1. Function arguments
2. Phis
3. Terminator results

In every situation where the source of the block argument matters, we
need to distinguish between these three. Accidentally failing to
handle one of the cases is an perpetual source of compiler
bugs. Attempting to handle both phis and terminator results uniformly
is *always* a bug, especially once OSSA has phi flags. Even when all
cases are handled correctly, the code that deals with data flow across
blocks is incomprehensible without giving each case a type. This
continues to be a massive waste of time literally every time I review
code that involves cross-block control flow.

Unfortunately, we don't have these C++ types yet (nothing big is
blocking that, it just wasn't done). That's manageable because we can
use wrapper types on the Swift side for now. Wrapper types don't
create any more complexity than protocols, but they do sacrifice some
usability in switch cases.

There is no reason for a BlockArgument type. First, a function
argument is a block argument just as much as any other. BlockArgument
provides no useful information beyond Argument. And it is nearly
always a mistake to care about whether a value is a function argument
and not care whether it is a phi or terminator result.
2023-09-27 18:47:46 -07:00
swift-ci
7fc36edb98 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-27 09:34:12 -07:00
Andrew Trick
cae97a8426 Merge pull request #68792 from atrick/fix-forwarding-operand
Fix ForwardingInstruction::getSingleForwardingOperand
2023-09-27 08:55:19 -07:00
Andrew Trick
aa1c976bfa Add TuplePackExtractInst to hasSameRepresentation
To allow it to forward guaranteed values.
2023-09-26 22:14:33 -07:00
Nate Chandler
05bec97203 [FSPrunedLiveness] Add extendToNonUse.
And use it in lifetime maximization.

The preexisting member function updateForUse has been updated to match
PrunedLiveness and gravitate towards lifetimeEnding=false.

For a fixed instruction and bit, if called with lifetimeEnding=true and
then lifetimeEnding=false, the lifetime-ending-ness of the instruction
at the bit will be false; and if it is again called with
lifetimeEnding=true, the lifetime-ending-ness of the instruction at the
bit will remain false.

In contrast the new member function extendToUse does not alter the
lifetime-ending-ness if it is already set.  If it is unset, the function
sets the bit to lifetimeEnding=false.
2023-09-26 11:45:23 -07:00
Nate Chandler
c1716c9dfe [PrunedLiveness] Add extendToNonUse.
And use it in lifetime extension/maximization.

The new member function differs from updateForUse in that it doesn't
overwrite the old value for lifetime ending associated with the
instruction (calling updateForUse with lifetimeEnding=false overwrites
the flag set by a previous call with lifetimeEnding=true because if an
instruction both consumes and doesn't consume a copy-extended value, the
value must be live after the instruction).
2023-09-26 11:45:22 -07:00
Yuta Saito
ac440c336a [wasm] Accept multiple @_expose on a single function decl
But multiple @_expose with the same exposure kind are still invalid.
2023-09-26 14:13:43 +00:00
Yuta Saito
6d378a3ec3 [wasm] add @_expose(wasm) attribute support
This attribute instructs the compiler that this function declaration
should be "export"ed from this .wasm module. It's equivalent of Clang's
`__attribute__((export_name("name")))`
2023-09-26 14:13:33 +00:00
Nate Chandler
7856842d07 [Test] Renamed with underscores.
Hyphens are not typically used in identifiers and make it a bit trickier
to search.
2023-09-25 18:49:29 -07:00
swift-ci
265a15fcd2 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-25 11:15:32 -07:00
Kuba (Brecka) Mracek
5d5944584a Merge pull request #68662 from kubamracek/embedded-globals-modules
[embedded] Deserialize and import global variables in embedded Swift mode
2023-09-25 11:08:33 -07:00
swift-ci
fe5bd75e75 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-25 07:54:10 -07:00
nate-chandler
9c53465948 Merge pull request #68714 from nate-chandler/sil/test/rename-specify_test-inst
[SIL] Renamed specify_test instruction.
2023-09-25 07:37:49 -07:00
Kuba Mracek
4709bdcca6 [embedded] Deserialize and import global variables in embedded Swift mode 2023-09-24 17:34:03 -07:00
swift-ci
fc3a226c60 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-24 16:13:49 -07:00
Kuba Mracek
8f335b1a28 [embedded] Allow serialized internal/private functions in embedded mode 2023-09-23 14:00:31 -07:00
Nate Chandler
28f742e248 [SIL] Renamed specify_test instruction.
Changed from test_specification which is too many characters and
insufficiently active.
2023-09-22 16:09:38 -07:00
swift-ci
e8ece386ee Merge remote-tracking branch 'origin/main' into rebranch 2023-09-22 14:00:04 -07:00
nate-chandler
ea0e5c3a3e Merge pull request #68702 from nate-chandler/sil/test/parse-value-literals
[SIL] Allow specify_test instructions to take value literals.
2023-09-22 13:42:35 -07:00
Nate Chandler
fe8cc46abf [SIL] Allow test_spec insts to take values.
Tests can now say %foo to refer to a value in addition to @instruction
or @argument or similar.
2023-09-22 09:10:39 -07:00
swift-ci
764fecbc01 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-21 20:34:25 -07:00
nate-chandler
397a25c377 Merge pull request #68608 from nate-chandler/rdar115468707
[CanonicalizeOSSALifetime] Extend lexical lifetimes to unreachables.
2023-09-21 20:25:46 -07:00
swift-ci
c55b21f2b5 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-21 16:10:25 -07:00
Kavon Farvardin
d0a9e78da0 [Mangling] Support function specializations that remove async 2023-09-21 12:20:24 -07:00
swift-ci
6637cc5a27 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-21 12:13:50 -07:00
Kavon Farvardin
a69bcf8a61 Merge pull request #67930 from kavon/copyable-requirement
Copyable as a Requirement Against the Machine
2023-09-21 11:49:23 -07:00
Evan Wilde
b6ce82ff79 Merge pull request #68656 from apple/revert-68558-keep-funcs-for-debugger
Revert "Keep certain function that are potentially used in the debugger"
2023-09-20 20:11:12 -07:00
swift-ci
ac12fa71dc Merge remote-tracking branch 'origin/main' into rebranch 2023-09-20 17:33:50 -07:00
swift-ci
71cb84b24a Merge pull request #68657 from nate-chandler/nfc/20230920/1/add-null-check
[SILVerifier] Add null check for dead end blocks.
2023-09-20 17:18:49 -07:00
Kavon Farvardin
f1142d5da4 [nfc] rename or eliminate isPureMoveOnly APIs
I think from SIL's perspective, it should only worry about whether the
type is move-only. That includes MoveOnlyWrapped SILTypes and regular
types that cannot be copied.

Most of the code querying `SILType::isPureMoveOnly` is in SILGen, where
it's very likely that the original AST type is sitting around already.
In such cases, I think it's fine to ask the AST type if it is
noncopyable. The clarity of only asking the ASTType if it's noncopyable
is beneficial, I think.
2023-09-20 15:23:17 -07:00
swift-ci
1b6470ca9c Merge remote-tracking branch 'origin/main' into rebranch 2023-09-20 15:07:15 -07:00
Nate Chandler
43d5743875 [OSSALifeComp] NFC: Extracted visit unreachable.
Extracted the new visitUnreachableLifetimeEnds static member of
OSSALifetimeCompletion from the preexisting
endLifetimeAtUnreachableBlocks which now calls through the former.
2023-09-20 13:40:08 -07:00
Nate Chandler
1e5a7aab9a [SILVerifier] Added null check.
The deadEndBlocks field isn't always present so first check that it's
defined.
2023-09-20 13:38:06 -07:00
Evan Wilde
ae6057984f Revert "Keep certain function that are potentially used in the debugger" 2023-09-20 13:06:12 -07:00
Yuta Saito
c5314bd3af Centralize KeyPath accessor calling convention logic to IRGen
KeyPath's getter/setter/hash/equals functions have their own calling
convention, which receives generic arguments and embedded indices from a
given KeyPath argument buffer.
The convention was previously implemented by:
1. Accepting an argument buffer as an UnsafeRawPointer and casting it to
   indices tuple pointer in SIL.
2. Bind generic arguments info from the given argument buffer while emitting
   prologue in IRGen by creating a new forwarding thunk.

This 2-phase lowering approach was not ideal, as it blocked KeyPath
projection optimization [^1], and also required having a target arch
specific signature lowering logic in SIL-level [^2].

This patch centralizes the KeyPath accessor calling convention logic to
IRGen, by introducing `@convention(keypath_accessor_XXX)` convention in
SIL and lowering it in IRGen. This change unblocks the KeyPath projection
optimization while capturing subscript indices, and also makes it easier
to support WebAssembly target.

[^1]: https://github.com/apple/swift/pull/28799
[^2]: https://forums.swift.org/t/wasm-support/16087/21
2023-09-20 11:25:39 -07:00
Augusto Noronha
3bc42c865e Merge pull request #68558 from augusto2112/keep-funcs-for-debugger
Keep certain function that are potentially used in the debugger
2023-09-20 08:23:46 -07:00
swift-ci
c2d0ed607a Merge remote-tracking branch 'origin/main' into rebranch 2023-09-19 11:33:34 -07:00
Erik Eckstein
480d3f490e SIL Optimizer: handle begin_dealloc_ref and end_init_let_ref in various optimizations 2023-09-19 15:10:30 +02:00
Erik Eckstein
f0b811c45f SIL: add the end_init_let_ref instruction
This instructions marks the point where all let-fields of a class are initialized.
This is important to ensure the correctness of ``ref_element_addr [immutable]`` for let-fields,
because in the initializer of a class, its let-fields are not immutable, yet.
2023-09-19 15:10:30 +02:00
Erik Eckstein
e5eb15dcbe Swift SIL: replace the set_deallocating instruction with begin_dealloc_ref
Codegen is the same, but `begin_dealloc_ref` consumes the operand and produces a new SSA value.
This cleanly splits the liferange to the region before and within the destructor of a class.
2023-09-19 15:10:30 +02:00
swift-ci
89b27b5068 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-18 14:53:34 -07:00
Allan Shortlidge
fa3ba92780 Merge pull request #68555 from tshortli/requestify-specialize-attr-generic-signature-request
AST: Requestify generic signature building for @_specialized attributes
2023-09-18 14:40:02 -07:00
Augusto Noronha
e06ba23c75 Keep certain function that are potentially used in the debugger
Currently, when compiling with no optimizations on, we still delete
functions that are sometimes used in the debugger. For example, users
might want to call functions which are unused, or compiler generated
setters/getters.

rdar://101046198
2023-09-18 13:51:56 -07:00
swift-ci
800adb3c79 Merge remote-tracking branch 'origin/main' into rebranch 2023-09-16 08:33:54 -07:00
Allan Shortlidge
497034ef64 AST: Requestify generic signature building for @_specialized attributes.
In order to support lazy typechecking during module emission for modules
containing specialized functions, the computation of generic signatures for
`@_specialized` attributes must be requestified.

Resolves rdar://115569606
2023-09-16 00:02:33 -07:00