OLD | NEW |
---|---|
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 #include "vm/intermediate_language.h" | 5 #include "vm/intermediate_language.h" |
6 | 6 |
7 #include "vm/bit_vector.h" | 7 #include "vm/bit_vector.h" |
8 #include "vm/constant_propagator.h" | 8 #include "vm/constant_propagator.h" |
9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 19 matching lines...) Expand all Loading... | |
30 | 30 |
31 DEFINE_FLAG(bool, ic_range_profiling, true, | 31 DEFINE_FLAG(bool, ic_range_profiling, true, |
32 "Generate special IC stubs collecting range information " | 32 "Generate special IC stubs collecting range information " |
33 "for binary and unary arithmetic operations"); | 33 "for binary and unary arithmetic operations"); |
34 DEFINE_FLAG(bool, propagate_ic_data, true, | 34 DEFINE_FLAG(bool, propagate_ic_data, true, |
35 "Propagate IC data from unoptimized to optimized IC calls."); | 35 "Propagate IC data from unoptimized to optimized IC calls."); |
36 DEFINE_FLAG(bool, two_args_smi_icd, true, | 36 DEFINE_FLAG(bool, two_args_smi_icd, true, |
37 "Generate special IC stubs for two args Smi operations"); | 37 "Generate special IC stubs for two args Smi operations"); |
38 DEFINE_FLAG(bool, unbox_numeric_fields, true, | 38 DEFINE_FLAG(bool, unbox_numeric_fields, true, |
39 "Support unboxed double and float32x4 fields."); | 39 "Support unboxed double and float32x4 fields."); |
40 DEFINE_FLAG(bool, fields_may_be_reset, false, | |
41 "Don't optimize away static field initialization"); | |
hausner
2015/09/10 22:55:12
The flag name and the description are quite differ
rmacnak
2015/09/11 00:07:13
Added:
// When precompiling, the fact that a fi
| |
40 DECLARE_FLAG(bool, eliminate_type_checks); | 42 DECLARE_FLAG(bool, eliminate_type_checks); |
41 DECLARE_FLAG(bool, trace_optimization); | 43 DECLARE_FLAG(bool, trace_optimization); |
42 DECLARE_FLAG(bool, throw_on_javascript_int_overflow); | 44 DECLARE_FLAG(bool, throw_on_javascript_int_overflow); |
43 | 45 |
44 Definition::Definition(intptr_t deopt_id) | 46 Definition::Definition(intptr_t deopt_id) |
45 : Instruction(deopt_id), | 47 : Instruction(deopt_id), |
46 range_(NULL), | 48 range_(NULL), |
47 type_(NULL), | 49 type_(NULL), |
48 temp_index_(-1), | 50 temp_index_(-1), |
49 ssa_temp_index_(-1), | 51 ssa_temp_index_(-1), |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
378 } | 380 } |
379 return (other_load->field() == NULL) && | 381 return (other_load->field() == NULL) && |
380 (offset_in_bytes() == other_load->offset_in_bytes()); | 382 (offset_in_bytes() == other_load->offset_in_bytes()); |
381 } | 383 } |
382 | 384 |
383 | 385 |
384 Instruction* InitStaticFieldInstr::Canonicalize(FlowGraph* flow_graph) { | 386 Instruction* InitStaticFieldInstr::Canonicalize(FlowGraph* flow_graph) { |
385 const bool is_initialized = | 387 const bool is_initialized = |
386 (field_.StaticValue() != Object::sentinel().raw()) && | 388 (field_.StaticValue() != Object::sentinel().raw()) && |
387 (field_.StaticValue() != Object::transition_sentinel().raw()); | 389 (field_.StaticValue() != Object::transition_sentinel().raw()); |
388 return is_initialized ? NULL : this; | 390 return is_initialized && !FLAG_fields_may_be_reset ? NULL : this; |
389 } | 391 } |
390 | 392 |
391 | 393 |
392 EffectSet LoadStaticFieldInstr::Dependencies() const { | 394 EffectSet LoadStaticFieldInstr::Dependencies() const { |
393 return StaticField().is_final() ? EffectSet::None() : EffectSet::All(); | 395 return StaticField().is_final() ? EffectSet::None() : EffectSet::All(); |
394 } | 396 } |
395 | 397 |
396 | 398 |
397 bool LoadStaticFieldInstr::AttributesEqual(Instruction* other) const { | 399 bool LoadStaticFieldInstr::AttributesEqual(Instruction* other) const { |
398 LoadStaticFieldInstr* other_load = other->AsLoadStaticField(); | 400 LoadStaticFieldInstr* other_load = other->AsLoadStaticField(); |
(...skipping 3240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3639 case Token::kTRUNCDIV: return 0; | 3641 case Token::kTRUNCDIV: return 0; |
3640 case Token::kMOD: return 1; | 3642 case Token::kMOD: return 1; |
3641 default: UNIMPLEMENTED(); return -1; | 3643 default: UNIMPLEMENTED(); return -1; |
3642 } | 3644 } |
3643 } | 3645 } |
3644 | 3646 |
3645 | 3647 |
3646 #undef __ | 3648 #undef __ |
3647 | 3649 |
3648 } // namespace dart | 3650 } // namespace dart |
OLD | NEW |