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/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
8 #include "vm/bit_vector.h" | 8 #include "vm/bit_vector.h" |
9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
10 #include "vm/flow_graph_allocator.h" | 10 #include "vm/flow_graph_allocator.h" |
(...skipping 1648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1659 | 1659 |
1660 // Replace the comparison if the replacement is used at this branch, | 1660 // Replace the comparison if the replacement is used at this branch, |
1661 // and has exactly one use. | 1661 // and has exactly one use. |
1662 Value* use = comp->input_use_list(); | 1662 Value* use = comp->input_use_list(); |
1663 if ((use->instruction() == this) && comp->HasOnlyUse(use)) { | 1663 if ((use->instruction() == this) && comp->HasOnlyUse(use)) { |
1664 if (negated) { | 1664 if (negated) { |
1665 comp->NegateComparison(); | 1665 comp->NegateComparison(); |
1666 } | 1666 } |
1667 RemoveEnvironment(); | 1667 RemoveEnvironment(); |
1668 flow_graph->CopyDeoptTarget(this, comp); | 1668 flow_graph->CopyDeoptTarget(this, comp); |
| 1669 // Unlink environment from the comparison since it is copied to the |
| 1670 // branch instruction. |
| 1671 comp->RemoveEnvironment(); |
1669 | 1672 |
1670 comp->RemoveFromGraph(); | 1673 comp->RemoveFromGraph(); |
1671 SetComparison(comp); | 1674 SetComparison(comp); |
1672 if (FLAG_trace_optimization) { | 1675 if (FLAG_trace_optimization) { |
1673 OS::Print("Merging comparison v%" Pd "\n", comp->ssa_temp_index()); | 1676 OS::Print("Merging comparison v%" Pd "\n", comp->ssa_temp_index()); |
1674 } | 1677 } |
1675 // Clear the comparison's temp index and ssa temp index since the | 1678 // Clear the comparison's temp index and ssa temp index since the |
1676 // value of the comparison is not used outside the branch anymore. | 1679 // value of the comparison is not used outside the branch anymore. |
1677 ASSERT(comp->input_use_list() == NULL); | 1680 ASSERT(comp->input_use_list() == NULL); |
1678 comp->ClearSSATempIndex(); | 1681 comp->ClearSSATempIndex(); |
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2891 return kCosRuntimeEntry; | 2894 return kCosRuntimeEntry; |
2892 default: | 2895 default: |
2893 UNREACHABLE(); | 2896 UNREACHABLE(); |
2894 } | 2897 } |
2895 return kSinRuntimeEntry; | 2898 return kSinRuntimeEntry; |
2896 } | 2899 } |
2897 | 2900 |
2898 #undef __ | 2901 #undef __ |
2899 | 2902 |
2900 } // namespace dart | 2903 } // namespace dart |
OLD | NEW |