Chromium Code Reviews| Index: runtime/vm/intermediate_language.cc |
| =================================================================== |
| --- runtime/vm/intermediate_language.cc (revision 31125) |
| +++ runtime/vm/intermediate_language.cc (working copy) |
| @@ -26,6 +26,7 @@ |
| DEFINE_FLAG(bool, propagate_ic_data, true, |
| "Propagate IC data from unoptimized to optimized IC calls."); |
| +DEFINE_FLAG(bool, unbox_double_fields, true, "Support unboxed double fields."); |
| DECLARE_FLAG(bool, enable_type_checks); |
| DECLARE_FLAG(bool, eliminate_type_checks); |
| DECLARE_FLAG(bool, trace_optimization); |
| @@ -136,6 +137,30 @@ |
| } |
| +bool LoadFieldInstr::IsUnboxedLoad() const { |
| + return FLAG_unbox_double_fields |
| + && field() != NULL |
| + && field()->IsUnboxedField(); |
|
srdjan
2013/12/13 18:13:17
APP
Florian Schneider
2013/12/16 13:08:09
Done.
|
| +} |
| + |
| + |
| +bool LoadFieldInstr::IsPotentialUnboxedLoad() const { |
| + return FLAG_unbox_double_fields |
| + && (field() != NULL) |
| + && field()->IsPotentialUnboxedField(); |
| +} |
| + |
| + |
| +bool StoreInstanceFieldInstr::IsUnboxedStore() const { |
| + return FLAG_unbox_double_fields && field().IsUnboxedField(); |
| +} |
| + |
| + |
| +bool StoreInstanceFieldInstr::IsPotentialUnboxedStore() const { |
| + return FLAG_unbox_double_fields && field().IsPotentialUnboxedField(); |
| +} |
| + |
| + |
| bool GuardFieldInstr::AttributesEqual(Instruction* other) const { |
| return field().raw() == other->AsGuardField()->field().raw(); |
| } |
| @@ -1757,13 +1782,13 @@ |
| #define __ compiler->assembler()-> |
| -LocationSummary* GraphEntryInstr::MakeLocationSummary() const { |
| +LocationSummary* GraphEntryInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| -LocationSummary* JoinEntryInstr::MakeLocationSummary() const { |
| +LocationSummary* JoinEntryInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1782,7 +1807,7 @@ |
| } |
| -LocationSummary* TargetEntryInstr::MakeLocationSummary() const { |
| +LocationSummary* TargetEntryInstr::MakeLocationSummary(bool optimizing) const { |
| // FlowGraphCompiler::EmitInstructionPrologue is not called for block |
| // entry instructions, so this function is unused. If it becomes |
| // reachable, note that the deoptimization descriptor in unoptimized code |
| @@ -1794,7 +1819,7 @@ |
| } |
| -LocationSummary* PhiInstr::MakeLocationSummary() const { |
| +LocationSummary* PhiInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1805,7 +1830,7 @@ |
| } |
| -LocationSummary* RedefinitionInstr::MakeLocationSummary() const { |
| +LocationSummary* RedefinitionInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1816,7 +1841,7 @@ |
| } |
| -LocationSummary* ParameterInstr::MakeLocationSummary() const { |
| +LocationSummary* ParameterInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1827,7 +1852,7 @@ |
| } |
| -LocationSummary* ParallelMoveInstr::MakeLocationSummary() const { |
| +LocationSummary* ParallelMoveInstr::MakeLocationSummary(bool optimizing) const { |
| return NULL; |
| } |
| @@ -1837,7 +1862,7 @@ |
| } |
| -LocationSummary* ConstraintInstr::MakeLocationSummary() const { |
| +LocationSummary* ConstraintInstr::MakeLocationSummary(bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1848,7 +1873,8 @@ |
| } |
| -LocationSummary* MaterializeObjectInstr::MakeLocationSummary() const { |
| +LocationSummary* MaterializeObjectInstr::MakeLocationSummary( |
| + bool optimizing) const { |
| UNREACHABLE(); |
| return NULL; |
| } |
| @@ -1859,7 +1885,7 @@ |
| } |
| -LocationSummary* StoreContextInstr::MakeLocationSummary() const { |
| +LocationSummary* StoreContextInstr::MakeLocationSummary(bool optimizing) const { |
| const intptr_t kNumInputs = 1; |
| const intptr_t kNumTemps = 0; |
| LocationSummary* summary = |
| @@ -1869,7 +1895,7 @@ |
| } |
| -LocationSummary* PushTempInstr::MakeLocationSummary() const { |
| +LocationSummary* PushTempInstr::MakeLocationSummary(bool optimizing) const { |
| return LocationSummary::Make(1, |
| Location::NoLocation(), |
| LocationSummary::kNoCall); |
| @@ -1882,7 +1908,7 @@ |
| } |
| -LocationSummary* DropTempsInstr::MakeLocationSummary() const { |
| +LocationSummary* DropTempsInstr::MakeLocationSummary(bool optimizing) const { |
| return LocationSummary::Make(1, |
| Location::SameAsFirstInput(), |
| LocationSummary::kNoCall); |
| @@ -1915,7 +1941,7 @@ |
| } |
| -LocationSummary* InstanceCallInstr::MakeLocationSummary() const { |
| +LocationSummary* InstanceCallInstr::MakeLocationSummary(bool optimizing) const { |
| return MakeCallSummary(); |
| } |
| @@ -1976,7 +2002,7 @@ |
| } |
| -LocationSummary* StaticCallInstr::MakeLocationSummary() const { |
| +LocationSummary* StaticCallInstr::MakeLocationSummary(bool optimizing) const { |
| return MakeCallSummary(); |
| } |
| @@ -2870,7 +2896,6 @@ |
| intptr_t original_deopt_id, |
| MethodRecognizer::Kind recognized_kind) |
| : inputs_(inputs), |
| - locs_(NULL), |
| recognized_kind_(recognized_kind) { |
| ASSERT(inputs_->length() == ArgumentCountFor(recognized_kind_)); |
| for (intptr_t i = 0; i < inputs_->length(); ++i) { |
| @@ -2978,7 +3003,6 @@ |
| intptr_t original_deopt_id, |
| MergedMathInstr::Kind kind) |
| : inputs_(inputs), |
| - locs_(NULL), |
| kind_(kind) { |
| ASSERT(inputs_->length() == InputCountFor(kind_)); |
| for (intptr_t i = 0; i < inputs_->length(); ++i) { |