dbfd00f44d
Based on the unified typed data layout, we can now inline accesses to typed data interface classes if there are no 3rd party implementations of those interfaces. Example: If a receiver is of type Uint8List and we call `[]` or `[]=` we will inline the byte access. Instead of changing the existing inliner / call specializer we add this as an extra pass: If the inliner / call specializer infer that the receiver type is e.g. internal typed data then it will perform the inlining itself using more optimized LoadIndexed instruction. => Only if those existing optimization passes have not been able to inline the access will we, later on in the compilation pipeline, run a specialized pass which will inline the accesses using LoadUntagged + LoadIndexed (which is slightly less efficient than using only LoadIndexed for internal typed data). As a first step this is only done for AOT. For ease of writing tests matching certain IR graphs this CL also adds a IR pattern matcher. Issue https://github.com/dart-lang/sdk/issues/35154 Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try, vm-dartkb-linux-debug-x64-try, vm-dartkb-linux-release-x64-try, vm-kernel-asan-linux-release-x64-try, vm-kernel-checked-linux-release-x64-try, vm-kernel-linux-debug-ia32-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-linux-debug-x64-try, vm-kernel-linux-product-x64-try, vm-kernel-linux-release-ia32-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try, vm-kernel-linux-release-simdbc64-try, vm-kernel-linux-release-x64-try, vm-kernel-optcounter-threshold-linux-release-ia32-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try, vm-kernel-precomp-win-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-reload-linux-debug-x64-try, vm-kernel-reload-linux-release-x64-try, vm-kernel-reload-rollback-linux-debug-x64-try, vm-kernel-reload-rollback-linux-release-x64-try, vm-kernel-win-debug-ia32-try, vm-kernel-win-debug-x64-try, vm-kernel-win-product-x64-try, vm-kernel-win-release-ia32-try, vm-kernel-win-release-x64-try Change-Id: I5f2e01a55f46b473f64478b05679f65b9fd7c4c8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98662 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>