336dbd4cbf376497289dcac2941c8d8b7fb7eaef
Switch to a fix-point based range analysis to improve its precision. Dominator based algorithm was very imprecise for loop phis. Use widening to ensure fast convergence and narrowing to improve precision. Fixed compared to r39293: Type propagation is more sophisticated now compared to the time when range analysis was originally implemented and is able to derive Smi-ness from more than just CheckSmi instruction (e.g. GuardFieldClass). This creates situations when use's reaching type is Smi but definition itself is not a Smi and thus will never have range assigned to it. It is incorrect to treat ranges of such uses as unknown (_|_), because unknown means "not yet computed". Instead we must use the widest possible approximation: full smi range. InferRange methods were rewritten to use a newly introduced GetRange helper instead of accessing value()->definition()->range() directly. As a side-effect we no longer need to insert artificial constraints after CheckSmi instructions. R=fschneider@google.com Review URL: https://codereview.chromium.org//477193002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39327 260f80e4-7a28-3924-810f-c04153c831b5
This is the repository of the Dart programming language and its associated tools, libraries, and samples. For license information, please see LICENSE. You can find more about Dart online at http://dartlang.org or http://code.google.com/p/dart. Here's a brief guide to what's in here: editor/ Eclipse-based standalone Dart IDE. lib/ Libraries that ship with the Dart runtime (core, html, etc.). pkg/ Packages that are not shipped with the core runtime. runtime/ Dart VM and code for running it as a standalone app. samples/ Sample Dart programs. tests/ Automated tests. third_party/ External dependencies. tools/ Build scripts, text editor support files, etc. utils/ Utilities for Dart applications.
Description
Languages
Dart
84.6%
C++
13%
Python
0.7%
JavaScript
0.5%
HTML
0.4%
Other
0.5%