Chromium Code Reviews
DescriptionReland r39293.
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
Committed: https://code.google.com/p/dart/source/detail?r=39327
Patch Set 1 #
Total comments: 2
Messages
Total messages: 5 (0 generated)
|
||||||||||||||||||||||||||||||||||||||||||||||