Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(653)

Unified Diff: runtime/vm/jit_optimizer.cc

Issue 1961393002: VM: Optimized code for all of [External]{One|Two}ByteString::codeUnitAt. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: addressed comment Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/intrinsifier_x64.cc ('k') | runtime/vm/method_recognizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/jit_optimizer.cc
diff --git a/runtime/vm/jit_optimizer.cc b/runtime/vm/jit_optimizer.cc
index b0be614a3c0735411605ff31e0073ed474d39d27..f4d875764247d3588c74141c0ec99e527712da83 100644
--- a/runtime/vm/jit_optimizer.cc
+++ b/runtime/vm/jit_optimizer.cc
@@ -755,7 +755,7 @@ static bool IsLengthOneString(Definition* d) {
return false;
}
} else {
- return d->IsStringFromCharCode();
+ return d->IsOneByteStringFromCharCode();
}
}
@@ -789,9 +789,10 @@ bool JitOptimizer::TryStringLengthOneEquality(InstanceCallInstr* call,
ConstantInstr* char_code_left = flow_graph()->GetConstant(
Smi::ZoneHandle(Z, Smi::New(static_cast<intptr_t>(str.CharAt(0)))));
left_val = new(Z) Value(char_code_left);
- } else if (left->IsStringFromCharCode()) {
+ } else if (left->IsOneByteStringFromCharCode()) {
// Use input of string-from-charcode as left value.
- StringFromCharCodeInstr* instr = left->AsStringFromCharCode();
+ OneByteStringFromCharCodeInstr* instr =
+ left->AsOneByteStringFromCharCode();
left_val = new(Z) Value(instr->char_code()->definition());
to_remove_left = instr;
} else {
@@ -801,9 +802,10 @@ bool JitOptimizer::TryStringLengthOneEquality(InstanceCallInstr* call,
Definition* to_remove_right = NULL;
Value* right_val = NULL;
- if (right->IsStringFromCharCode()) {
+ if (right->IsOneByteStringFromCharCode()) {
// Skip string-from-char-code, and use its input as right value.
- StringFromCharCodeInstr* right_instr = right->AsStringFromCharCode();
+ OneByteStringFromCharCodeInstr* right_instr =
+ right->AsOneByteStringFromCharCode();
right_val = new(Z) Value(right_instr->char_code()->definition());
to_remove_right = right_instr;
} else {
@@ -1764,11 +1766,24 @@ bool JitOptimizer::TryInlineInstanceMethod(InstanceCallInstr* call) {
return true;
}
- if (((recognized_kind == MethodRecognizer::kStringBaseCodeUnitAt) ||
- (recognized_kind == MethodRecognizer::kStringBaseCharAt)) &&
- (ic_data.NumberOfChecks() == 1) &&
- ((class_ids[0] == kOneByteStringCid) ||
- (class_ids[0] == kTwoByteStringCid))) {
+ if ((recognized_kind == MethodRecognizer::kOneByteStringCodeUnitAt) ||
+ (recognized_kind == MethodRecognizer::kTwoByteStringCodeUnitAt) ||
+ (recognized_kind == MethodRecognizer::kExternalOneByteStringCodeUnitAt) ||
+ (recognized_kind == MethodRecognizer::kExternalTwoByteStringCodeUnitAt)) {
+ ASSERT(ic_data.NumberOfChecks() == 1);
+ ASSERT((class_ids[0] == kOneByteStringCid) ||
+ (class_ids[0] == kTwoByteStringCid) ||
+ (class_ids[0] == kExternalOneByteStringCid) ||
+ (class_ids[0] == kExternalTwoByteStringCid));
+ return TryReplaceInstanceCallWithInline(call);
+ }
+
+ if ((recognized_kind == MethodRecognizer::kStringBaseCharAt) &&
+ (ic_data.NumberOfChecks() == 1)) {
+ ASSERT((class_ids[0] == kOneByteStringCid) ||
+ (class_ids[0] == kTwoByteStringCid) ||
+ (class_ids[0] == kExternalOneByteStringCid) ||
+ (class_ids[0] == kExternalTwoByteStringCid));
return TryReplaceInstanceCallWithInline(call);
}
« no previous file with comments | « runtime/vm/intrinsifier_x64.cc ('k') | runtime/vm/method_recognizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698