| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "hydrogen-escape-analysis.h" | 5 #include "hydrogen-escape-analysis.h" |
| 6 | 6 |
| 7 namespace v8 { | 7 namespace v8 { |
| 8 namespace internal { | 8 namespace internal { |
| 9 | 9 |
| 10 | 10 |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 } | 199 } |
| 200 break; | 200 break; |
| 201 } | 201 } |
| 202 case HValue::kStoreNamedField: { | 202 case HValue::kStoreNamedField: { |
| 203 HStoreNamedField* store = HStoreNamedField::cast(instr); | 203 HStoreNamedField* store = HStoreNamedField::cast(instr); |
| 204 int index = store->access().offset() / kPointerSize; | 204 int index = store->access().offset() / kPointerSize; |
| 205 if (store->object() != allocate) continue; | 205 if (store->object() != allocate) continue; |
| 206 ASSERT(store->access().IsInobject()); | 206 ASSERT(store->access().IsInobject()); |
| 207 state = NewStateCopy(store->previous(), state); | 207 state = NewStateCopy(store->previous(), state); |
| 208 state->SetOperandAt(index, store->value()); | 208 state->SetOperandAt(index, store->value()); |
| 209 if (store->has_transition()) { | |
| 210 state->SetOperandAt(0, store->transition()); | |
| 211 } | |
| 212 if (store->HasObservableSideEffects()) { | 209 if (store->HasObservableSideEffects()) { |
| 213 state->ReuseSideEffectsFromStore(store); | 210 state->ReuseSideEffectsFromStore(store); |
| 214 } | 211 } |
| 215 store->DeleteAndReplaceWith(store->ActualValue()); | 212 store->DeleteAndReplaceWith(store->ActualValue()); |
| 216 if (FLAG_trace_escape_analysis) { | 213 if (FLAG_trace_escape_analysis) { |
| 217 PrintF("Replacing store #%d%s\n", instr->id(), | 214 PrintF("Replacing store #%d\n", instr->id()); |
| 218 store->has_transition() ? " (with transition)" : ""); | |
| 219 } | 215 } |
| 220 break; | 216 break; |
| 221 } | 217 } |
| 222 case HValue::kArgumentsObject: | 218 case HValue::kArgumentsObject: |
| 223 case HValue::kCapturedObject: | 219 case HValue::kCapturedObject: |
| 224 case HValue::kSimulate: { | 220 case HValue::kSimulate: { |
| 225 for (int i = 0; i < instr->OperandCount(); i++) { | 221 for (int i = 0; i < instr->OperandCount(); i++) { |
| 226 if (instr->OperandAt(i) != allocate) continue; | 222 if (instr->OperandAt(i) != allocate) continue; |
| 227 instr->SetOperandAt(i, state); | 223 instr->SetOperandAt(i, state); |
| 228 } | 224 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 for (int i = 0; i < max_fixpoint_iteration_count; i++) { | 315 for (int i = 0; i < max_fixpoint_iteration_count; i++) { |
| 320 CollectCapturedValues(); | 316 CollectCapturedValues(); |
| 321 if (captured_.is_empty()) break; | 317 if (captured_.is_empty()) break; |
| 322 PerformScalarReplacement(); | 318 PerformScalarReplacement(); |
| 323 captured_.Clear(); | 319 captured_.Clear(); |
| 324 } | 320 } |
| 325 } | 321 } |
| 326 | 322 |
| 327 | 323 |
| 328 } } // namespace v8::internal | 324 } } // namespace v8::internal |
| OLD | NEW |