eeckstein
53f772cd43
Merge pull request #77582 from eeckstein/fix-comment
...
GuaranteedPhiUpdater: fix a comment
2024-11-13 14:44:47 +01:00
Andrew Trick
eb8d9f4960
Merge pull request #77575 from atrick/preserve_extend_lifetime
...
Preserve extend_lifetime during dead instruction code elimination.
2024-11-13 05:22:30 -08:00
Erik Eckstein
2182f44d54
GuaranteedPhiUpdater: fix a comment
2024-11-13 10:49:58 +01:00
Andrew Trick
c5ab1287f3
Preserve extend_lifetime during dead instruction code elimination.
2024-11-12 23:53:56 -08:00
Erik Eckstein
51e3e5ed80
Optimizer: rename BorrowArgumentsUpdater -> GuaranteedPhiUpdater
...
NFC
2024-11-12 09:26:59 +01:00
Erik Eckstein
68d0f6120a
SIL Verifier: verify the re-borrow flags for guaranteed phi arguments
2024-11-12 09:26:59 +01:00
Erik Eckstein
8462459f07
Optimizer: re-compute the re-borrow flags of phi arguments in updateAllBorrowArguments and updateBorrowArguments
2024-11-12 09:26:59 +01:00
Erik Eckstein
e934bb1321
BorrowUtils: support guaranteed forwarding phis without forwarding instructions when computing enclosing values
...
For example:
```
%1 = begin_borrow %0
%2 = br bb1(%1, %1)
bb1(%3 : @reborrow @guaranteed, %4: @guaranteed):
// %4 is a guaranteed forwarding phi without any forwarding instructions between the begin_borrow and the incoming value.
```
Also improve the comments
2024-11-12 09:26:58 +01:00
Erik Eckstein
6b8c6a3c3b
SIL: rename updateBorrowedFrom to updateBorrowArguments
...
NFC
2024-11-12 09:26:58 +01:00
Erik Eckstein
1c5e185e89
Simplification: don't delete trivially dead borrowed-from instruction
...
A dead borrowed-from can only be removed if the argument (= operand) is also removed.
Fixes a compiler crash.
2024-11-11 14:06:16 +01:00
Arnold Schwaighofer
9093e1b0d2
Add comments to SwiftCompilerSources for shouldExpand()
2024-11-05 09:05:24 -08:00
Erik Eckstein
f0633d5638
AccessUtils: support computing "constant" access paths
...
Add `Value.constantAccessPath`. It is like `accessPath`, but ensures that the projectionPath only contains "constant" elements.
This means: if the access contains an `index_addr` projection with a non-constant index, the `projectionPath` does _not_ contain the `index_addr`.
Instead, the `base` is an `AccessBase.index` which refers to the `index_addr`.
2024-11-04 19:26:44 +01:00
Arnold Schwaighofer
787c996394
LargeTypesReg2Mem: Add a new heuristic that trys harder to keep large
...
values on the stack
This heuristic can be enabled by passing -Xfrontend
-enable-aggressive-reg2mem.
rdar://123916109
2024-10-31 13:22:06 -07:00
Erik Eckstein
b8a91c95aa
embedded: make sure to de-serialize vtable/wtable methods before trying to specialize them
...
Fixes a compiler crash.
rdar://138341211
2024-10-24 10:29:50 +02:00
Erik Eckstein
44a9919308
Revert "Revert "SIL Verifier: implement load-borrow-immutability checkin in the swift verifier""
...
This reverts commit d7810450fe .
2024-10-22 08:40:18 +02:00
Erik Eckstein
d7810450fe
Revert "SIL Verifier: implement load-borrow-immutability checkin in the swift verifier"
...
This reverts commit b01e703ff3 .
2024-10-18 11:13:33 +02:00
Erik Eckstein
709dfc2d21
MandatoryPerformanceOptimization: don't let not-inlinable functions to be inlined
...
Also refactor canInline.
Fixes a compiler crash.
rdar://137544788
2024-10-15 12:19:50 +02:00
Erik Eckstein
5c8fe55449
embedded: fix several issues with vtable specialization
...
* fix a false error if a derived class has different generic parameters than its base class
* fix a similar problem if a non-generic class derives from a generic class
* fix a compiler crash for calling a class method on a class metatype
rdar://137692055
2024-10-14 14:43:11 +02:00
Erik Eckstein
f249fa7289
OwnershipLiveness: add a flag visitInnerUses to enable constructing incomplete liveranges
...
If `visitInnerUses ` is true, it's not assumed that inner scopes are linear.
It forces to visit all interior uses if inner scopes.
2024-10-11 09:41:37 +02:00
Erik Eckstein
b01e703ff3
SIL Verifier: implement load-borrow-immutability checkin in the swift verifier
2024-10-11 09:41:37 +02:00
Erik Eckstein
f7aaf7e5a5
MandatoryPerformanceOptimizations: handle all kind of witness-table entries when specializing witness-tables
...
Support associated-type and associated-conformance entries.
This enable existentials with associated types.
2024-10-07 09:00:32 +02:00
Erik Eckstein
a67d9c5bed
embedded: Support class existentials with inherited protocols
...
For example:
```
protocol Base: AnyObject {}
protocol Derived: Base {}
class C: Derived {}
let e: Derived = C()
```
2024-10-07 08:49:56 +02:00
Erik Eckstein
25728853b8
GenericSpecialization: change how new specialized witness tables are added to MandatoryPerformanceOptimization's worklist
...
Do it by passing a closure instead of returning the new witness table.
This allows to add more than one new witness table to the worklist
2024-10-07 08:49:56 +02:00
Erik Eckstein
6fdb713e94
SwiftCompilerSources: implement WitnessTable.Entry as enum
2024-10-02 07:10:30 +02:00
Erik Eckstein
10782cf42b
SwiftCompilerSources: introduce the AST module
...
As the optimizer uses more and more AST stuff, it's now time to create an "AST" module.
Initially it defines following AST datastructures:
* declarations: `Decl` + derived classes
* `Conformance`
* `SubstitutionMap`
* `Type` and `CanonicalType`
Some of those were already defined in the SIL module and are now moved to the AST module.
This change also cleans up a few things:
* proper definition of `NominalTypeDecl`-related APIs in `SIL.Type`
* rename `ProtocolConformance` to `Conformance`
* use `AST.Type`/`AST.CanonicalType` instead of `BridgedASTType` in SIL and the Optimizer
2024-10-02 07:10:29 +02:00
Erik Eckstein
95c2c50018
DiagnosticEngine: support StringRef as diagnostic argument
2024-10-02 07:10:29 +02:00
Erik Eckstein
701a7f7275
SwiftCompilerSources: don't make anything public in the Optimizer module
...
The Optimizer module is a leave module. No other modules depend on it. Therefore nothing must be public in this module.
2024-10-02 07:10:28 +02:00
Erik Eckstein
4a1d6925e9
MandatoryPerformanceOptimizations: specialize witness tables to support class existentials with generic classes
2024-09-25 19:32:14 +02:00
Erik Eckstein
7ffd270008
embedded: move the VTableSpecializer pass into MandatoryPerformanceOptimizations
...
MandatoryPerformanceOptimizations already did most of the vtable specialization work.
So it makes sense to remove the VTableSpecializerPass completely and do everything in MandatoryPerformanceOptimizations.
2024-09-25 19:32:14 +02:00
Erik Eckstein
351d42b3b3
SIL: add some Type APIs and make Type a DiagnosticArgument
2024-09-25 19:31:40 +02:00
Erik Eckstein
7ecb407226
SwiftCompilerSources: bridge SILDeclRef
...
And move NominalTypeDecl and DeclRef from Type.swift into a new file Declarations.swift.
Also add some APIs to NominalTypeDecl
2024-09-25 19:31:40 +02:00
Erik Eckstein
0ee51e4d90
StaticInitCloner: skip begin_access instructions when cloning the initial value of a global
...
Fixes a crash when simplifying a load of an UnsafePointer-global which points to another global.
rdar://135223354
2024-09-14 14:12:36 +02:00
Andrew Trick
e4036b970b
Improve LocalVariableAccessWalker to handle switch_enum_addr.
2024-08-19 18:01:49 -07:00
Allan Shortlidge
9062271185
SILGen: Skip SIL verification and optimization if errors were emitted.
...
In lazy typechecking mode, errors in the program may only be discovered during
SILGen, which can leave the SIL in a bad state for subsequent stages of
compilation. If errors were detected, skip SIL verification and optimization to
prevent knock-on failures.
Partially reverts https://github.com/swiftlang/swift/pull/75428 , which included
a more targeted fix for one of the possible knock-on effects of bad SIL coming
out of SILGen.
Resolves rdar://132107752.
2024-08-12 15:34:59 -07:00
Erik Eckstein
52d6ae334d
DeinitDevirtualizer: don't erase the destroy instruction if the the destroyed value can't be de-virtualized
...
This can happen if the destroyed type is resilient.
Fixes a verifier crash.
2024-08-12 13:34:50 +02:00
Alexander Cyon
c18a24e499
[SwiftCompilerSources] Fix typos
2024-08-08 22:22:39 -07:00
Erik Eckstein
21fedfa61e
Verifier: fix a stupid bug in borrowed-from verification
...
... which made the verification useless.
2024-08-07 18:02:39 +02:00
Erik Eckstein
def3b6fab0
AccessUtils: recognize addressor calls of globals as a "global" access base
...
Makes e.g. alias analysis more precise in the early stage of the pass pipeline where addressor calls are not inlined, yet.
2024-08-05 17:12:46 +02:00
Erik Eckstein
ac3e2cb141
EscapeUtils: handle more use types for unchecked_addr_cast
...
Handle `apply` and `try_apply`.
Also, improve test cases
2024-08-05 17:02:07 +02:00
Andrew Trick
3e98d2e232
Fix an assert in LifetimeDependenceUtils to allow all valid cases.
2024-07-31 22:58:39 -07:00
Andrew Trick
11ba799cd4
LifetimeDependence: diagnose yield and store-to-yield.
2024-07-30 16:27:48 -07:00
Andrew Trick
11640461ef
Lifetime dependence: add inferrence for setters.
...
A nonescapable computed property should always depend on 'newValue'. We simply
infer that now. There's no way to explicitly spell the dependence.
2024-07-30 15:57:57 -07:00
Andrew Trick
ba9f12a80f
LifetimeDependenceDiagnostics support for inout reassignment.
...
This relies on parameter dependence targets.
i.e. dependsOn in parameter position instead of result position.
2024-07-30 15:57:57 -07:00
Andrew Trick
f3cf529b5d
[SwiftCompilerSources] use debugLog in diagnostic passes
2024-07-30 15:57:56 -07:00
Andrew Trick
d065a3e576
Merge pull request #75562 from atrick/nfc-lifedep
...
[nfc] LifetimeDiagnostics cleanup
2024-07-30 09:03:24 -07:00
Andrew Trick
b4cdbd276b
LifetimeDependenceUtils comment typo.
2024-07-29 23:44:02 -07:00
Andrew Trick
f6d147855f
AddressUtils comment
2024-07-29 23:44:02 -07:00
Andrew Trick
103c59b273
[SwiftCompilerSources] Add assert to Builder.init(after:)
...
This API is incorrect for terminators. Assert that it isn't used
incorrectly. Later, we should rename it.
2024-07-29 23:44:02 -07:00
Erik Eckstein
6cfec91f69
EscapeInfo: handle store_borrow
2024-07-29 17:33:45 +02:00
Erik Eckstein
c6e3f51217
EscapeInfo: handle unchecked_addr_cast
...
It's dangerous to continue walking over an `unchecked_addr_cast` which casts between two different types.
We can only do this if the result is known to be the end of the walk, i.e. the cast result is not used in a relevant way.
2024-07-29 17:33:44 +02:00