tonycloud/dev
35 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
11b81715ad |
Reformat runtime/ using the 3.8 formatter style.
Change-Id: I7b5e5dd768c87f28848ee02050582d23f3604cb1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426286 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> |
||
|
|
7427e655f6 |
Revert "[ffi] Remove deprecated Pointer.elementAt"
This reverts commit
|
||
|
|
789302053e |
[ffi] Remove deprecated Pointer.elementAt
Bug: https://github.com/dart-lang/sdk/issues/54250 TEST=tests/ffi CoreLibraryReviewExempt: Removing deprecated member after 1+ year. Change-Id: I2234f28126e0788860a54cbe6aa82bc76b49c8d8 Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-mac-debug-simarm64_arm64-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/421740 Reviewed-by: Hossein Yousefi <yousefi@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
18af310c01 |
[vm/ffi] Fix mixin of _BoolArrayList
_BoolArrayList needs to extend FixedLengthListMixin instead of UnmodifiableListMixin since it implements `operator []=`. Also contains some other doc fixes that were brought up post-submit in https://dart-review.googlesource.com/c/sdk/+/414821. TEST=tests/ffi/array_primitive_elements_generated_test.dart CoreLibraryReviewExempt: Dart VM only. Bug: https://github.com/dart-lang/sdk/issues/45508 Change-Id: I7635152283aec51a4f38e06fdfc7da84e93e55ab Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-mac-debug-simarm64_arm64-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-arm64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417100 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Michael Goderbauer <goderbauer@google.com> |
||
|
|
c326065c3f |
[vm/ffi] Exposes an iterable Array.elements
For the arrays of the Int/Uint/Float/Double types this has been implemented straight in the ffi_patch.dart file and `elements` returns a typed-data list view on the original data backing the array. The Bool and Pointer arrays return helper classes from their `elements` getter. These helper classes implement the `List` interface utilizing the `operator []` implementation of the underlying arrays. This is also implemented directly in the ffi_patch.dart file. The `elements` getter for array arrays is rewritten in the CFE (use_sites.dart) to instantiate a helper class to which the size of a single element of the array is passed (this information is not available in ffi_patch.dart, hence the rewrite in the CFE). The helper class implements the `List` interface and performs some pointer arithmetic with the provided element size to implement its methods. The `elements` getters for struct and union arrays are also rewritten in the CFE to instantiate a helper class to which a constructor tearoff for instantiating the underlying struct/union type is passed. The helper class also implements the `List` interface and uses the provided constructor tearoff to create instantiated structs/unions of the elements in the list. Last, but not least, the `elements` getter for abi-specific integer arrays is also rewritten in the CFI to instantiate a helper class to which a closure is provided to load abi specific integers from the underlying array data structure. TEST=tests/ffi/array_compound_elements_test.dart TEST=tests/ffi/array_primitive_elements_generated_test.dart CoreLibraryReviewExempt: Dart VM only. Bug: https://github.com/dart-lang/sdk/issues/45508 Change-Id: I211a42174057c39632c6a363d4e8e6fa8e94e801 Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-mac-debug-simarm64_arm64-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-arm64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/414821 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> |
||
|
|
af82cadcec |
[vm] Force inlining of various Struct helpers
Specifically apply prefer-inline to: * All generated accessors. In general we almost always seem to select them for inlining through small-accessor heuristic, but sometimes it does not hit. Marking with pragma ensures that we are not dependent on specific heuristics to produce good code. * Various helpers involved in creating struct instances from typed data. These we *not* hit by normal heuristics and consequently not inlined prior to this change. Inlining them opens possibilities to fully eliminate allocations associated with `Struct.create(...)` if Struct does not escape. * Array creation helpers and accessors. They were also not inlined which meant we were producing unnecessary temporary objects when reading from inline arrays. TEST=/vm/dart/ffi_structs_optimizations_il_test CoreLibraryReviewExempt: no API or behavioral changes Cq-Include-Trybots: luci.dart.try:vm-aot-linux-product-x64-try,vm-aot-linux-release-x64-try Change-Id: I1650023200446bd5289118777365627ca19d3e5b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/384261 Commit-Queue: Slava Egorov <vegorov@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
|
|
4b66657b98 |
[vm/ffi] address of operator for FFI leaf calls
During FFI leaf calls, the Dart GC will not run. This means that we can pass pointers into `TypedData` to FFI calls that take `Pointer` arguments. After this CL, we have three types of arguments that can flow into `Pointer` argument in an FFI call: * `Pointer`. * `TypedData`: Any typed data including views. * `_Compound`: A TypedData/Pointer and an offset in bytes. The is only possible for `@Native external` functions, `asFunction` does not support passing in `TypedData`. (See related GitHub issues for discussion. TLDR: FFIgen should generate bindings without config.) `.address` expressions on `TypedData` and `Array` elements do _not_ introduce bounds checks, even though `TypedData` and `Array` have bounds information. E.g. `ffiNative(Uint8List(10)[20].address)` does not throw. Implementation details: The CFE analyzes call-sites to `@Native external` functions. If the arguments are `.address` expressions, it transforms the call site to pass the compound or `TypedData`. If an additional offset needs to be applied, the CFE constructs a new `_Compound` with the correct offset in bytes. The CFE then also creates a new `@Native external` function which have `TypedData`s and `_Compound`s parameters. To avoid name clashes, these functions are postfixed with `#` and `P`, `T`, or `C` for each Pointer parameter. TEST=pkg/vm/testcases/transformations/ffi/address_of_* In the VM, `TypedData` arguments are passed as tagged values, and the address is loaded inside the `FfiCallInstr`. `_Compound` arguments turn into two IL definitions, one for the `TypedDataBase` (tagged), and one for the offset in bytes (unboxed). The address is then loaded inside the `FfiCallInstr` and the offset in bytes is applied. Adding the offset in bytes required an extra temp register for ia32. Also, it uncovered that the temp register in arm32 was conflicting with the argument registers. However, TMP should suffice instead. TEST=tests/ffi/address_of_array_generated_test.dart TEST=tests/ffi/address_of_struct_generated_test.dart TEST=tests/ffi/address_of_typeddata_generated_test.dart Closes: https://github.com/dart-lang/sdk/issues/44589 Closes: https://github.com/dart-lang/sdk/issues/54771 CoreLibraryReviewExempt: VM only, unsupported in dart2wasm Change-Id: I01fb428cfd6f9096a34689c2819c124a8003cb6b Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64c-try,vm-aot-win-release-x64-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/360882 Reviewed-by: Jens Johansen <jensj@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Tess Strickland <sstrickl@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> |
||
|
|
0bcb0c934d |
[vm/ffi] Add _Compound _offsetInBytes field
This CL changes compounds (structs, unions, and arrays) to be backed by a TypedDataBase and an int offset. Before this CL, the compounds where only backed by a TypedDataBase. This leads to the following issues: 1. Access to nested structs required code for allocating new typed data views or pointers, which the optimizer then had to prevent from being allocated after inlining. 2. Runtime branching on whether the TypedDataBase was a Pointer or TypedData increased code size and prevented inlining. https://github.com/dart-lang/sdk/issues/54892 This could not be properly optimized if in AOT both typed data and pointer were flowing into the same compound. 3. Constructing TypedData views required calculating the length of the view. After this CL, accessing nested compounds will lead to accesses on the original TypedDataBase with an extra offset. This removes the polymorphism on TypedData vs Pointer, because the final int/float/Pointer accesses in nested compounds operate on TypedDataBase. Also, it simplifies creating an `offsetBy` accessor, because it will no longer have to be polymorphic in typed data vs pointer, nor will it have to calculate the length of the field. Implementation details: * The changes in the CFE and patch files are straightforward. * VM: Struct-by-value returns (or callback params) are initialized with an offsetInBytes of 0. * VM: Struct-by-value arguments (and callback return) need to read out the offsetInBytes. Before this CL we were passing in the TypedData as tagged value. With this CL we are passing the TypedData as tagged value and the offset as unboxed int, from 1 IL input to 2 IL inputs. (The alternative would have been to take the compound as a tagged value, but that would have prevented optimizations from not allocating the compound object in the optimizer. The FfiCallInstr is updated to have two definitions for the case where we were passing in the TypedData previously. The NativeReturnInstr is refactored to be able to take two inputs instead of 1. (Note that we don't have VariadicInstr only VariadicDefinition in the code base. So the instruction is _not_ implemented as variadic, rather as having a fixed length of 2.) * dart2wasm does no longer support nested compounds due to the compound implementation only storing a pointer address. https://github.com/dart-lang/sdk/issues/55083 Intending to land this after https://dart-review.googlesource.com/c/sdk/+/353101. TEST=test/ffi CoreLibraryReviewExempt: VM and WASM-only implementation change. Closes: https://github.com/dart-lang/sdk/issues/54892 Bug: https://github.com/dart-lang/sdk/issues/44589 Change-Id: I8749e21094bf8fa2d5ff1e48b6b002c375232eb5 Cq-Include-Trybots: dart-internal/g3.dart-internal.try:g3-cbuild-try Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354226 Reviewed-by: Tess Strickland <sstrickl@google.com> |
||
|
|
28c7f5bd1e |
[vm/ffi] Refactor dart:ffi generator
Refactor to avoid conflicts later with concurrent work on: - https://github.com/dart-lang/sdk/issues/45508 - https://github.com/dart-lang/sdk/issues/44589 Change-Id: I7b7ea2e4ec29115da42b0c196a2952c3cd5d3fa6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/349901 Commit-Queue: Martin Kustermann <kustermann@google.com> Auto-Submit: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
c0c7c1ef49 |
[vm/ffi] Update inner pointer accesses in IL
FFI loads and stores via structs can have a TypedData as receiver, so this CL updates those loads to `kMayBeInnerPointer`. This CL adds an IL test to verify that for `Pointer` loads the untagged value is treated correctly as `kCannotBeInnerPointer`. (And adds some prefer-inline pragmas to make some common operations be inlined to avoid allocating `Pointer` objects.) This CL updates the load in the FFI closures to use a load-field. This can also potentially enable not allocating a pointer object when this closure is inlined. TEST=tests/ffi/unwrap_typeddata_generated_test.dart TEST=tests/ffi CoreLibraryReviewExempt: Only adding some pragmas. Change-Id: If687e54c676f275cc849b3fed526a13766ab331a Cq-Include-Trybots: luci.dart.try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-x64-try,vm-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/349241 Reviewed-by: Alexander Markov <alexmarkov@google.com> |
||
|
|
5a1ef6089c |
Revert "[ffi]: Remove pointer elementAt method."
This reverts commit
|
||
|
|
f706ff4ee2 |
[ffi]: Remove pointer elementAt method.
Closes #54250 TEST=test/ffi R=dacoharkes@google.com Change-Id: I0e88adfcfe3caef0ad3bb6814ad8f27dce5dc7f4 CoreLibraryReviewExempt: FFI only Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/346380 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Auto-Submit: Shikhar <shikharish05@gmail.com> |
||
|
|
020421df65 |
[vm/ffi] Add Since annotation to Pointer + and -
To prevent breaking things on older SDKs when users chose to migrate. CoreLibraryReviewExempt: VM & WASM only. Only adding an annotation. Bug: https://github.com/dart-lang/sdk/issues/54250 Change-Id: Id026e34e78527117c571aa118445cd73b16f9a9a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/344022 Auto-Submit: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
efb60eac59 |
[ffi]: Add extension operator methods(+,-) for pointer arithmetic
Closes [#54250](https://github.com/dart-lang/sdk/issues/54250). TEST=test/ffi Change-Id: I2299e019b6c0b0db74662e4f9439feac46bc9b40 CoreLibraryReviewExempt: FFI only Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341420 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Auto-Submit: Shikhar <shikharish05@gmail.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
|
|
933537b66b |
Trivial cleanup to make VSCode workspace for the SDK
free of diagnostics as long as you filter with "!TODO" R=athom@google.com, jensj@google.com, natebiggs@google.com Change-Id: I73cf3c5ef6dab81808330c4eb5f44cb62e753c81 Tested: manually verified that VSCode is warning free. No changes in functionality. Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333903 Auto-Submit: Jacob Richman <jacobr@google.com> Reviewed-by: Alexander Thomas <athom@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com> Commit-Queue: Jacob Richman <jacobr@google.com> |
||
|
|
4d1bdaaca9 |
Reland "[vm/compiler] Change MemoryCopy to also take untagged addresses."
This is a reland of commit
|
||
|
|
5362d9536b |
Revert "[vm/compiler] Change MemoryCopy to also take untagged addresses."
This reverts commit
|
||
|
|
06d7a2352e |
[vm/compiler] Change MemoryCopy to also take untagged addresses.
This CL adds the ability to pass the payload address of the source and destination directly to the MemoryCopy instruction as an untagged value. The new translation of the _TypedListBase._memMoveN methods use the new MemoryCopy constructor, retrieving the untagged value of the data field of both the source and destination. This way, if inlining exposes the allocation of the object from which the data field is being retrieved, then allocation sinking can remove the intermediate allocation if there are no escaping uses of the object. Since Pointer.asTypedList allocates such ExternalTypedData objects, this CL makes that method inlined if at all possible, which removes the intermediate allocation if the only use of the TypedData object is to call setRange for memory copying purposes. This CL also separates unboxed native slots into two groups: those that contain untagged addresses and those that do not. The former group now have the kUntagged representation, which mimics the old use of LoadUntagged for the PointerBase data field and also ensures that any arithmetic operations on untagged addresses must first be explicitly converted to an unboxed integer and then explicitly converted back to untagged before being stored in a slot that contains untagged addresses. When a unboxed native slot that contains untagged addresses is defined, the definition also includes a boolean which represents whether addresses that may be moved by the GC can be stored in this slot or not. The redundancy eliminator uses this to decide whether it is safe to eliminate a duplicate load, replace a load with the value originally stored in the slot, or lift a load out of a loop. In particular, the PointerBase data field may contain GC-moveable addresses, but only for internal TypedData objects and views, not for external TypedData objects or Pointers. To allow load optimizations involving the latter, the LoadField and StoreField instructions now take boolean flags for whether loads or stores from the slot are guaranteed to not be GC-moveable, to override the information from the slot argument. Notable benchmark changes on x64 (similar for other archs unless noted): JIT: * FfiMemory.PointerPointer: 250.7% * FfiStructCopy.Copy1Bytes: -26.73% (only x64) * FfiStructCopy.Copy32Bytes: -25.18% (only x64) * MemoryCopy.64.setRange.Pointer.Uint8: 19.36% * MemoryCopy.64.setRange.Pointer.Double: 18.96% * MemoryCopy.8.setRange.Pointer.Double: 17.59% * MemoryCopy.8.setRange.Pointer.Uint8: 19.46% AOT: * FfiMemory.PointerPointer: 323.5% * FfiStruct.FieldLoadStore: 483.3% * FileIO_readwrite_64kb: 15.39% * FileIO_readwrite_512kb (Intel Xeon): 46.22% * MemoryCopy.512.setRange.Pointer.Uint8: 35.20% * MemoryCopy.64.setRange.Pointer.Uint8: 55.40% * MemoryCopy.512.setRange.Pointer.Double: 29.45% * MemoryCopy.64.setRange.Pointer.Double: 60.37% * MemoryCopy.8.setRange.Pointer.Double: 59.54% * MemoryCopy.8.setRange.Pointer.Uint8: 55.40% * FfiStructCopy.Copy32Bytes: 398.3% * FfiStructCopy.Copy1Bytes: 1233% TEST=vm/dart/address_local_pointer, vm/dart/pointer_as_typed_list Issue: https://github.com/dart-lang/sdk/issues/42072 Fixes: https://github.com/dart-lang/sdk/issues/53124 Cq-Include-Trybots: luci.dart.try:vm-ffi-qemu-linux-release-arm-try,vm-eager-optimization-linux-release-x64-try,vm-linux-release-x64-try,vm-linux-debug-x64-try,vm-aot-linux-release-x64-try,vm-aot-linux-debug-x64-try Change-Id: I563e0bfac5b1ac6cf1111649934067c12891b631 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324820 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
e831cb8510 |
[cfe] Check @patch annotations
This normalizes the checking of patches so that it matches the checking of augmentations. This means that the @patch annotation must and can only be used on patches. The dart: libraries and patches have been updated accordingly. TEST=ffi Change-Id: I78767eebd1a8861859067ae5ff9c0339f0985bb4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/306041 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Joshua Litt <joshualitt@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com> Reviewed-by: Jens Johansen <jensj@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> |
||
|
|
e5bb28bc4d |
[vm/ffi] Pointer.asTypedList finalizer
TEST=tests/ffi/external_typed_data_finalizer_test.dart Closes: https://github.com/dart-lang/sdk/issues/50507 CoreLibraryReviewExempt: https://github.com/dart-lang/sdk/issues/52261 Change-Id: I1a82dcca15961b28c0de64637970fe38a39286e5 Cq-Include-Trybots: luci.dart.try:vm-asan-linux-release-x64-try,vm-aot-asan-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-qemu-linux-release-arm-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-aot-win-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-aot-mac-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/301001 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> |
||
|
|
2435f0b398 |
[vm/ffi] Make elementAt an extension method
The CFE rewrite for structs, unions, and abi-specific integers is now done on the extension methods. The other native types are implemented in the extension methods directly. TEST=test/ffi Closes: https://github.com/dart-lang/sdk/issues/50714 Change-Id: I578325733e3cd66200e80949d47ff12a13115b99 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276102 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
a37502c1b8 |
[misc] Cleanup stale todos
TEST=tests/ffi Change-Id: Iae97f62b1adb8dbe99ad075dfe750604db0de62c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249301 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> Reviewed-by: Tess Strickland <sstrickl@google.com> |
||
|
|
5ca6eec782 |
[vm/ffi] Add Since annotations to dart:ffi
Closes: https://github.com/dart-lang/sdk/issues/48711 Change-Id: Iac0bcecdf81b02bcb2feb746aa94a1bef6caf600 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/240045 Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
02549a8bce |
[vm/ffi] Optimize Pointer<T>.asTypedList()
This change refactors `_asExternalTypedData` into multiple functions, which are data type specific, e.g `_asExternalTypedDataInt8`. These functions are implemented as recognized methods. Argument checks have previously been performed in the removed runtime entry implementation of `_asExternalTypedData.` These are now handled in Dart. TEST=tests/ffi/external_typed_data_test.dart Closes https://github.com/dart-lang/sdk/issues/39843 Closes https://github.com/dart-lang/sdk/pull/47780 https://github.com/dart-lang/sdk/pull/47780 GitOrigin-RevId: 65763bddd06c633583b4adbf920c32c5a7a3720f Change-Id: I703b350d89004ebe36e70eaa44dda1d9ebb050c7 Cq-Include-Trybots: luci.dart.try:vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,app-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-nnbd-mac-debug-x64-try,vm-kernel-linux-debug-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221360 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
757c2b82ce |
[vm/ffi] Add Bool
This CL adds the `Bool` `NativeType` with support for loading/storing from `Pointer<Bool>`, `Array<Bool>`, and `Struct` and `Union` fields, and support for passing booleans through FFI calls and callbacks. The assumption is that `bool` is always treated as `uint8_t` in the native ABIs. Including: (1) whether there can be garbage in the upper bytes in CPU registers, (2) stack alignment, and (3) alignment in compounds. The conversion from `bool` to `uint8_t` is implemented as follows: - bool to int: `value ? 1 : 0` - int to bool: `value != 0` The conversion is implemented in Dart in patch files for memory loads and stores (pointer, array, and struct fields) and kernel_to_il for FFI call and callback arguments and return value. TEST=runtime/vm/compiler/ffi/native_type_vm_test.cc TEST=tests/ffi/bool_test.dart TEST=tests/ffi/function_callbacks_structs_by_value_generated_test.dart TEST=tests/ffi/function_structs_by_value_generated_test.dart Closes: https://github.com/dart-lang/sdk/issues/36855 Change-Id: I75d100340ba41771abfb41c598ca92066a89370b Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-debug-x64-try,vm-ffi-android-debug-arm-try,vm-kernel-mac-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-ffi-android-debug-arm64c-try,vm-kernel-mac-release-arm64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-android-release-arm64c-try,vm-kernel-precomp-android-release-arm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/216900 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Clement Skau <cskau@google.com> |
||
|
|
d1383452cc |
Change "dartfmt" to "dart format" in FFI tools.
Change-Id: I9fe047c79ec79728f26184ee2cf69c7776099568 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/215185 Auto-Submit: Bob Nystrom <rnystrom@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
|
|
d45fd0f9d5 |
[vm/ffi] Support inline arrays in Structs
Adds support for single dimension inline arrays in structs. Multi- dimensional arrays will be supported in a future CL. This CL adds: - CFE static error checks for inline arrays. - CFE transformations for inline arrays. - VM consumption of inline array fields for NativeType. - Test generator support for inline arrays + generated tests. Previous CLs added support for inline arrays in: - analyzer https://dart-review.googlesource.com/c/sdk/+/183684 - updated in this CL to new API. - ABI calculation https://dart-review.googlesource.com/c/sdk/+/183682 Closes: https://github.com/dart-lang/sdk/issues/35763 Open issue: https://github.com/dart-lang/sdk/issues/45101 CFE transformations are tested with expectation files: TEST=pkg/front_end/testcases/(.*)/ffi_struct_inline_array.dart Trampolines and CArray API are tested with end-to-end Dart tests: TEST=tests/ffi(_2)/(.*)by_value(.*)test.dart TEST=tests/ffi(_2)/inline_array_test.dart Compile-time errors (both CFE and analyzer) are tested in: TEST=tests/ffi(_2)/vmspecific_static_checks_test.dart Change-Id: I014c0e4153f1b885638adce80de6ab3cac8e6bb2 Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-mac-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-nnbd-mac-release-x64-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-precomp-android-release-arm_x64-try,analyzer-analysis-server-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/183640 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Clement Skau <cskau@google.com> |
||
|
|
ecce58c1e3 |
[vm/ffi] Remove documentation from setters
Now that
|
||
|
|
01f4479372 |
[vm/ffi] Change internal loads and stores to take byteOffesets
Change-Id: Iaff7aa9f158b3b168ccf2d7014a43b08afaa448e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136182 Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
4131d3d7c4 |
[vm/ffi] Improve API docs
This changes the API docs to (1) be specialized to the specific types and (2) have more precise wording. Change-Id: I14fa37bd162f846c19e62443c53dd051eaa62ad3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121427 Reviewed-by: Kathy Walrath <kathyw@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
c891fa858e |
Update dartdoc to v0.28.8.
Release notes: https://github.com/dart-lang/dartdoc/releases/tag/v0.28.8 This also reverts the workaround in https://github.com/dart-lang/sdk/commit/ff23f546db9c2154f8dce1d51286bf342c5250e5 by dacoharkes@. Instead of crashing, dartdoc v0.28.8 displays some fairly spammy warnings that the functionality is unimplemented. warning: Comment reference resolution inside extension methods is not yet implemented, from dart-ffi.DoublePointer.value: Field value.location warning: unresolved doc reference [address], from dart-ffi.DoublePointer.value: Field value.location warning: unresolved doc reference [Double], from dart-ffi.DoublePointer.value: Field value.location warning: unresolved doc reference [value], from dart-ffi.DoublePointer.value: Field value.location warning: unresolved doc reference [Float], from dart-ffi.DoublePointer.value: Field value.location Issue: https://github.com/dart-lang/sdk/issues/38786 Change-Id: Ie8fef572f5d50bd7f031b498c0cd066a4765c493 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121644 Commit-Queue: Janice Collins <jcollins@google.com> Commit-Queue: Paul Berry <paulberry@google.com> Auto-Submit: Janice Collins <jcollins@google.com> Reviewed-by: Paul Berry <paulberry@google.com> |
||
|
|
91c6dc15de |
[vm/ffi] Pointer.asExternalTypedData to extension method
Issue: https://github.com/dart-lang/sdk/issues/38610 Change-Id: Ib07f50b23e3be2bce2d7b973c0f0196884397952 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121384 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
9f33e8da04 |
[vm/ffi] Pointer optimize indexed load and store
Follow up of https://dart-review.googlesource.com/c/sdk/+/117547 This gets rid of unnecessary allocations in hot loops with indexed loads and stores. Issue: https://github.com/dart-lang/sdk/issues/38172 Change-Id: I37a4b1aba00084e465d47cce79bb9963e1afc104 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-mac-debug-simdbc64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119645 Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
ff23f546db |
[vm/ffi] Work around dartdoc crash to fix API doc generation
Issue: https://github.com/dart-lang/sdk/issues/38786 Change-Id: Ida4bb78da1aabdf6da259e0d66840d9db4b1428d Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120788 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
597cd06aec |
[vm/ffi] Pointer load and store as extension methods
Issue: https://github.com/dart-lang/sdk/issues/37773 Change-Id: I836d6305b613cf05590d872874f4517831be3e08 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-mac-debug-simdbc64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118992 Reviewed-by: Samir Jindel <sjindel@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |