| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2014 the V8 project authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 // Flags: --allow-natives-syntax --array-bounds-checks-elimination | 
|  | 6 | 
|  | 7 var a = [] | 
|  | 8 for (var i = 0; i < 9; i++) a[i] = i + 1; | 
|  | 9 | 
|  | 10 function test(f, arg1, arg2, expected) { | 
|  | 11   assertEquals(expected, f(arg1)); | 
|  | 12   f(arg2); | 
|  | 13   %OptimizeFunctionOnNextCall(f); | 
|  | 14   assertEquals(expected, f(arg1)); | 
|  | 15 } | 
|  | 16 | 
|  | 17 test(function f0() { | 
|  | 18   return a[7] * a[6] * a[5] * a[4] * a[3] * a[2] * a[1] * a[0]; | 
|  | 19 }, 0, 1, 40320); | 
|  | 20 | 
|  | 21 test(function f1() { | 
|  | 22   return a[7] * a[6] * a[5] * a[4] * a[10] * a[2] * a[1] * a[0]; | 
|  | 23 }, 0, 1, NaN); | 
|  | 24 | 
|  | 25 test(function f2() { | 
|  | 26   return a[0] * a[1] * a[2] * a[3] * a[4] * a[5] * a[6] * a[7]; | 
|  | 27 }, 0, 1, 40320); | 
|  | 28 | 
|  | 29 test(function f3() { | 
|  | 30   return a[3] * a[0] * a[6] * a[7] * a[5] * a[1] * a[4] * a[2]; | 
|  | 31 }, 0, 1, 40320); | 
|  | 32 | 
|  | 33 test(function f4(b) { | 
|  | 34   return a[b+3] * a[0] * a[b+6] * a[7] * a[b+5] * a[1] * a[b+4] * a[2]; | 
|  | 35 }, 0, 1, 40320); | 
|  | 36 | 
|  | 37 test(function f5(b) { | 
|  | 38   return a[b+1] * a[0] * a[b+4] * a[7] * a[b+3] * a[1] * a[b+2] * a[2]; | 
|  | 39 }, 2, 3, 40320); | 
|  | 40 | 
|  | 41 test(function f6(b) { | 
|  | 42   var c; | 
|  | 43   if (b) c = a[3] * a[0] * a[6] * a[7]; | 
|  | 44   return c * a[5] * a[1] * a[4] * a[2]; | 
|  | 45 }, true, false, 40320); | 
|  | 46 | 
|  | 47 test(function f7(b) { | 
|  | 48   var c = a[7]; | 
|  | 49   if (b) c *= a[3] * a[0] * a[6]; | 
|  | 50   return c * a[5] * a[1] * a[4] * a[2]; | 
|  | 51 }, true, false, 40320); | 
|  | 52 | 
|  | 53 test(function f8(b) { | 
|  | 54   var c = a[7]; | 
|  | 55   if (b) c *= a[3] * a[0] * a[6]; | 
|  | 56   return c * a[5] * a[10] * a[4] * a[2]; | 
|  | 57 }, true, false, NaN); | 
|  | 58 | 
|  | 59 test(function f9(b) { | 
|  | 60   var c = a[1]; | 
|  | 61   if (b) { | 
|  | 62     c *= a[3] * a[0] * a[6]; | 
|  | 63   } else { | 
|  | 64     c = a[6] * a[5] * a[4]; | 
|  | 65   } | 
|  | 66   return c * a[5] * a[7] * a[4] * a[2]; | 
|  | 67 }, true, false, 40320); | 
|  | 68 | 
|  | 69 test(function fa(b) { | 
|  | 70   var c = a[1]; | 
|  | 71   if (b) { | 
|  | 72     c = a[6] * a[b+5] * a[4]; | 
|  | 73   } else { | 
|  | 74     c *= a[b+3] * a[0] * a[b+6]; | 
|  | 75   } | 
|  | 76   return c * a[5] * a[b+7] * a[4] * a[2]; | 
|  | 77 }, 0, 1, 40320); | 
|  | 78 | 
|  | 79 test(function fb(b) { | 
|  | 80   var c = a[b-3]; | 
|  | 81   if (b != 4) { | 
|  | 82     c = a[6] * a[b+1] * a[4]; | 
|  | 83   } else { | 
|  | 84     c *= a[b-1] * a[0] * a[b+2]; | 
|  | 85   } | 
|  | 86   return c * a[5] * a[b+3] * a[4] * a[b-2]; | 
|  | 87 }, 4, 3, 40320); | 
|  | 88 | 
|  | 89 test(function fc(b) { | 
|  | 90   var c = a[b-3]; | 
|  | 91   if (b != 4) { | 
|  | 92     c = a[6] * a[b+1] * a[4]; | 
|  | 93   } else { | 
|  | 94     c *= a[b-1] * a[0] * a[b+2]; | 
|  | 95   } | 
|  | 96   return c * a[5] * a[b+3] * a[4] * a[b-2]; | 
|  | 97 }, 6, 3, NaN); | 
|  | 98 | 
|  | 99 test(function fd(b) { | 
|  | 100   var c = a[b-3]; | 
|  | 101   if (b != 4) { | 
|  | 102     c = a[6] * a[b+1] * a[4]; | 
|  | 103   } else { | 
|  | 104     c *= a[b-1] * a[0] * a[b+2]; | 
|  | 105   } | 
|  | 106   return c * a[5] * a[b+3] * a[4] * a[b-2]; | 
|  | 107 }, 1, 4, NaN); | 
|  | 108 | 
|  | 109 test(function fe(b) { | 
|  | 110   var c = 1; | 
|  | 111   for (var i = 1; i < b-1; i++) { | 
|  | 112     c *= a[i-1] * a[i] * a[i+1]; | 
|  | 113   } | 
|  | 114   return c; | 
|  | 115 }, 8, 4, (40320 / 8 / 7) * (40320 / 8) * (40320 / 2)); | 
|  | 116 | 
|  | 117 test(function ff(b) { | 
|  | 118   var c = 0; | 
|  | 119   for (var i = 0; i < b; i++) { | 
|  | 120     c += a[3] * a[0] * a[6] * a[7] * a[5] * a[1] * a[4] * a[2]; | 
|  | 121   } | 
|  | 122   return c; | 
|  | 123 }, 100, 4, 40320 * 100); | 
| OLD | NEW | 
|---|