Erik Eckstein
969a788e7f
SIL: add the Builtin.name getter and Builtin.arguments
2024-12-21 08:28:21 +01:00
Erik Eckstein
1856d4e94c
SIL: add APIs to set and get the alignment of a pointer_to_address instruction.
...
Also add a getter for the `isInvariant` property.
2024-12-21 08:28:21 +01:00
Erik Eckstein
2d10da001a
SIL: add some Builder-create functions
2024-12-21 08:28:20 +01:00
Erik Eckstein
4fdf16de1b
SIL: add CanonicalType.canBeClass
...
And move the implementation of `SIL.Type.canBeClass` to the AST Type. The SIL Type just calls the AST Type implementation.
Also rename `SIL.Type.canonicalASTType` -> `SIL.Type.astType`.
2024-12-19 20:53:46 +01:00
Erik Eckstein
1545e01ab5
SIL: Let SubstitutionMap.replacementTypes return AST types rather than optional SIL types.
...
This is what the C++ SubstitutionMap does. One has to use `Type.loweredType` to get from the AST type to the SIL type.
2024-12-19 20:53:45 +01:00
Erik Eckstein
1f4332ad39
SIL: add AST.Type.loweredType and CanonicalType.loweredType
2024-12-19 20:53:45 +01:00
Erik Eckstein
50bf66e217
SIL: replace CanonicalType.objectType and CanonicalType.addressType with silType
...
`SIL.Type` itself has `objectType` and `addressType` to convert between both variants.
2024-12-19 20:53:45 +01:00
Andrew Trick
7a11d5a3f1
SwiftCompilerSources: bridge Function.sourceFileKind.
2024-12-18 16:56:45 -08:00
Erik Eckstein
c5efad1e2d
SIL: make isLexical a protocol requirement of Value
...
This avoids the need for checking if a value is a `move_value`, `begin_borrow` or function argument to get the is-lexical information.
2024-12-10 16:28:11 +01:00
Andrew Trick
c05044c65c
Add MarkDependenceInst.settleToEscaping
...
This allows emitting mark_dependence [unresolved] in some cases even if the
diagnostics can't currently handle them.
2024-11-18 22:02:44 -08:00
Andrew Trick
3e26cf81d0
SwiftCompilerSources: bridge createEndApply and createAbortApply.
2024-11-18 01:37:00 -08:00
Erik Eckstein
f7d49a9680
SIL: add the Argument.set(reborrow:) and Argument.hasBorrowEndingUse APIs
2024-11-12 09:26:58 +01:00
Erik Eckstein
ed67e36ce5
bridging: reduce #ifdef USED_IN_CPP_SOURCE in bridging headers
...
Especially avoid any constructors in `#ifdef USED_IN_CPP_SOURCE` blocks, because this breaks Windows ARM64.
2024-10-25 09:47:56 +02:00
Erik Eckstein
e0533e6125
SIL: add an API to replace all entries of a VTable
...
* add `ModulePassContext.replaceVTableEntries()`
* add `ModulePassContext.notifyFunctionTablesChanged()`
2024-10-14 14:43:11 +02:00
Erik Eckstein
62317d86a6
SwiftCompilerSources: add the LoadBorrowInst.isUnchecked API
2024-10-11 09:41:36 +02:00
Erik Eckstein
6bf7cc8f2f
Swift SIL: add flag parameters to Builder.createBeginBorrow
2024-10-11 09:41:36 +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
3775a3548e
ModulePassContext: add some utility functions
...
* `specialize(function:)`
* `deserializeCallees(of:)`
* `createWitnessTable()`
* `createSpecializedVTable`
* `Function.set(isSerialized:)`
2024-09-25 19:32:08 +02:00
Erik Eckstein
46d3909471
SIL: improve VTable and WitnessTable
...
* add missing APIs
* bridge the entries as values and not as pointers
* add lookup functions in `Context`
* make WitnessTable.Entry.Kind enum cases lower case
2024-09-25 19:32:07 +02:00
Erik Eckstein
c6f384c3b1
SIL: add some APIs to SubstitutionMap
2024-09-25 19:31:40 +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
f3a9b08e7a
SwiftCompilerSources: bridged ProtocolConformance
...
And use that in some Builder APIs
2024-09-25 19:31:40 +02:00
Hiroshi Yamauchi
3912ead9ee
Merge pull request #76675 from hjyamauchi/issue74866-4
...
SILBridging: remove some #ifdef USED_IN_CPP_SOURCE
2024-09-25 10:02:06 -07:00
Hiroshi Yamauchi
89a7dff931
SILBridging: remove some #ifdef USED_IN_CPP_SOURCE
...
Co-authored with @eeckstein
2024-09-24 09:47:14 -07:00
Kuba Mracek
d1e3828281
Remove some unnecessary SILBridging code
2024-09-24 08:32:11 -07:00
Kuba Mracek
c7a5569c4f
[embedded] Add support for ManagedBuffer to Embedded Swift
...
This makes ManagedBuffer available and usable in Embedded Swift, by:
- Removing an internal consistency check from ManagedBuffer that relies on metatypes.
- Making the .create() API transparent (to hoist the metatype to the callee).
- Adding a AllocRefDynamicInst simplification to convert `alloc_ref_dynamic` to `alloc_ref`, which removes a metatype use.
- Adding tests for the above.
2024-09-23 13:32:50 -07:00
Allan Shortlidge
02dbb96b94
AST: Rename AvailabilityContext to AvailabilityRange.
...
The generality of the `AvailabilityContext` name made it seem like it
encapsulates more than it does. Really it just augments `VersionRange` with
additional set algebra operations that are useful for availability
computations. The `AvailabilityContext` name should be reserved for something
pulls together more than just a single version.
2024-09-13 16:25:18 -07:00
Alejandro Alonso
b35ac50d3c
Optimize TypeValueInst in Swift
2024-09-04 15:13:48 -07:00
Erik Eckstein
c96b196ffa
SwiftCompilerSources: bridge SILLinkage
...
Make SILLInkage available in SIL as `SIL.Linkage`.
Also, rename the misleading Function and GlobalVariable ABI `isAvailableExternally` to `isDefinedExternally`
2024-08-22 08:56:27 +02:00
Erik Eckstein
32b53f8bcb
DeinitDevirtualizer: fix an assert crash when creating an alloc_stack
2024-08-12 13:34:50 +02:00
Erik Eckstein
345f9c1dfc
AliasAnalysis: handle destroy_value [dead_end] in computeMemoryEffect
...
We don't have to take deinit effects into acount for a `destroy_value [dead_end]`.
Such destroys are lowered to no-ops and will not call any deinit.
2024-08-05 17:02:06 +02:00
Erik Eckstein
084d60d7b7
Swift SIL: add some APIs to instructions and other small improvments
2024-07-29 17:33:44 +02:00
Erik Eckstein
95bd329b1f
Swift SIL: bridge the hasPointerEscape flags of MoveValueInst and BeginBorrowInst
2024-07-29 17:33:43 +02:00
Erik Eckstein
04e0907ab0
SIL: rename Type.instanceTypeOfMetatype -> Type.loweredInstanceTypeOfMetatype
...
The same for SILType
It needs to be made clear that this is not the "original", but the lowered SIL type.
NFC
2024-07-29 17:33:36 +02:00
Andrew Trick
25825e25ee
SwiftCompilerSources: use Type.isVoid instead of Type.isEmpty.
2024-07-26 17:32:23 -07:00
Erik Eckstein
b739c6263b
WalkUtils: handle unsafe_ref_cast which casts between AnyObject and a class
...
We need to ignore such casts because otherwise the constructed walking path wouldn't contain the right `existential` field kind.
Fixes a miscompile caused by redundant load elimination.
rdar://132364917
2024-07-24 11:35:08 +02:00
Meghana Gupta
154989463b
Add support for lifetime dependence in parameter position
2024-07-10 14:20:03 -07:00
Andrew Trick
32ca35cb64
Fix SILBridging for GlobalAddr_getDecl
...
and RefElementAddr_getDecl.
Fixes:
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file Casting.h
While running pass #224 SILFunctionTransform "LifetimeDependenceDiagnostics"
#7 0x0000000102d3efcc decltype(auto) llvm::cast<swift::DebugValueInst, swift::SILInstruction>(swift::SILInstruction*)
#8 0x0000000102d01e24 swift::DebugValueInst* BridgedInstruction::getAs<swift::DebugValueInst>() const
#9 0x0000000102d01ee4 BridgedInstruction::GlobalAddr_getDecl() const
2024-07-05 12:00:07 -07:00
Erik Eckstein
c61733f985
SwiftCompilerSources: refactor Function.mayBindDynamicSelf
...
Instead of bridging the whole function, just bridge `hasDynamicSelfMetadata` and do the other work in swift.
2024-06-25 17:59:23 +02:00
Meghana Gupta
470fa2f365
Remove resultDependsOn/resultDependsOnSelf
2024-06-05 11:36:16 -07:00
Ellie Shin
6216ec648f
Merge pull request #73902 from apple/elsh/pkg-cmo-inline
...
[SIL][PackageCMO] Allow optimizing [serialized_for_pkg] functions
2024-06-04 11:39:19 -07:00
Emil Pedersen
531469f70e
Merge pull request #73864 from Snowy1803/scs-builder-skip-meta
...
Skip meta instructions for Builder.init with automatic location
2024-05-30 09:50:48 -07:00
Ellie Shin
c3ded85c4f
Update SILBridgedFunction APIs.
...
Add isAnySerialized() and canBeInlinedIntoCaller(SerializedKind).
2024-05-29 15:54:36 -07:00
Ellie Shin
4ecfc96578
[SIL][PackageCMO] Allow optimizing [serialized_for_pkg] functions during SIL
...
inlining, generic/closure specialization, and devirtualization optimization passes.
SILFunction::canBeInlinedIntoCaller now exlicitly requires a caller's SerializedKind_t arg.
isAnySerialized() is added as a convenience function that checks if [serialized] or [serialized_for_pkg].
Resolves rdar://128704752
2024-05-27 23:05:56 -07:00
Emil Pedersen
4b1ce86f48
Add Location.isInlined to SwiftCompilerSources
2024-05-23 16:04:05 -07:00
Kshitij
c288d95c1e
[Autodiff] Separates out changes for using non-ossa instructions in the closure-spec optimization pass
...
The OSSA elimination pass has not yet been moved below all high level
function passes. Until that work has been completed the Autodiff
closure-spec optimization pass cannot solely support OSSA instructions.
2024-05-21 12:02:28 -07:00
Kshitij
12faf79911
[Autodiff] Adds logic to rewrite call-sites using functions specialized by the closure-spec optimization
2024-05-21 12:02:28 -07:00
Kshitij
74166a4ab6
[Autodiff] Moves bridging code accesses in closure-spec opt behind APIs
...
Addresses some other surfacial feedback as well.
2024-05-13 15:37:30 -07:00