Meghana Gupta
3c56a7a88e
Bridge hasResultDependsOnSelf()
2023-12-29 02:06:15 -08:00
Meghana Gupta
334ede0b01
Bridge hasResultDependsOn()
2023-12-29 02:06:12 -08:00
Erik Eckstein
16697882e8
SimplifyBeginBorrow: fix isDestroyed(after:)
...
The previous implementation just checked that a value's only uses besides the begin_borrow were destroys. That's insufficient to say the value is destroyed after the borrow (i.e. that all its destroys are dominated by the borrow). Add the relevant dominance check.
Fixes a compiler crash
rdar://119873930
2023-12-20 11:41:40 +01:00
Andrew Trick
7dc3d72483
Merge pull request #70485 from atrick/bridge-util
...
[NFC] Bridging and utilities for SwiftCompilerSources required by lifetime dependence utilities.
2023-12-19 13:07:45 -08:00
Andrew Trick
d0b47b878c
SwiftCompilerSources: add CollectionLikeSequence.contains()
2023-12-19 02:05:16 -08:00
Andrew Trick
3f0d309ed4
SwiftCompilerSources: add Sequence.walk()
2023-12-19 02:05:16 -08:00
Andrew Trick
53d3c63ef7
[SIL] add Value.hasLifetime
2023-12-19 02:05:16 -08:00
Andrew Trick
ed53ab764a
[SIL] add Value.lifetimeEndingUses
2023-12-19 02:05:16 -08:00
Andrew Trick
2a9aef9eb8
[SIL] add BeginApplyInst.token
2023-12-19 02:05:16 -08:00
Andrew Trick
0ddf2a8514
[SIL] add BasicBlock.singleSuccessor
2023-12-19 02:05:16 -08:00
Andrew Trick
a396cc3c2a
[SIL] InstructionRange API; exitBlocks
2023-12-19 02:05:16 -08:00
Andrew Trick
c1f0f06907
[SIL] Add FunctionConvention.swift
...
Bridge information about the AST function type that does not require a
SIL function body.
Support querying the function type's ResultInfo.
2023-12-18 09:43:18 -08:00
Andrew Trick
7a18dd46d5
[SIL] Add Argument.incomingOperand(inPredecessor:)
2023-12-18 09:43:10 -08:00
Andrew Trick
3407ccd693
[SIL] bridge Argument.isReborrow
2023-12-18 09:28:23 -08:00
Andrew Trick
b637f06acd
[SIL] Bridge findPointerEscape() and fix OnoneSimplifyable
...
Do not bridge the hasPointerEscape flag until it is implemented.
2023-12-18 09:16:55 -08:00
Erik Eckstein
84e06322b9
SwiftCompilerSources: bridge_object_to_word is not a ForwardingInstruction
...
Fix this mismatch between C++ SIL and swift SIL.
Fixes a crash in begin_borrow simplification
Also add an assert to catch such cases.
rdar://119763595
2023-12-18 11:08:22 +01:00
eeckstein
4eddc1d70b
Merge pull request #70494 from eeckstein/instruction-simplifications
...
Add some instruction simplifications
2023-12-17 16:39:02 +01:00
Meghana Gupta
890ec7d855
Merge pull request #70477 from meg-gupta/fixpredmemopt
...
Use OSSALifetimeCompletion in PredictableMemOpt
2023-12-15 19:18:22 -08:00
Meghana Gupta
06f0d15c45
Use OSSALifetimeCompletion in PredictableMemOpt
...
The current algorithm to complete lifetimes is incorrect in a few cases.
Use OSSALifetimeCompletion instead.
Fixes rdar://119204768
2023-12-15 15:16:55 -08:00
Ben Barham
406d5337dc
Merge pull request #69538 from finagolfin/android
...
[android] Add more changes to build the compiler
2023-12-15 10:57:21 -08:00
Erik Eckstein
691fa9e755
SimplifyBuiltin: add constant folding of null pointer checks against string literals
...
A pointer to a string literal is never null
2023-12-15 17:11:50 +01:00
Erik Eckstein
94b6e511ba
Optimizer: add simplification for switch_enum
...
Replace
```
%1 = enum $E, #someCase, %payload
switch_enum %1, case #someCase: bb1, ...
bb1(%payloadArgument):
```
->
```
br bb1(%payload)
bb1(%payloadArgument):
```
2023-12-15 17:11:49 +01:00
Erik Eckstein
60baf111ff
Remove Type.selfOrAnyFieldHasValueDeinit
...
It's not needed anymore
2023-12-13 20:03:02 +01:00
Erik Eckstein
11c74317a9
deinit-devirtualization: completely de-compose non-copyable destroys
...
Even if the destroyed value doesn't have a deinit.
This fixes a false alarm when a non-copyable value ends its lifetime in a function with performance annotations.
rdar://117002721
2023-12-13 20:03:02 +01:00
Erik Eckstein
773d6b179d
SwiftCompilerSources: remove the redundant BridgedPassContext.Feature enum
...
And replace it with the existing BridgedFeature
2023-12-13 13:28:17 +01:00
Erik Eckstein
ae278058e6
Add an experimental pass to lower allocateVector builtins
...
By default it lowers the builtin to an `alloc_vector` with a paired `dealloc_stack`.
If the builtin appears in the initializer of a global variable and the vector elements are initialized,
a statically initialized global is created where the initializer is a `vector` instruction.
2023-12-09 18:49:58 +01:00
Erik Eckstein
ded20d3c11
SwiftCompilerSources: add Value.isValidGlobalInitValue and FullApplySite.isSemanticCall
...
`Value.isValidGlobalInitValue` was privately used by the ObjectOutliner. Make it a generally usable utility.
2023-12-09 18:49:58 +01:00
Erik Eckstein
ca20ebc158
SwiftCompilerSources: add bridging to hasFeature
2023-12-09 18:49:57 +01:00
Erik Eckstein
dd9ce40ba1
add the allocVector builtin
2023-12-09 18:49:57 +01:00
Erik Eckstein
e652f2c92e
SIL: add the alloc_vector and vector instructions
...
* `alloc_vector`: allocates an uninitialized vector of elements on the stack or in a statically initialized global
* `vector`: creates an initialized vector in a statically initialized global
2023-12-09 18:49:55 +01:00
Erik Eckstein
2a54f98c62
SimplificationPasses: add @discardableResult to runSimplification
...
NFC
2023-12-09 18:48:50 +01:00
Erik Eckstein
9514b3450c
SwiftCompilerSources: add some context APIs
...
* `Context.moduleIsSerialized`
* `Context.getBuiltinIntegerType`
* `Instruction.move(before:)`
2023-12-09 18:48:50 +01:00
Erik Eckstein
0bd6034270
SwiftCompilerSources: add some Builder APIs
...
* `createAddressToPointer`
* `createLoadBorrow`
2023-12-09 18:48:50 +01:00
Meghana Gupta
d00574369a
Merge pull request #70242 from meg-gupta/unrevertarrayfix
...
Unrevert #69450 - Add a mark_dependence while emitting SIL for uninitialized array allocation
2023-12-06 11:28:10 -08:00
Meghana Gupta
86b651330b
Revert "Merge pull request #69807 from apple/revert-69450-uninarrayfix"
...
This reverts commit cabb5e109f , reversing
changes made to 09688abb02 .
2023-12-06 08:29:50 -08:00
Erik Eckstein
bfeb2128cb
remove default value for the keepUnique argument of Builder.createEndCOWMutation
...
This avoids bugs because the default value false is sometimes not the right choice.
NFC
2023-12-06 15:40:08 +01:00
Erik Eckstein
c829d5bd77
SimplifyBeginCOWMutation: don't eliminate end_cow_mutation instructions with the [keep_unique] flag
...
This flag is important for following optimizations. Therefore such `end_cow_mutation` instructions must not be removed.
Also, keep the flag in a SILCombine transformation.
rdar://119178823
2023-12-06 08:59:58 +01:00
Meghana Gupta
956acc1560
Merge pull request #70243 from meg-gupta/enableedgecase
...
Handle `unchecked_ref_cast` in ObjectOutliner
2023-12-05 23:46:55 -08:00
Meghana Gupta
a228a8859a
Handle unchecked_ref_cast in ObjectOutliner
2023-12-05 13:06:36 -08:00
eeckstein
10ff55b2b3
Merge pull request #70155 from eeckstein/refactoring
...
MemoryLifetimeVerifier: use CalleeCache instead of AliasAnalysis
2023-12-04 08:53:59 +01:00
Erik Eckstein
0897d8a720
MemoryLifetimeVerifier: use CalleeCache instead of AliasAnalysis
...
To verify if a function may read from an indirect argument, don't use AliasAnalysis.
Instead use the CalleeCache to get the list of callees of an apply instruction.
Then use a simple call-back into the swift Function to check if a callee has any relevant memory effect set.
This avoids a dependency from SIL to the Optimizer.
It fixes a linker error when building some unit tests in debug.
2023-12-01 19:20:18 +01:00
Erik Eckstein
80ace58104
SwiftCompilerSources: split SIL/Utils.swift into multiple files
2023-12-01 19:20:13 +01:00
Erik Eckstein
ec4c815506
SwiftCompilerSources: move WalkUtils and AccessUtils from the Optimizer module to the SIL module
...
Those utilities are conceptually part of the SIL definition.
2023-12-01 19:20:13 +01:00
zoecarver
69498e2f2e
[opt] Add three new perf annotations: @_noRuntime, @_noExistential, and @_noObjCBridging.
2023-12-01 09:13:24 -07:00
Erik Eckstein
285c60d959
deinit-devirtualization: correctly handle drop_deinit for address types
...
Make it clear that drop_deinit cannot be used to prevent a deinit called from a destroy_addr.
This is more a refactoring and clarification than a bug fix, because a destroy_addr cannot have a drop_deinit as operand, anyway.
2023-11-30 14:33:02 +01:00
Erik Eckstein
6aaf2005d3
SwiftCompilerSources: remove the BeginBorrowInst.endBorrows API
...
Using this API almost certainly indicates a bug, because it neglects re-borrows.
2023-11-27 16:20:47 +01:00
Erik Eckstein
3ffd4fe552
LetPropertyLowering: handle store_borrow and re-borrows
...
Handling of re-borrows is only done for completeness. Currently they don't occur for root-selfs at this stage in SIL.
2023-11-27 16:20:47 +01:00
Erik Eckstein
9eb5da4a0f
SwiftCompilerSources: add the InstructionRange.insert(borrowScopeOf:) utility
...
Adds the instruction range of a borrow-scope by transitively visiting all (potential) re-borrows.
2023-11-27 16:20:47 +01:00
Erik Eckstein
e4d227a5fb
SwiftCompilerSources: add StoreBorrowInst and BorrowIntroducingInstruction
...
`BorrowIntroducingInstruction` is a protocol to which all instructions conform which start a borrow-scope which must be ended by `EndBorrowInst` instructions: `begin_borrow`, `load_borrow` and `store_borrow`
2023-11-27 16:20:47 +01:00
eeckstein
67ebbee39e
Merge pull request #69955 from eeckstein/deinit-devirtualizer
...
Optimizer: de-virtualize deinits of non-copyable types
2023-11-27 12:41:49 +01:00