Erik Eckstein
9b51e69dac
Swift Optimizer: constant fold builtins in the simplification passes
2023-05-08 21:23:36 +02:00
Erik Eckstein
b4510105a6
Swift Bridging: remove BridgedNode
2023-03-21 15:33:09 +01:00
Erik Eckstein
c4f5bab5b7
Swift Bridging: use C++ instead of C bridging for BridgedBasicBlock
2023-03-21 15:33:09 +01:00
Erik Eckstein
eecea088e7
Swift Bridging: use C++ instead of C bridging for BridgedOperand and BridgedValue
2023-03-21 15:33:09 +01:00
Erik Eckstein
053a38d44b
Swift SIL: mark SIL object classes as immortal
...
This avoids ARC operations on those objects which improves compile time.
2023-03-14 21:07:03 +01:00
Erik Eckstein
3fca8cd06e
Swift SIL: speed up Operand.value
...
Instead of doing the type casts and/or conformance lookup on the swift side, do it on the C++ side.
It makes a significant performance difference because `Operand.value` is a time critical function
2023-03-14 21:07:03 +01:00
Erik Eckstein
230c93df30
SIL Optimizer: add some SIL modification APIs
...
* `MutatingContext.notifyInvalidatedStackNesting` and `MutatingContext.needFixStackNesting`
* `MutatingContext.tryDeleteDeadClosure`
* `MutatingContext.erase(block:)`
* `Undef.get`
* `BasicBlock.moveAllInstructions`
* `BasicBlock.eraseAllArguments`
* `BasicBlock.moveAllArguments`
* `TermInst.replaceBranchTarget`
2023-01-16 19:00:09 +01:00
Erik Eckstein
6c35258f83
Swift SIL: rename parent accessors to parentX, e.g. Instruction.parentBlock
...
It makes it easier to read
2023-01-16 15:11:34 +01:00
Erik Eckstein
60609eb809
Swift SIL: invert Type.isNonTrivialOrContainsRawPointer to Type.isTrivialNonPointer
...
This is consistent with `Type.isTrivial`.
Also, introduce corresponding properties in `Value`: `hasTrivialType` and `hasTrivialNonPointerType`, because
1. It's less to type than `Type.isTrivial(in: function)` because `Value` knows in which function it is.
2. It fixes the corner case where value is an `Undef`, which has not parent function.
2022-10-20 09:20:28 +02:00
Erik Eckstein
2137e41502
Swift SIL: add ProjectedValue.
...
A projected value consists of the original value and a projection path.
For example, if the `value` is of type `struct S { var x: Int }` and `path` is `s0`, then the projected value represents field `x` of the original value.
Also, use ProjectedValue instead of AccessStoragePath.
2022-09-19 11:30:35 +02:00
Egor Zhdan
f476f6245c
[cxx-interop][SwiftCompilerSources] Workaround for std::string crash on arm64 Linux
...
`std::string` constructor crashes when called from `SILBridging.cpp`, likely due to a miscompile. This is a workaround that fixes the crash.
2022-06-15 15:54:45 +01:00
Egor Zhdan
ffb9ee9422
Revert "Revert "[cxx-interop][SwiftCompilerSources] Fix conversion between std::string and Swift.String""
...
This reverts commit 9542837a18 .
2022-06-09 23:40:51 +01:00
Egor Zhdan
9542837a18
Revert "[cxx-interop][SwiftCompilerSources] Fix conversion between std::string and Swift.String"
...
This reverts commit be711e387f .
2022-06-08 14:10:04 +01:00
Egor Zhdan
be711e387f
[cxx-interop][SwiftCompilerSources] Fix conversion between std::string and Swift.String
...
This fixes a dangling pointer issue when creating a `Swift.String` from `std::string`.
Also fixes a warning:
```
warning: variable 's' was never mutated; consider changing to 'let' constant
var s = SILBasicBlock_debugDescription(bridged)
~~~ ^
let
```
rdar://92963081
rdar://93053488
2022-05-30 20:06:36 +01:00
Erik Eckstein
ad9dafc9bf
Swift SIL: add Value.definingBlock
...
and re-factor `Value.definingInstruction`
2022-05-12 21:48:37 +02:00
Erik Eckstein
14b985d87e
Swift SIL: support ownership
...
* add the `Ownership` enum and the `Value.ownership` getter
* add `Function.hasOwnership`
2022-05-12 21:48:37 +02:00
Allan Shortlidge
1ffe55b856
Revert "swift SIL: Fix variable 's' was never mutated; consider changing to 'let' constant warnings."
...
This reverts commit d83c17e832 .
2022-05-10 10:38:58 -07:00
Allan Shortlidge
d83c17e832
swift SIL: Fix variable 's' was never mutated; consider changing to 'let' constant warnings.
2022-05-06 17:29:12 -07:00
Egor Zhdan
145ed33482
[cxx-interop][SwiftCompilerSources] Use std::string instead of BridgedStringRef
...
This reverts commit 2900dec7
2022-05-03 19:48:14 +01:00
Erik Eckstein
325a0b1f48
swift SIL: add some Instruction, Value and Type APIs
...
* instructions `RefToBridgeObjectInst`, `BridgeObjectToWordInst`, `StringLiteralInst`, `ProjectBoxInst`, `InitEnumDataAddrInst`, `UncheckedTakeEnumDataAddrInst`, `InjectEnumAddrInst`
* protocols `StoringInstruction` and `EnumInstruction`
* load/store-weak/unowned instructions
* `CopyAddrInst.isTakeOfSrc/isInitializationOfDest`
* `ApplySite.calleeArgIndex/callerArgIndex`
* `SILValue.definingInstruction/definingBlock/function`
* `Type.isReferenceCounted`
* `FunctionArgument.isExclusiveIndirectParameter`
* support `CondBranchInst` in `incomingPhiValues`
2022-03-30 14:45:58 +02:00
Rintaro Ishizaki
7486cd1c21
[SwiftCompiler] Move common bridging facilities to 'Basic'
...
A preparation for AST/DiagnosticEngine bridging
2022-02-20 22:06:39 -08:00
Max Desiatov
848fa70529
libswift: reimplement Instruction helpers in Swift
2022-01-19 18:51:19 +00:00
Erik Eckstein
cec4b82b39
swift SIL: add some SIL type related bridging
...
* `Function.argumentTypes` and `Function.resultType`
* `Type.isNominal`, `Type.isClass`, `Type.isTuple`, `Type.isStruct` and `Type.isEnum`
* `Type.getFieldIndexOfNominal`
* `Type.getFieldTypeOfNominal`
* `Type.tupleElements`
* `Type.description` for better debugging
# Conflicts:
# SwiftCompilerSources/Sources/SIL/Type.swift
# SwiftCompilerSources/Sources/SIL/Utils.swift
# SwiftCompilerSources/Sources/SIL/Value.swift
# include/swift/SIL/SILBridging.h
# lib/SIL/Utils/SILBridging.cpp
2022-01-19 18:51:19 +00:00
Max Desiatov
b964dba177
libswift: implement ReleaseDevirtualizer in Swift
2022-01-19 18:51:19 +00:00
Max Desiatov
7d961001d3
libswift: bridge more functions from SILBuilder
2022-01-19 18:51:18 +00:00
Erik Eckstein
4beb94c2f9
Rename the libswift directory to SwiftCompilerSources
2021-12-22 09:46:25 +01:00