Dario Rexin
011fce8212
[Runtime] Fix leak of bridge objects in swift_generic_initWithTake ( #69977 )
...
rdar://118606044
The initWithTakeTable accidentally referenced bridgeRetain instead of copyingInitWithTake, which caused a leak when an object containing a bridge reference was also not bitwise takable.
2023-11-27 08:04:10 -08:00
Dario Rexin
36f3367275
[Runtime] Use threaded code in compact value witness runtime ( #69756 )
...
* [Runtime] Use threaded code in compact value witness runtime
These changed reduce branching and yield performance improvements of up to 10% for some cases.
* Fix offset in handleRefCountsInitWithTake
2023-11-09 19:12:29 -08:00
Dario Rexin
40b8079018
[Runtime] Fix missing memcpy in handleSingleRefCountInitWithCopy
...
rdar://117755666
Missing memcpy in handleSingleRefCountInitWithCopy caused wrong enum cases, crashes etc.
2023-11-03 00:27:45 -07:00
Dario Rexin
0c36e44f2e
[Runtime] Cleanup function names in BytecodeLayouts.cpp
2023-10-13 10:22:02 -07:00
Dario Rexin
56d0975668
[Runtime] Add layout string handling in swift_arrayAssignWithCopyFrontToBack
...
By using a specialize function, we only call through the witness table and fetch the layout string once for the whoe buffer, instead of once per element.
2023-09-21 09:52:46 -07:00
Dario Rexin
ee28da2bf2
[Runtime] Use handleRefCountsAssignWithCopy in swift_generic_assignWithCopy
...
rdar://114840977
This was accidentally committed after debugging an issue
2023-09-01 14:53:52 -07:00
Dario Rexin
6e3d1ae726
[Runtime] Check if objc pointers are tagged before masking
...
In layout string value witnesses runtime functions, if an objc pointer is tagged, there is no ref counting necessary.
2023-08-30 18:50:38 -07:00
Dario Rexin
8fe4c77b3e
[Runtime] Properly mask pointers before ref counting and other fixes
...
The fixes are all around enum support. Some tag comparisons and pointer masking were incorrect and led to crashes.
rdar://114575149
2023-08-30 17:54:47 -07:00
Dario Rexin
e3a1bac859
[Runtime] Use copy of addrOffset in single payload assign with copy
2023-08-24 11:01:14 -07:00
Dario Rexin
21f4064380
[Runtime] Fix singlePayloadEnumSimpleAssignWithCopy
2023-08-21 10:59:15 -07:00
Dario Rexin
56048ac19f
[Runtime+IRGen] Fix existential offset for multiple protocol witnesses
2023-08-21 10:57:06 -07:00
Dario Rexin
8b3aaf5423
[Runtime] Compute end before looping over single payload ref count
2023-08-21 10:56:42 -07:00
Dario Rexin
7c0203dd55
[Runtime] Combine copy and destroy in assignWithCopy
2023-08-21 10:56:19 -07:00
Dario Rexin
8ab845fdca
[Runtime+IRGen] Fix offsets of existentials in layout strings
2023-08-21 10:55:51 -07:00
Dario Rexin
4f6e69b35f
[Runtime] Reduce instruction count in simple layout string operations
2023-08-21 10:55:25 -07:00
Dario Rexin
30d628270b
[IRGen+Runtime] Make more fine grained copies in layout string runtime functions
2023-08-21 10:55:02 -07:00
Dario Rexin
27b1764d13
[Runtime+IRGen] Fix layout string flag in type layout and add array functions
2023-08-21 10:54:35 -07:00
Dario Rexin
31de67c713
[IRGen+Runtime] Further fixes for layout strings
2023-08-21 10:54:14 -07:00
Dario Rexin
4a395cb8d3
[Runtime+IRGen] Some fixes and optimizations for layout strings
2023-08-21 10:53:44 -07:00
Dario Rexin
2f61e2a9c9
[Runtime] Further abstract shared functionality in BytecodeLayouts
2023-08-21 10:53:14 -07:00
Dario Rexin
ec3a2dc370
[Runtime] Templatize shared functionality in BytecodeLayouts
2023-08-21 10:52:39 -07:00
Dario Rexin
c25b3b43a2
[Runtime] Restructure BytecodeLayouts
2023-08-21 10:52:24 -07:00
Dario Rexin
620d516fe7
[Runtime] Fix MultiPayloadEnumFN case in swift_resolve_resilientAccessors
...
rdar://112825968
Offsets were wrong, causing invalid memory accesses
2023-07-25 13:50:17 -07:00
Dario Rexin
6fb232510b
[Runtime] Fix SinglePayloadEnumSimple read offset in swift_resolve_resilientAccessors
...
The offset was off by 1, causing subsequent tags to not be resolved properly.
2023-07-24 09:47:42 -07:00
Dario Rexin
b3cdcda6c7
Merge pull request #67173 from drexin/wip-singleton-inject
...
Support destructiveInjectEnumTag in singleton enums with layout strings
2023-07-06 19:33:05 -07:00
Dario Rexin
de177dc2ec
[Runtime] Add destructiveEnumInject support for singleton enums with layout strings
2023-07-06 15:46:59 -07:00
Dario Rexin
81153489f6
[Runtime] Add destructiveEnumInject support for simple single payload enums in layout strings
2023-07-06 15:23:38 -07:00
Dario Rexin
fd4ef74266
Merge pull request #67067 from drexin/wip-refactor-simple-enum-tag
...
[Runtime] Abstract handling of simple single payload enum handling
2023-06-30 17:03:02 -07:00
Dario Rexin
13930c9347
[Runtime] Abstract handling of simple single payload enum handling
...
We can re-use some of this in destructiveInjectEnumTag, so adding the abstraction in preparation of that.
2023-06-30 13:51:47 -07:00
Dario Rexin
e2b8366fdb
[Runtime] Remove incorrect skip in handleSinglePayloadEnumGenericTag
2023-06-30 13:05:32 -07:00
Dario Rexin
8114ecc3e0
[Runtime] Add destructiveInjectEnumTag support for generic multi payload enums with layout strings
2023-06-29 16:34:10 -07:00
Dario Rexin
89d37da9ee
[Runtime] Add destructiveInjectEnumTag support for generic single payload enums with layout strings
2023-06-29 10:37:51 -07:00
Dario Rexin
964a51f4e9
[Runtime] Abstract tag handling for generic single payload enums ( #67002 )
...
* [Runtime] Abstract tag handling for generic single payload enums
This functionality will be shared across multiple functions, so adding the abstraction in preparation of that.
* Update BytecodeLayouts.cpp
2023-06-28 22:13:58 -07:00
Dario Rexin
8733969222
[Runtime] Fix sign-compare warning in BytecodeLayouts ( #67001 )
2023-06-28 19:14:37 -07:00
Dario Rexin
3524945cd4
[IRGen+Runtime] Implement getEnumTag for singleton enums in layout strings ( #66985 )
2023-06-28 14:25:34 -07:00
Dario Rexin
ca664141cc
[IRGen+Runtime] Add support for initializeBufferWithCopyOfBuffer to layout strings ( #66965 )
2023-06-27 18:05:30 -07:00
Dario Rexin
fc6834daf6
[IRGen+Runtime] Add getEnumTag for layout strings on simple single payload enums ( #66941 )
2023-06-26 19:32:51 -07:00
Dario Rexin
253d8fbf33
[IRGen+Runtime] Add getEnumTag for layout strings on generic single payload enum ( #66911 )
2023-06-23 20:43:28 -07:00
Dario Rexin
270089f297
[IRGen+Runtime] Layout string getEnumTag for fixed size enums subset ( #66899 )
...
* [IRGen+Runtime] Layout string getEnumTag for fixed size enums subset
getEnumTag impl for layout strings of fixed sized enums that use a function to fetch the enum tag
* Fix potential UB in IRGen
2023-06-23 18:10:55 -07:00
Dario Rexin
36ddb77fcd
[IRGen+Runtime] Layout string getEnumTag for generic multi payload enums ( #66872 )
...
We already store all necessary information to extract the tag in the layout string, so we should utilize it for the getEnumTag witness
2023-06-22 19:07:50 -07:00
Dario Rexin
37220ed37f
[Runtime] Handle generic multi payload enums in resilient resolve ( #66848 )
...
* [Runtime] Handle generic multi payload enums in resilient resolve
* Update BytecodeLayouts.cpp
* Update BytecodeLayouts.cpp
2023-06-22 12:02:46 -07:00
Dario Rexin
806fd1b58b
[Runtime] Handle generic single payload enums in resilient resolve ( #66849 )
2023-06-22 10:53:55 -07:00
Dario Rexin
fd369cd050
[Runtime] Refactor layout string code ( #66831 )
...
Made the code a bit more readable by adding a reader and writer type that encapsulate
the layout string and offset.
2023-06-21 19:46:22 -07:00
Dario Rexin
493a25faae
[IRGen+Runtime] Add layout string support for generic single payload enums ( #66791 )
2023-06-20 20:46:54 -07:00
Dario Rexin
8b48a0d3e0
[Runtime+IRGen] Instantiate layout strings for generic multi payload enum ( #66621 )
...
Instantiating layout strings for generic types reduces code size and is expected to improve performance of generic value witnesses.
2023-06-14 09:31:11 -07:00
Dario Rexin
58ff42af16
[Runtime] Properly handle tuple types in layout string instantiation ( #66603 )
...
Tuple types contain metadata entries for each element, so we can handle them individually to avoid unnecessary indirection.
2023-06-13 13:48:05 -07:00
Dario Rexin
91d547f982
[Runtime] Properly handle unaligned reads in readTagBytes for layout strings ( #66506 )
2023-06-09 23:02:34 -07:00
Dario Rexin
fe6f8f5404
[IRGen] Implement support for multi payload enums in layout strings ( #66354 )
...
* [IRGen] Implement support for multi payload enums in layout strings
rdar://105837114
* Implement multi payload enum cases in swift_resolve_resilientAccessors
* Add missing const
2023-06-06 23:51:57 -07:00
Dario Rexin
1425e32c86
[Runtime] Refactor swift_generic_initWithTake to use shared abstraction ( #66379 )
...
We introduced shared abstractions for handling the different tags for the other runtime functions, so we should use them here as well.
2023-06-06 14:27:56 -07:00
Dario Rexin
5cbf9f9641
[IRGen] Handle complex single payload enum cases ( #66289 )
...
* [IRGen] Handle complex single payload enum cases
rdar://110138498
Handles single payload enum cases with more complex bit patterns (e.g. >64 bits or scattered) by storing a relative pointer to a function that reads the tag.
* Use proper symbol for enum tag helper
2023-06-02 11:49:57 -07:00