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

Side by Side Diff: runtime/vm/intermediate_language.cc

Issue 2997173002: [vm] Remove Dart_MakeExternalString and --support-externalizable-strings (Closed)
Patch Set: Update vm.status Created 3 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #if !defined(DART_PRECOMPILED_RUNTIME) 5 #if !defined(DART_PRECOMPILED_RUNTIME)
6 6
7 #include "vm/intermediate_language.h" 7 #include "vm/intermediate_language.h"
8 8
9 #include "vm/bit_vector.h" 9 #include "vm/bit_vector.h"
10 #include "vm/bootstrap.h" 10 #include "vm/bootstrap.h"
(...skipping 26 matching lines...) Expand all
37 "Propagate IC data from unoptimized to optimized IC calls."); 37 "Propagate IC data from unoptimized to optimized IC calls.");
38 DEFINE_FLAG(bool, 38 DEFINE_FLAG(bool,
39 two_args_smi_icd, 39 two_args_smi_icd,
40 true, 40 true,
41 "Generate special IC stubs for two args Smi operations"); 41 "Generate special IC stubs for two args Smi operations");
42 DEFINE_FLAG(bool, 42 DEFINE_FLAG(bool,
43 unbox_numeric_fields, 43 unbox_numeric_fields,
44 !USING_DBC, 44 !USING_DBC,
45 "Support unboxed double and float32x4 fields."); 45 "Support unboxed double and float32x4 fields.");
46 DECLARE_FLAG(bool, eliminate_type_checks); 46 DECLARE_FLAG(bool, eliminate_type_checks);
47 DECLARE_FLAG(bool, support_externalizable_strings);
48 47
49 #if defined(DEBUG) 48 #if defined(DEBUG)
50 void Instruction::CheckField(const Field& field) const { 49 void Instruction::CheckField(const Field& field) const {
51 ASSERT(field.IsZoneHandle()); 50 ASSERT(field.IsZoneHandle());
52 ASSERT(!Compiler::IsBackgroundCompilation() || !field.IsOriginal()); 51 ASSERT(!Compiler::IsBackgroundCompilation() || !field.IsOriginal());
53 } 52 }
54 #endif // DEBUG 53 #endif // DEBUG
55 54
56 Definition::Definition(intptr_t deopt_id) 55 Definition::Definition(intptr_t deopt_id)
57 : Instruction(deopt_id), 56 : Instruction(deopt_id),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 return (*a)->cid_start - (*b)->cid_start; 140 return (*a)->cid_start - (*b)->cid_start;
142 } 141 }
143 142
144 static int OrderByFrequency(CidRange* const* a, CidRange* const* b) { 143 static int OrderByFrequency(CidRange* const* a, CidRange* const* b) {
145 const TargetInfo* target_info_a = static_cast<const TargetInfo*>(*a); 144 const TargetInfo* target_info_a = static_cast<const TargetInfo*>(*a);
146 const TargetInfo* target_info_b = static_cast<const TargetInfo*>(*b); 145 const TargetInfo* target_info_b = static_cast<const TargetInfo*>(*b);
147 // Negative if 'a' should sort before 'b'. 146 // Negative if 'a' should sort before 'b'.
148 return target_info_b->count - target_info_a->count; 147 return target_info_b->count - target_info_a->count;
149 } 148 }
150 149
151 bool Cids::ContainsExternalizableCids() const {
152 for (intptr_t i = 0; i < length(); i++) {
153 for (intptr_t cid = cid_ranges_[i]->cid_start;
154 cid <= cid_ranges_[i]->cid_end; cid++) {
155 if (Field::IsExternalizableCid(cid)) {
156 return true;
157 }
158 }
159 }
160 return false;
161 }
162
163 bool Cids::Equals(const Cids& other) const { 150 bool Cids::Equals(const Cids& other) const {
164 if (length() != other.length()) return false; 151 if (length() != other.length()) return false;
165 for (int i = 0; i < length(); i++) { 152 for (int i = 0; i < length(); i++) {
166 if (cid_ranges_[i]->cid_start != other.cid_ranges_[i]->cid_start || 153 if (cid_ranges_[i]->cid_start != other.cid_ranges_[i]->cid_start ||
167 cid_ranges_[i]->cid_end != other.cid_ranges_[i]->cid_end) { 154 cid_ranges_[i]->cid_end != other.cid_ranges_[i]->cid_end) {
168 return false; 155 return false;
169 } 156 }
170 } 157 }
171 return true; 158 return true;
172 } 159 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 ASSERT(number_of_checks != 1 || !cids[0].IsSingleCid() || 271 ASSERT(number_of_checks != 1 || !cids[0].IsSingleCid() ||
285 cids[0].cid_start != kSmiCid); 272 cids[0].cid_start != kSmiCid);
286 } 273 }
287 274
288 bool CheckClassInstr::AttributesEqual(Instruction* other) const { 275 bool CheckClassInstr::AttributesEqual(Instruction* other) const {
289 CheckClassInstr* other_check = other->AsCheckClass(); 276 CheckClassInstr* other_check = other->AsCheckClass();
290 ASSERT(other_check != NULL); 277 ASSERT(other_check != NULL);
291 return cids().Equals(other_check->cids()); 278 return cids().Equals(other_check->cids());
292 } 279 }
293 280
294 EffectSet CheckClassInstr::Dependencies() const {
295 // Externalization of strings via the API can change the class-id.
296 return cids_.ContainsExternalizableCids() ? EffectSet::Externalization()
297 : EffectSet::None();
298 }
299
300 EffectSet CheckClassIdInstr::Dependencies() const {
301 // Externalization of strings via the API can change the class-id.
302 for (intptr_t i = cids_.cid_start; i <= cids_.cid_end; i++) {
303 if (Field::IsExternalizableCid(i)) return EffectSet::Externalization();
304 }
305 return EffectSet::None();
306 }
307
308 bool CheckClassInstr::IsDeoptIfNull() const { 281 bool CheckClassInstr::IsDeoptIfNull() const {
309 if (!cids().IsMonomorphic()) { 282 if (!cids().IsMonomorphic()) {
310 return false; 283 return false;
311 } 284 }
312 CompileType* in_type = value()->Type(); 285 CompileType* in_type = value()->Type();
313 const intptr_t cid = cids().MonomorphicReceiverCid(); 286 const intptr_t cid = cids().MonomorphicReceiverCid();
314 // Performance check: use CheckSmiInstr instead. 287 // Performance check: use CheckSmiInstr instead.
315 ASSERT(cid != kSmiCid); 288 ASSERT(cid != kSmiCid);
316 return in_type->is_nullable() && (in_type->ToNullableCid() == cid); 289 return in_type->is_nullable() && (in_type->ToNullableCid() == cid);
317 } 290 }
(...skipping 3743 matching lines...) Expand 10 before | Expand all | Expand 10 after
4061 } 4034 }
4062 set_is_auto_scope(auto_setup_scope); 4035 set_is_auto_scope(auto_setup_scope);
4063 set_native_c_function(native_function); 4036 set_native_c_function(native_function);
4064 } 4037 }
4065 4038
4066 #undef __ 4039 #undef __
4067 4040
4068 } // namespace dart 4041 } // namespace dart
4069 4042
4070 #endif // !defined(DART_PRECOMPILED_RUNTIME) 4043 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698