author | Nicolas B. Pierron <nicolas.b.pierron@mozilla.com> |
Tue, 12 May 2015 11:26:53 +0200 | |
changeset 243519 | 914d69f687d3e72983f2a63826d0db2862cc51ed |
parent 243518 | 4b32e46f3c444976863ba9268cf55f9467a1c8aa |
child 243520 | 194bf0d7b9aae885ce84afe32f6f468ec5776b7b |
push id | 28741 |
push user | kwierso@gmail.com |
push date | Tue, 12 May 2015 23:24:40 +0000 |
treeherder | mozilla-central@d476776d920d [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | sunfish |
bugs | 1158344 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/RangeAnalysis.cpp +++ b/js/src/jit/RangeAnalysis.cpp @@ -2190,30 +2190,32 @@ RangeAnalysis::tryHoistBoundsCheck(MBasi // index <= upperTerm + upperConstant. Thus, check that: // // upperTerm + upperConstant < boundsLength int32_t upperConstant = index.constant; if (!SafeAdd(upper->sum.constant(), upperConstant, &upperConstant)) return false; + // Hoist the loop invariant lower bounds checks. MBoundsCheckLower* lowerCheck = MBoundsCheckLower::New(alloc(), lowerTerm); lowerCheck->setMinimum(lowerConstant); lowerCheck->computeRange(alloc()); lowerCheck->collectRangeInfoPreTrunc(); - - MBoundsCheck* upperCheck = MBoundsCheck::New(alloc(), upperTerm, length); - upperCheck->setMinimum(upperConstant); - upperCheck->setMaximum(upperConstant); - upperCheck->computeRange(alloc()); - upperCheck->collectRangeInfoPreTrunc(); - - // Hoist the loop invariant upper and lower bounds checks. preLoop->insertBefore(preLoop->lastIns(), lowerCheck); - preLoop->insertBefore(preLoop->lastIns(), upperCheck); + + // Hoist the loop invariant upper bounds checks. + if (upperTerm != length || upperConstant >= 0) { + MBoundsCheck* upperCheck = MBoundsCheck::New(alloc(), upperTerm, length); + upperCheck->setMinimum(upperConstant); + upperCheck->setMaximum(upperConstant); + upperCheck->computeRange(alloc()); + upperCheck->collectRangeInfoPreTrunc(); + preLoop->insertBefore(preLoop->lastIns(), upperCheck); + } return true; } bool RangeAnalysis::analyze() { JitSpew(JitSpew_Range, "Doing range propagation");