OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |
6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |
7 | 7 |
8 #include <cstring> | 8 #include <cstring> |
9 #include <iosfwd> | 9 #include <iosfwd> |
10 | 10 |
(...skipping 5480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5491 // Stores to external references require no write barriers | 5491 // Stores to external references require no write barriers |
5492 return false; | 5492 return false; |
5493 } | 5493 } |
5494 // We definitely need a write barrier unless the object is the allocation | 5494 // We definitely need a write barrier unless the object is the allocation |
5495 // dominator. | 5495 // dominator. |
5496 if (object == dominator && object->IsAllocate()) { | 5496 if (object == dominator && object->IsAllocate()) { |
5497 // Stores to new space allocations require no write barriers. | 5497 // Stores to new space allocations require no write barriers. |
5498 if (HAllocate::cast(object)->IsNewSpaceAllocation()) { | 5498 if (HAllocate::cast(object)->IsNewSpaceAllocation()) { |
5499 return false; | 5499 return false; |
5500 } | 5500 } |
5501 // Stores to old space allocations require no write barriers if the value is | |
5502 // a constant provably not in new space. | |
5503 if (value->IsConstant() && HConstant::cast(value)->NotInNewSpace()) { | |
5504 return false; | |
5505 } | |
5506 } | 5501 } |
5507 return true; | 5502 return true; |
5508 } | 5503 } |
5509 | 5504 |
5510 | 5505 |
5511 inline PointersToHereCheck PointersToHereCheckForObject(HValue* object, | 5506 inline PointersToHereCheck PointersToHereCheckForObject(HValue* object, |
5512 HValue* dominator) { | 5507 HValue* dominator) { |
5513 while (object->IsInnerAllocatedObject()) { | 5508 while (object->IsInnerAllocatedObject()) { |
5514 object = HInnerAllocatedObject::cast(object)->base_object(); | 5509 object = HInnerAllocatedObject::cast(object)->base_object(); |
5515 } | 5510 } |
(...skipping 2049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7565 | 7560 |
7566 | 7561 |
7567 | 7562 |
7568 #undef DECLARE_INSTRUCTION | 7563 #undef DECLARE_INSTRUCTION |
7569 #undef DECLARE_CONCRETE_INSTRUCTION | 7564 #undef DECLARE_CONCRETE_INSTRUCTION |
7570 | 7565 |
7571 } // namespace internal | 7566 } // namespace internal |
7572 } // namespace v8 | 7567 } // namespace v8 |
7573 | 7568 |
7574 #endif // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 7569 #endif // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |