c84edaefe9e457e9cc975c050019479b2d94dea2
1281 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
dcdfcc2b8d |
Reland "[vm/ffi] Express FFI call closures explicitly in AST"
This reverts commit |
||
|
|
150e61a662 |
[vm/ffi] Support @Native fields
Allow annotating top-level or static fields with `@Native` to create fields backed by native memory. By using the `_addressOf` operator implemented in the VM, these fields can be implemented in the CFE by replacing them with accessors looking up the pointer and then using existing methods to load and store the value. Closes https://github.com/dart-lang/sdk/issues/50551 TEST=tests/ffi/native_assets/asset_*_test.dart TEST=pkg/analyzer/test/src/diagnostics/ffi_native_test.dart CoreLibraryReviewExempt: VM & dart2wasm only feature Change-Id: I61dccc88076723d6a6ba02d7fd848b18e4caf780 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338020 Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> |
||
|
|
949f3af120 |
Remove kernel flag Procedure.isAbstractFieldAccessor.
This used to be used solely by field promotion, to recognize when a getter arose from a declaration of an abstract field, so that abstract fields would be promotable but explicitly declared abstract getters would not be. However, with the adoption of https://github.com/dart-lang/language/issues/3328, both abstract fields and abstract getters are now considered promotable, so there is no longer any need to distinguish them. Bug: https://github.com/dart-lang/language/issues/3328 Change-Id: Idc14512568eb0a11dae4e364df453d117adff2e3 Tested: standard presubmit bots Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338643 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Paul Berry <paulberry@google.com> |
||
|
|
1800039c2a |
Revert "[vm/ffi] Express FFI call closures explicitly in AST"
This reverts commit |
||
|
|
c20f9eaf6f |
[vm/ffi] Cleanup FFI call trampolines
After [1], FFI call sequence is generated inside a Dart closure function and separate FFI call trampolines are no longer used. This change removes all code related to FFI call trampolines. [1] https://dart-review.googlesource.com/c/sdk/+/339662 TEST=existing Change-Id: I0af0be6441009fb4db885ee172b0487f4796fd18 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/340302 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
|
|
fd2e9b9f1a |
[vm/ffi] Express FFI call closures explicitly in AST
Instead of implicitly creating closures for FFI
asFunction/lookupFunction APIs in the VM, now they are explicitly expressed in the kernel AST. That makes it possible to analyze
them in TFA.
FFI calls from Dart code into native are now performed in the following way:
```
block {
Pointer #ffiTarget0 = target;
@pragma('vm:ffi:call-closure', _FfiCall<Int32 Function(Int32)>(isLeaf: false))
#ffiClosure0(int arg1) {
_nativeEffect(arg1);
return _ffiCall<int>(#ffiTarget0);
}
} =>#ffiClosure0;
```
_ffiCall method is recognized by the VM and its call is replaced
directly with FFI calling sequence. _ffiCall uses closure
parameters implicitly. No extra trampolines are generated for FFI calls.
TEST=existing
Fixes https://github.com/dart-lang/sdk/issues/54172
Issue https://github.com/dart-lang/sdk/issues/39692
CoreLibraryReviewExempt: Implementation change only.
Change-Id: I92b3ff7391470686151ad0807e2cdbbf1a69d256
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/339662
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
|
||
|
|
40094c8cfd |
[vm/ffi] Unwrap typed data in FFI calls
Enables passing inner pointers to typed data in FFI leaf calls. This works for typed data's in the Dart heap, external typed datas (constructed from `Pointer.asTypedList`), and typed data views. Notable implementation details: 1. The Dart signature is used in the Marshaller now. This means it needs to keep track of whether there's a pointer argument in the signature (`asFunction`) or not (`@Native`). 2. Unwrapping is done in `FfiCallInstr::EmitNativeCode` before moving the arguments to their native location. This ensures we can use the assembler logic to load the `TypedDataBase::data` field. 3. The `XXXList` user visible classes don't have predefined cids. So the implementation uses symbols for comparison. 4. The type checking logic takes `isLeaf` as input to reject typed data. This leads to an error message about the type not accepted. Alternatively, we could consider adding an error message that specifically says the function should be leaf. 5. To cover all calling convention variants, tests are generated with up to 20 arguments. TEST=pkg/analyzer/test/src/diagnostics/ffi_unwrap_typed_data_test.dart TEST=tests/ffi/unwrap_typeddata_generated_native_test.dart TEST=tests/ffi/unwrap_typeddata_generated_test.dart TEST=tests/ffi/vmspecific_static_checks_typeddata_test.dart Closes: https://github.com/dart-lang/sdk/issues/44589 Change-Id: Ia78f18bf3238d42ac6882929b441f6dc432fcefe 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-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-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-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338620 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
a44a524bb0 |
[vm/ffi]: Add Native.addressOf
This adds the `Native.addressOf` function, which takes a constant tear- off of a method annotated with `@Native` as a parameter and returns a pointer to the underlying C function. The CFE will resolve these calls in two steps: First, the existing transformer for `@Native` methods adds a pragma describing the fully- resolved native annotation (with the asset id inferred from the library if not given explicitly). Then, the FFI use sites transformer rewrites calls to `Native.addressOf` by searching for this pragma on the passed function and passing the `Native` constants to `Native._addressOf`. The latter method is implemented in the VM, which can re-use existing parts already used for `@Native` calls. An alternative implementation strategy would have been to forward `addressOf` calls to `Native.ffi_resolver_function` directly without any special consideration in the VM. However, the chosen approach makes it easier to support static linking in the future, as this requires unresolved symbols in the generated assembly. Closes https://github.com/dart-lang/sdk/issues/50552 TEST=pkg/vm/testcases/transformations/ffi/ffinative.dart TEST=tests/ffi/native_assets/asset_*_test.dart TEST=tests/ffi/vmspecific_static_checks_ffinative_test.dart TEST=pkg/analyzer/test/src/diagnostics/ffi_native_test.dart Cq-Include-Trybots: luci.dart.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-kernel-precomp-linux-release-x64-try CoreLibraryReviewExempt: VM & dart2wasm only feature Change-Id: Ic8e3a390146dffd44c95578f975a4472db79a0ee Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333920 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> |
||
|
|
0310e41f2c |
[vm/ffi] Verify NativeFunctionPointer.asFunction type arguments
Protect VM compiler code from crashing when incorrect type arguments are passed to FFI _asFunctionInternal. Also, improve front-end FFI checks to reject Function as a Dart type corresponding to a NativeFunction<...> (it should be an actual function type). TEST=tests/ffi/vmspecific_static_checks_test.dart Fixes https://github.com/dart-lang/sdk/issues/52730 Change-Id: I02c012bb76d5c94f551da2c725a476b68c0f9db4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/339109 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> |
||
|
|
47357d8535 |
Reland "[vm/ffi] Optimize @Native calls"
Original change in patchset 1.
The reland contains a fix for handles. The objects passed in handles
must live on the stack (or in the heap) so that that memory location
can be used as a handle.
This CL introduces a new allocation policy `RequiresRegister` which
forces constants to be spilled to the stack during register
allocation.
Note: Parameters to FfiCall instructions are currently not used in a
way that can make the parameters assigned to registers. So only
constants are treated currently. If we have a way to reproduce params
being assigned to registers, then we can force spilling for
non-consts as well in the register allocator.
Original change's description:
> [vm/ffi] Optimize `@Native` calls
>
> This CL removes static fields for storing the `@Native`'s function
> addresses. Instead, the function addresses are stored in the object
> pool for all archs except for ia32. ia32 has no AOT and no AppJit
> snapshots, so the addresses are directly embedded in the code.
>
> This CL removes the closure wrapping for `@Native`s. Instead of
> `pointer.asFunctionInternal()()` where `asFunction` returns a closure
> which contains the trampoline, the function is compiled to a body
> which contains the trampoline `Native()`. This is possible for
> `@Native`s because the dylib and symbol names are known statically.
>
> Doing the compilation in kernel_to_il instead of a CFE transform
> enables supporting static linking later. (The alternative would have
> been to transform in the cfe to a `@pragma('vm:cachable-idempotent')`
> instead of constructing the IL in kernel_to_il.
>
> To enable running resolution in ia32 in kernel_to_il.cc, the
> resolution function has been made available via
> `runtime/lib/ffi_dynamic_library.h`.
>
> Because the new calls are simply static calls, the TFA can figure
> out const arguments flowing to these calls. This leads to constant
> locations in the parameters to FfiCalls. So, this CL also introduces
> logic to move constants into `NativeLocation`s.
TEST=tests/ffi/vmspecific_ffi_native_handles_test.dart
TEST=tests/ffi/function_*_native_(leaf_)test.dart
TEST=pkg/vm/testcases/transformations/ffi/ffinative_compound_return.dart
Closes: https://github.com/dart-lang/sdk/issues/47625
CoreLibraryReviewExempt: Internal FFI implementation changes
Change-Id: Ia1401b335524dcbf50c663a8770d9a02802923df
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-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-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-debug-x64c-try,vm-win-release-ia32-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333841
Reviewed-by: Slava Egorov <vegorov@google.com>
|
||
|
|
df4ef72c01 |
[vm/ffi] Remove deprecated FfiNative
TEST=pkg/analyzer/test/ TEST=CI build with class removed from `dart:ffi` Closes: https://github.com/dart-lang/sdk/issues/53923 CoreLibraryReviewExempt: VM & dart2wasm only. Change-Id: I45a39b623754f9f1b65cac55ea9adae390199f5d Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm64c-try,analyzer-analysis-server-linux-try,analyzer-mac-release-try,dart-sdk-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336960 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
c5c578e671 |
[vm, ffi] Don't read out-of-bounds when marshalling structs by value.
Switch the Windows ARM64 builds to use MSVC. Clang disagrees with itself about handling of small structs in variadic functions, allowing splitting between the last argument register and the stack as the callee but not as the caller. TEST=ci Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-release-arm-try,vm-ffi-android-release-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-linux-release-arm64-try,vm-mac-debug-arm64-try,vm-mac-release-arm64-try,vm-win-debug-arm64-try,vm-win-release-arm64-try,vm-ffi-qemu-linux-release-riscv64-try,vm-linux-debug-ia32-try,vm-linux-release-ia32-try,vm-win-release-ia32-try,vm-linux-debug-x64-try,vm-linux-release-x64-try,vm-mac-debug-x64-try,vm-mac-release-x64-try,vm-win-debug-x64-try,vm-win-release-x64-try Bug: https://github.com/dart-lang/sdk/issues/52644 Bug: https://github.com/dart-lang/sdk/issues/53829 Change-Id: I2fd6c40620a885479f11bb8528ca1e9df3948a2f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/331209 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Siva Annamalai <asiva@google.com> |
||
|
|
96921245f9 |
Revert "[vm/ffi] Optimize @Native calls"
This reverts commit
|
||
|
|
e16bb210d2 |
[vm/ffi] Optimize @Native calls
This CL removes static fields for storing the `@Native`'s function
addresses. Instead, the function addresses are stored in the object
pool for all archs except for ia32. ia32 has no AOT and no AppJit
snapshots, so the addresses are directly embedded in the code.
This CL removes the closure wrapping for `@Native`s. Instead of
`pointer.asFunctionInternal()()` where `asFunction` returns a closure
which contains the trampoline, the function is compiled to a body
which contains the trampoline `Native()`. This is possible for
`@Native`s because the dylib and symbol names are known statically.
Doing the compilation in kernel_to_il instead of a CFE transform
enables supporting static linking later. (The alternative would have
been to transform in the cfe to a `@pragma('vm:cachable-idempotent')`
instead of constructing the IL in kernel_to_il.
To enable running resolution in ia32 in kernel_to_il.cc, the
resolution function has been made available via
`runtime/lib/ffi_dynamic_library.h`.
Because the new calls are simply static calls, the TFA can figure
out const arguments flowing to these calls. This leads to constant
locations in the parameters to FfiCalls. So, this CL also introduces
logic to move constants into `NativeLocation`s.
TEST=runtime/vm/compiler/backend/il_test.cc
TEST=tests/ffi/function_*_native_(leaf_)test.dart
TEST=pkg/vm/testcases/transformations/ffi/ffinative_compound_return.dart
Closes: https://github.com/dart-lang/sdk/issues/47625
Closes: https://github.com/dart-lang/sdk/issues/51618
Change-Id: Ic5d017005dedcedea40c455c4d24dbe774f91603
CoreLibraryReviewExempt: Internal FFI implementation changes
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-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-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-debug-x64c-try,vm-win-release-ia32-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/284300
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
|
||
|
|
0dc86856ca |
Reland "[vm/compiler] Consistently use PointerBase.data values as FFiIntPtr."
This is a reland of commit |
||
|
|
cbe6cb8e2c |
Revert "Reland "[vm/compiler] Consistently use PointerBase.data ..."
Revert submission 332340 Reason for revert: Failures on SIMARM (not SIMARM_X64 though). Reverted changes: /q/submissionid:332340 Change-Id: I71399598b5efda7ade5ca1346bd25840c1cf0418 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333080 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> |
||
|
|
60d1a40462 |
Reland "[vm/compiler] Consistently use PointerBase.data values as FFiIntPtr."
This is a reland of commit
|
||
|
|
3cab7a2ce5 |
[vm] Canonicalize unboxed int constants
Constants should be canonicalized. Split off https://dart-review.googlesource.com/c/sdk/+/284300. TEST=Apparently not triggered by any current tests. TEST=Triggered by CL mentioned above. Change-Id: Icfa0728303d53dd61607addeab2d09552f30a296 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332686 Reviewed-by: Tess Strickland <sstrickl@google.com> Auto-Submit: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
991f1aa248 |
[cfe] Add offset serialization to remaining Expression nodes without them.
Expressions missing offsets were: - LogicalExpression - ConditionalExpression - Not - BlockExpression - Instantiation - TypedefTearOff* * I'm not sure how TypedefTearOff is actually being used, I don't see reference to it in the VM runtime. Unless the CFE lowers it before the VM gets it. I also added a test on `binary.md` that ensures all expressions include a file offset in their serialized format. This can be expanded to statements if offsets are added to the remaining statement nodes without offsets. TEST=Added binary_md_git_test.dart to ensure all expressions contain offset data going forward. Change-Id: Ieaf80545f388b209f76be44db86ef07e80c8ad66 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/331540 Reviewed-by: Jens Johansen <jensj@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Nate Biggs <natebiggs@google.com> |
||
|
|
0cd55a18c1 |
[vm] Introduce cachable idempotent calls
Adds a `CachableIdempotentCallInstr` that can be invoked via
`@pragma('vm:cachable-idempotent')` if the call-sites is force
optimized.
The object pool is not visited by the scavenger. So, we store the
results as unboxed integers. Consequently, only dart functions that
return integers can be cached.
Cachable idempotent calls should never be inlined. After the first
call the function not be called again.
The call itself is on a slow path to avoid register spilling on the
fast path.
TEST=vm/cc/IRTest_CachableIdempotentCall
TEST=runtime/tests/vm/dart/cachable_idempotent_test.dart
Bug: https://github.com/dart-lang/sdk/issues/51618
Change-Id: I612e896f27add76f57796c060157e14cc687a0fd
Cq-Include-Trybots: luci.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-simarm_x64-try,vm-aot-linux-debug-simriscv64-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-tsan-linux-release-x64-try,vm-aot-ubsan-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-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-simriscv64-try,vm-linux-debug-x64-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-tsan-linux-release-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/+/301601
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
|
||
|
|
3a41ee6d8d |
Revert "[vm/compiler] Consistently use PointerBase.data values as FFiIntPtr."
This reverts commit
|
||
|
|
5c4fd50667 |
[vm/compiler] Consistently use PointerBase.data values as FFiIntPtr.
Also if converting an unboxed int with only non-negative values that fit in 32 bits to a uint32, then keep the range from the value. TEST=regress_306327173_il_test Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try Change-Id: Id9e7c2d5f477e560822a02574739c57d77b5a6d1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332202 Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> |
||
|
|
b8c6c4d187 |
[vm, ffi] Handle MultipleNativeLocations that aren't just byte copies.
TEST=ffi/*structs_by_value* Bug: https://github.com/dart-lang/sdk/issues/48645 Change-Id: I28a139aec3370be9799279325717057d7034b341 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/332141 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Daco Harkes <dacoharkes@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> |
||
|
|
293cc6475a |
[vm/aot/tfa] Whole-program propagation of closure values
This change adds propagation of closure values to TFA. For now, inferred closure values are used only when they are constant (tear-off of a static method or a constructor). Arbitrary closures can now be referenced from unrelated members via closure-id metadata. In addition, this change fixes an incorrect stack trace when an implicit closure (tear-off) was propagated and its call was inlined. Inlining interval was not recorded because of the missing source position of a call to a target method within implicit closure. TEST=pkg/vm/testcases/transformations/type_flow/transformer/closures.dart Issue: https://github.com/dart-lang/sdk/issues/39692 Change-Id: I3590da91b6057e0b55a8614382dba1bbcc267b39 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325447 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> |
||
|
|
175c949398 |
[cfe] Fix more cases of kernel AST serializer missing file offset.
Dart2JS uses the file offset on these nodes to create JS source maps. We want to maintain these file offsets across the serialization layer when we compile from dill files rather than directly from sources. This last CL resolves all diffs observed in test files in pkg/compiler/test/inference/data. TEST=Updating tests for all of these in fasta offsets tests. Change-Id: If84c7542b61c8d8b894b202c68841ccfe91dafa5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/328080 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Nate Biggs <natebiggs@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> |
||
|
|
ef1c3098a1 |
[vm, compiler] Implement unboxed SIMD for RISC-V via lowering.
This relands commit
|
||
|
|
cb39b9ff07 |
Revert "[vm/compiler] Perform inlining of _TypedList._getX in AOT."
This reverts commit
|
||
|
|
af7cbd2a04 |
[cfe] Fix kernel AST nodes serialized format missing file offset.
Dart2JS uses the file offset on these nodes to create JS source maps. We want to maintain these file offsets across the serialization layer when we compile from dill files rather than directly from sources. Dart2JS tests were serializing via `--test-mode` flag and thus had incorrect source locations for some stack traces. TEST=Updating tests for all of these in fasta offsets tests. Change-Id: I33862462fbff84d88f8c51bdeb1efc5771cfb8b2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/327160 Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Nate Biggs <natebiggs@google.com> |
||
|
|
6673f84d59 |
[vm/compiler] Perform inlining of _TypedList._getX in AOT.
Before, the inliner only replaced calls to the _TypedList._getX methods with specialized IL if speculation was allowed. This means that the inlining would not happen in AOT mode, even though the generated IL does not require speculation. In addition, this CL replaces the native functions used for the base definition of _TypedList._getX and _TypedList._setX with versions built in the FlowGraphBuilder. With this, the VM avoids the overhead of going to the runtime for a native call when these methods are not inlined, which should also reduce the impact of a failure to inline. TEST=vm/dart/inline_TypedList_getUint32 Issue: https://github.com/dart-lang/sdk/issues/53513 Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-linux-release-x64-try,vm-mac-release-arm64-try,vm-kernel-precomp-linux-release-x64-try Change-Id: I66b6b8634b2b9b413fb745f02433eb58f2ff913e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325703 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> |
||
|
|
4b9c7c05d4 |
[vm, dart2wasm] Early lowering of FunctionTearOff nodes
FunctionTearOff node represents a tear-off of the 'call' method of a Function, so it is basically a no-op: FunctionTearOff(receiver) == receiver So we can remove this node early, during lowering transformation on kernel AST and clean up handling of FunctionTearOff nodes from the VM and dart2wasm compilation pipelines. TEST=ci Change-Id: Ia1500a066a0261076162e018ff0ab502258f606f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325924 Reviewed-by: Ömer Ağacan <omersa@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> |
||
|
|
7ff975c2e5 |
[vm/compiler] Fix InferredTypeMetadata::IsTrivial
`IsTrivial` is supposed to return true iff `ToCompileType` would produce a trivial (dynamic) type. However `IsTrivial` was taking some of the irrevant parts of the `InferredTypeMetadata` into account - meaning that it returned `false` where it should have returned `true`. This lead us to assign useless `dynamic` result type to various `StaticCall`, some of these calls can later be lowered to `LoadIndexed` instructions, which will then also get the `dynamic` result type. This useless type will then take priority over more precise element type which could be inferred by `LoadIndexedInstr::ComputeType` TEST=vm/dart/load_indexed_trivial_type_il_test Cq-Include-Trybots: luci.dart.try:vm-aot-linux-release-x64-try,vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-android-release-arm64c-try Change-Id: I69ee965ba0d0ac85ede3989680371f0dda19d8a9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325302 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Slava Egorov <vegorov@google.com> |
||
|
|
3f53d22d43 |
[vm/compiler] Create leaf runtime entry for memmove.
Instead of making a StaticCall to _TypedListBase.nativeSetRange
inside _memMoveN, make a CCall to the memmove leaf runtime entry.
Rename _TypedListBase._nativeSetRange to _setClampedRange, since
it's now only used when per-element clamping is necessary.
Fix the load optimizer so that loads of unboxed fields from freshly
allocated objects do not have the tagged null value forwarded
as their initial post-allocation value.
TEST=co19{,_2}/LibTest/typed_data lib{,_2}/typed_data
corelib{,_2}/list_test
vm/cc/LoadOptimizer_LoadDataFieldOfNewTypedData
Issue: https://github.com/dart-lang/sdk/issues/42072
Change-Id: Ib82e24a5b3287fa53099fffd3b563a27d777507e
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-msan-linux-release-x64-try,vm-msan-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-tsan-linux-release-x64-try,vm-linux-release-x64-try,vm-mac-release-arm64-try,vm-kernel-precomp-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324080
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
|
||
|
|
a503edf481 |
[cfe] Fix kernel (de-)serialization missing field offset on FieldInitializer.
We are experiencing diffs in Dart2JS source maps in `--test-mode` which does a serialization round trip. JS that should map to default parameters is instead mapping to the surrounding `Constructor` member since the FieldInitializer's offset is getting dropped. This is affecting any Dart2JS split action build since those all end of serialiaing and deserializing the kernel. Any other tools using this serialization would also be affected. TEST=Existing/will add in follow up. Bug: https://github.com/dart-lang/sdk/issues/53466 Change-Id: Ibeccf9153c78e6c358806c7ded4dbc2dea49d8e6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325020 Commit-Queue: Nate Biggs <natebiggs@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> |
||
|
|
1da590fc3f |
Fix type promotion of late final fields on DDC and dart2wasm.
When the CFE compiles code for DDC or dart2wasm, it lowers late final fields to synthetic getters. In order to ensure that accesses to these fields can still be type promoted, a flag is added to the kernel `Procedure` class, to indicate that a getter was produced by lowering a late final field. When deciding whether a property access is promotable, the CFE checks this flag; if it's set, it treats the getter like a field. Includes a language test validating the fix. Fixes https://github.com/dart-lang/sdk/issues/53462. TEST=tests/language/inference_update_2/late_field_test.dart Change-Id: I98b81f04a3342d851060e5b2a7265323b93bb4e3 Bug: https://github.com/dart-lang/sdk/issues/53462 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324767 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Paul Berry <paulberry@google.com> Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> |
||
|
|
3bbe27eadf |
[vm/compiler] Perform word-sized copies in MemoryMove when possible.
When copying elements that are smaller than words on non-X86
architectures, only copy element by element until the remaining elements
can be copied in word-sized chunks, and then do so.
TEST=vm/cc/IRTest_Memory, co19{,_2}/LibTest/typed_data,
lib{,_2}/typed_data, corelib{,_2}/list_test
Issue: https://github.com/dart-lang/sdk/issues/42072
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-simriscv64-try,vm-linux-debug-simriscv64-try,vm-mac-debug-arm64-try,vm-aot-linux-release-simarm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-mac-release-arm64-try,vm-ffi-qemu-linux-release-riscv64-try,vm-ffi-qemu-linux-release-arm-try,vm-linux-release-simarm-try,vm-linux-release-simarm64-try,vm-mac-release-arm64-try,vm-aot-android-release-arm64c-try,vm-ffi-android-debug-arm64c-try
Change-Id: I61eab310b92a6bc5ebd88fa63d562103d887cb74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324280
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
|
||
|
|
b2773528d0 |
[vm, reload] Mark call to _nativeSetRange as no-rebind.
This is a magical direct call, not a Dart language static call. Don't attempt to re-lookup. TEST=reload Bug: https://github.com/dart-lang/sdk/issues/53430 Change-Id: I4b0fd2491f7d41e5f6180970abbd43e871bd18b5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324263 Reviewed-by: Tess Strickland <sstrickl@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> |
||
|
|
b94d3f730d |
[vm/compiler] Move setRange bounds checking entirely into Dart.
The bounds checking was implemented in Dart previously, but this
removes _checkSetRangeArguments, inlining it into
_TypedListBase.setRange, renames _checkBoundsAndMemcpyN to _memMoveN
since it no longer performs bounds checking, and also removes the now
unneeded bounds checking from the native function TypedData_setRange.
TEST=co19{,_2}/LibTest/typed_data lib{,_2}/typed_data
corelib{,_2}/list_test
Issue: https://github.com/dart-lang/sdk/issues/42072
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-linux-release-x64-try,vm-mac-release-arm64-try,vm-kernel-precomp-linux-release-x64-try
Change-Id: I85ec751708f603f68729f4109d7339dd8407ae77
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324102
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
|
||
|
|
c93f924c82 |
[vm/compiler] Further optimize setRange on TypedData receivers.
When setRange is called on a TypedData receiver and the source is also a TypedData object with the same element size and clamping is not required, the VM implementation now calls _boundsCheckAndMemcpyN for element size N. The generated IL for these methods performs the copy using the MemoryCopy instruction (mostly, see the note below). Since the two TypedData objects might have the same underlying buffer, the CL adds a can_overlap flag to the MemoryCopy instruction which checks for overlapping regions. If can_overlap is set, then the copy is performed backwards instead of forwards when needed to ensure that elements of the source region are read before they are overwritten. The existing uses of the MemoryCopy instruction are adjusted as follows: * The IL generated for copyRangeFromUint8ListToOneByteString passes false for can_overlap, as all uses currently ensure that the OneByteString is non-external and thus cannot overlap. * The IL generated for _memCopy, used by the FFI library, passes true for can_overlap, as there is no guarantee that the regions pointed at by the Pointer objects do not overlap. The MemoryCopy instruction has also been adjusted so that all numeric inputs (the two start offsets and the length) are either boxed or unboxed instead of just the length. This exposed an issue in the inliner, where unboxed constants in the callee graph were replaced with boxed constants when inlining into the caller graph, since withList calls setRange with constant starting offsets of 0. Now the representation of constants in the callee graph are preserved when inlining the callee graph into the caller graph. Fixes https://github.com/dart-lang/sdk/issues/51237 by using TMP and TMP2 for the LDP/STP calls in the 16-byte element size case, so no temporaries need to be allocated for the instruction. On ARM when not unrolling the memory copy loop, uses TMP and a single additional temporary for LDM/STM calls in the 8-byte and 16-byte element cases, with the latter just using two LDM/STM calls within the loop, a different approach than the one described in https://github.com/dart-lang/sdk/issues/51229 . Note: Once the number of elements being copied reaches a certain threshold (1048576 on X86, 256 otherwise), _boundsCheckAndMemcpyN instead calls _nativeSetRange, which is a native call that uses memmove from the standard C library for non-clamped inputs. It does this because the code currently emitted for MemoryCopy performs poorly compared to the more optimized memmove implementation when copying larger regions of memory. Notable benchmark changes for dart-aot: * X64 * TypedDataDuplicate.*.fromList improvement from ~13%-~250% * Uf8Encode.*.10 improvement from ~50%-~75% * MapCopy.Map.*.of.Map.* improvement from ~13%-~65% * MemoryCopy.*.setRange.* improvement from ~13%-~500% * ARM7 * Uf8Encode.*.10 improvement from ~35%-~70% * MapCopy.Map.*.of.Map.* improvement from ~6%-~75% * MemoryCopy.*.setRange.{8,64} improvement from ~22%-~500% * Improvement of ~100%-~200% for MemoryCopy.512.setRange.*.Double * Regression of ~40% for MemoryCopy.512.setRange.*.Uint8 * Regression of ~85% for MemoryCopy.4096.setRange.*.Uint8 * ARM8 * Uf8Encode.*.10 improvement from ~35%-~70% * MapCopy.Map.*.of.Map.* improvement from ~7%-~75% * MemoryCopy.*.setRange.{8,64} improvement from ~22%-~500% * Improvement of ~75%-~160% for MemoryCopy.512.setRange.*.Double * Regression of ~40% for MemoryCopy.512.setRange.*.Uint8 * Regression of ~85% for MemoryCopy.4096.setRange.*.Uint8 TEST=vm/cc/IRTest_Memory, co19{,_2}/LibTest/typed_data, lib{,_2}/typed_data, corelib{,_2}/list_test Issue: https://github.com/dart-lang/sdk/issues/42072 Issue: b/294114694 Issue: b/259315681 Change-Id: Ic75521c5fe10b952b5b9ce5f2020c7e3f03672a9 Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-simriscv64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-kernel-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-simriscv64-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-aot-linux-release-simarm64-try,vm-aot-linux-release-simarm_x64-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-ffi-qemu-linux-release-riscv64-try,vm-ffi-qemu-linux-release-arm-try,vm-aot-msan-linux-release-x64-try,vm-msan-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-tsan-linux-release-x64-try,vm-linux-release-ia32-try,vm-linux-release-simarm-try,vm-linux-release-simarm64-try,vm-linux-release-x64-try,vm-mac-release-arm64-try,vm-mac-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-aot-android-release-arm64c-try,vm-ffi-android-debug-arm64c-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/319521 Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> |
||
|
|
b9045af57b |
[vm] Cleanup lookups in the library import
Lookup in the library import can be very slow and it is not needed
most of the time. This change makes Library::Lookup{Class,Function,Field}[AllowPrivate]
lookups local in the library and cleans up related or unused code.
TEST=ci
Change-Id: If5a99bce7d712ce3a898395f74d4febac0311048
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323221
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
|
||
|
|
8a85dac792 |
[vm/compiler] Avoid searching static functions in the imported libraries
References to members are fully resolved in kernel. So, when looking for a static function in the library scope, there is no need to search in the imported libraries. Searching in the imported libraries could be very slow as they can be huge (e.g. the whole Flutter framework). Fixes https://github.com/flutter/flutter/issues/133195 TEST=manually verified repro from https://github.com/flutter/flutter/issues/133195 Change-Id: Ia7e19a6ceaac291192c34b96587dad5cb4b80aad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323201 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> |
||
|
|
e8d7425c4e |
[vm/ffi] Closure callbacks for sync callbacks
Bug: https://github.com/dart-lang/sdk/issues/52689 Change-Id: I54be397cfbf8519fe5b5a51b793fe46d602124d9 Fixes: https://github.com/dart-lang/sdk/issues/52689 Bug: https://github.com/dart-lang/sdk/issues/53096 TEST=isolate_local_function_callbacks_test.dart, plus generated tests and additions to existing tests CoreLibraryReviewExempt: The isolate and FFI packages are VM-only Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/317060 Commit-Queue: Liam Appelbe <liama@google.com> Reviewed-by: Liam Appelbe <liama@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> |
||
|
|
9f40ce6e3d |
[vm/aot] Use inferred types of captured local variables
On a micro-benchmark from https://github.com/dart-lang/sdk/issues/48764 in AOT mode, 'for-in' case: Before: 0.556557s After: 0.166579s (3.3x faster) TEST=runtime/tests/vm/dart/regress_48764_il_test.dart Issue https://github.com/dart-lang/sdk/issues/48764 Fixes https://github.com/dart-lang/sdk/issues/51102 Change-Id: I591739b8c2154931f6c535db57c0c11ba0eeb4a5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/321543 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
6ca7cca807 |
[vm] Cleanup handling of for-in statements
For-in statements are desugared on kernel AST, so handling of these statements in the VM is a dead code and can be removed. TEST=ci Change-Id: Ic06080ee5d1b2ab74c55c400746f38a420668531 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/321560 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> |
||
|
|
47bc86cdc6 |
[vm] Cleanup handling of const local variables
All constants including const local variables are evaluated in the front-end. TEST=ci Change-Id: I0062f5ac021b335ceb60c93ef8c230b49ec11a07 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/321540 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> |
||
|
|
caafea0aee |
[kernel] Rename ExtensionType.instantiatedRepresentationType to typeErasure
To align with the specification. TEST=existing Change-Id: I7a9f21473c860b90f051bf9bc3361dfd7786c40c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/320521 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com> |
||
|
|
749e612d29 |
[vm/ffi] Consistently treat handles as int32 in IL on 32 bit archs
We were treating the handle inconsistently as int32 and uint32 on 32 bit platforms, leading to intconvertor instructions being inserted. The marshaller was already documenting we don't ever expose the int value of the handle to users, so there is no need to ever treat it as uint32. TEST=ffi/regress_jump_to_frame_test TEST=ffi/vmspecific_handle_test Closes: https://github.com/dart-lang/sdk/issues/53224 Change-Id: Ibf8a7922b8bf65c22767b0eb3994ba63643ce539 Cq-Include-Trybots: luci.dart.try:vm-linux-debug-ia32-try,vm-ffi-android-debug-arm-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/321081 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
d9a5f25e6d |
[vm] Fix gcc build
TEST=ci Change-Id: Ifb4f451953e3c4d6c42cafb20e992f970853a8a8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/320881 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> |