f5d1229081
This change extends/fixes the exiting "pattern recognition" which tries to recognize the pattern v2 <- LoadClassIdInstr(v1) BranchIf v2 == IntegerConstant(cid) Furthermore we start inlining the recognized `ClassID.getID` method very early in the pipeline. This allows the VM to recognize the above pattern and insert redefinitions before the actual inlining pass. Furthermore we special-case two very hot methods in utf8 decoding by manually having two loops, one of which is guarded by a class-id check against the _Uint8ArrayView class, which is most common. (In the future we would like to unify the typed data layouts so we no longer need to use `ClassId.getID`, thereby also allowing non core library code to use this). This improves dart-aot by * 31%+ for a protobuf decoding benchmark we care about Issue https://github.com/dart-lang/sdk/issues/31954 Change-Id: I7181bbf096aabe303634fd3b2bff9cc96d69719c Reviewed-on: https://dart-review.googlesource.com/c/85443 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
15 lines
486 B
Dart
15 lines
486 B
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// part of "internal_patch.dart";
|
|
|
|
@pragma("vm:entry-point")
|
|
class ClassID {
|
|
@pragma("vm:entry-point")
|
|
@pragma("vm:exact-result-type", "dart:core#_Smi")
|
|
static int getID(Object value) native "ClassID_getID";
|
|
|
|
// VM injects class id constants into this class.
|
|
}
|