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/flow_graph_optimizer.h" | 5 #include "vm/flow_graph_optimizer.h" |
6 | 6 |
7 #include "vm/bit_vector.h" | 7 #include "vm/bit_vector.h" |
8 #include "vm/cha.h" | 8 #include "vm/cha.h" |
9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
(...skipping 1641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1652 | 1652 |
1653 array_cid = PrepareInlineIndexedOp(call, | 1653 array_cid = PrepareInlineIndexedOp(call, |
1654 array_cid, | 1654 array_cid, |
1655 &array, | 1655 &array, |
1656 index, | 1656 index, |
1657 &cursor); | 1657 &cursor); |
1658 | 1658 |
1659 intptr_t deopt_id = Isolate::kNoDeoptId; | 1659 intptr_t deopt_id = Isolate::kNoDeoptId; |
1660 if ((array_cid == kTypedDataInt32ArrayCid) || | 1660 if ((array_cid == kTypedDataInt32ArrayCid) || |
1661 (array_cid == kTypedDataUint32ArrayCid)) { | 1661 (array_cid == kTypedDataUint32ArrayCid)) { |
1662 // Prevent excessive deoptimization, assume full 32 bits used, and therefore | 1662 // Deoptimization may be needed if result does not always fit in a Smi. |
1663 // generate Mint on 32-bit architectures. | 1663 deopt_id = (kSmiBits >= 32) ? Isolate::kNoDeoptId : call->deopt_id(); |
1664 deopt_id = (kSmiBits < 32) ? Isolate::kNoDeoptId : call->deopt_id(); | |
1665 } | 1664 } |
1666 | 1665 |
1667 // Array load and return. | 1666 // Array load and return. |
1668 intptr_t index_scale = Instance::ElementSizeFor(array_cid); | 1667 intptr_t index_scale = Instance::ElementSizeFor(array_cid); |
1669 *last = new(I) LoadIndexedInstr(new(I) Value(array), | 1668 *last = new(I) LoadIndexedInstr(new(I) Value(array), |
1670 new(I) Value(index), | 1669 new(I) Value(index), |
1671 index_scale, | 1670 index_scale, |
1672 array_cid, | 1671 array_cid, |
1673 deopt_id, | 1672 deopt_id, |
1674 call->token_pos()); | 1673 call->token_pos()); |
(...skipping 1873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3548 array_cid = PrepareInlineByteArrayViewOp(call, | 3547 array_cid = PrepareInlineByteArrayViewOp(call, |
3549 array_cid, | 3548 array_cid, |
3550 view_cid, | 3549 view_cid, |
3551 &array, | 3550 &array, |
3552 index, | 3551 index, |
3553 &cursor); | 3552 &cursor); |
3554 | 3553 |
3555 intptr_t deopt_id = Isolate::kNoDeoptId; | 3554 intptr_t deopt_id = Isolate::kNoDeoptId; |
3556 if ((array_cid == kTypedDataInt32ArrayCid) || | 3555 if ((array_cid == kTypedDataInt32ArrayCid) || |
3557 (array_cid == kTypedDataUint32ArrayCid)) { | 3556 (array_cid == kTypedDataUint32ArrayCid)) { |
3558 // Prevent excessive deoptimization, assume full 32 bits used, and therefore | 3557 // Deoptimization may be needed if result does not always fit in a Smi. |
3559 // generate Mint on 32-bit architectures. | 3558 deopt_id = (kSmiBits >= 32) ? Isolate::kNoDeoptId : call->deopt_id(); |
3560 deopt_id = (kSmiBits < 32) ? Isolate::kNoDeoptId : call->deopt_id(); | |
3561 } | 3559 } |
3562 | 3560 |
3563 *last = new(I) LoadIndexedInstr(new(I) Value(array), | 3561 *last = new(I) LoadIndexedInstr(new(I) Value(array), |
3564 new(I) Value(index), | 3562 new(I) Value(index), |
3565 1, | 3563 1, |
3566 view_cid, | 3564 view_cid, |
3567 deopt_id, | 3565 deopt_id, |
3568 call->token_pos()); | 3566 call->token_pos()); |
3569 cursor = flow_graph()->AppendTo( | 3567 cursor = flow_graph()->AppendTo( |
3570 cursor, | 3568 cursor, |
(...skipping 6846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10417 | 10415 |
10418 // Insert materializations at environment uses. | 10416 // Insert materializations at environment uses. |
10419 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) { | 10417 for (intptr_t i = 0; i < exits_collector_.exits().length(); i++) { |
10420 CreateMaterializationAt( | 10418 CreateMaterializationAt( |
10421 exits_collector_.exits()[i], alloc, alloc->cls(), *slots); | 10419 exits_collector_.exits()[i], alloc, alloc->cls(), *slots); |
10422 } | 10420 } |
10423 } | 10421 } |
10424 | 10422 |
10425 | 10423 |
10426 } // namespace dart | 10424 } // namespace dart |
OLD | NEW |