| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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_range_analysis.h" | 5 #include "vm/flow_graph_range_analysis.h" |
| 6 | 6 |
| 7 #include "vm/bit_vector.h" | 7 #include "vm/bit_vector.h" |
| 8 #include "vm/il_printer.h" | 8 #include "vm/il_printer.h" |
| 9 | 9 |
| 10 namespace dart { | 10 namespace dart { |
| (...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 686 if (op == WIDEN) { | 686 if (op == WIDEN) { |
| 687 range = Range(WidenMin(defn->range(), &range, size), | 687 range = Range(WidenMin(defn->range(), &range, size), |
| 688 WidenMax(defn->range(), &range, size)); | 688 WidenMax(defn->range(), &range, size)); |
| 689 } else if (op == NARROW) { | 689 } else if (op == NARROW) { |
| 690 range = Range(NarrowMin(defn->range(), &range, size), | 690 range = Range(NarrowMin(defn->range(), &range, size), |
| 691 NarrowMax(defn->range(), &range, size)); | 691 NarrowMax(defn->range(), &range, size)); |
| 692 } | 692 } |
| 693 } | 693 } |
| 694 | 694 |
| 695 if (!range.Equals(defn->range())) { | 695 if (!range.Equals(defn->range())) { |
| 696 #ifndef PRODUCT |
| 696 if (FLAG_support_il_printer && FLAG_trace_range_analysis) { | 697 if (FLAG_support_il_printer && FLAG_trace_range_analysis) { |
| 697 THR_Print("%c [%" Pd "] %s: %s => %s\n", | 698 THR_Print("%c [%" Pd "] %s: %s => %s\n", |
| 698 OpPrefix(op), | 699 OpPrefix(op), |
| 699 iteration, | 700 iteration, |
| 700 defn->ToCString(), | 701 defn->ToCString(), |
| 701 Range::ToCString(defn->range()), | 702 Range::ToCString(defn->range()), |
| 702 Range::ToCString(&range)); | 703 Range::ToCString(&range)); |
| 703 } | 704 } |
| 705 #endif // !PRODUCT |
| 704 defn->set_range(range); | 706 defn->set_range(range); |
| 705 return true; | 707 return true; |
| 706 } | 708 } |
| 707 } | 709 } |
| 708 | 710 |
| 709 return false; | 711 return false; |
| 710 } | 712 } |
| 711 | 713 |
| 712 | 714 |
| 713 void RangeAnalysis::CollectDefinitions(BitVector* set) { | 715 void RangeAnalysis::CollectDefinitions(BitVector* set) { |
| (...skipping 2445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3159 } | 3161 } |
| 3160 } while (CanonicalizeMaxBoundary(&max) || | 3162 } while (CanonicalizeMaxBoundary(&max) || |
| 3161 CanonicalizeMinBoundary(&canonical_length)); | 3163 CanonicalizeMinBoundary(&canonical_length)); |
| 3162 | 3164 |
| 3163 // Failed to prove that maximum is bounded with array length. | 3165 // Failed to prove that maximum is bounded with array length. |
| 3164 return false; | 3166 return false; |
| 3165 } | 3167 } |
| 3166 | 3168 |
| 3167 | 3169 |
| 3168 } // namespace dart | 3170 } // namespace dart |
| OLD | NEW |