1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/testReallyDeepNestedExit.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,38 @@ 1.4 +function reallyDeepNestedExit(schedule) 1.5 +{ 1.6 + var c = 0, j = 0; 1.7 + for (var i = 0; i < 5; i++) { 1.8 + for (j = 0; j < 4; j++) { 1.9 + c += (schedule[i*4 + j] == 1) ? 1 : 2; 1.10 + } 1.11 + } 1.12 + return c; 1.13 +} 1.14 +function testReallyDeepNestedExit() 1.15 +{ 1.16 + var c = 0; 1.17 + var schedule1 = new Array(5*4); 1.18 + var schedule2 = new Array(5*4); 1.19 + for (var i = 0; i < 5*4; i++) { 1.20 + schedule1[i] = 0; 1.21 + schedule2[i] = 0; 1.22 + } 1.23 + /** 1.24 + * First innermost compile: true branch runs through. 1.25 + * Second '': false branch compiles new loop edge. 1.26 + * First outer compile: expect true branch. 1.27 + * Second '': hit false branch. 1.28 + */ 1.29 + schedule1[0*4 + 3] = 1; 1.30 + var schedules = [schedule1, 1.31 + schedule2, 1.32 + schedule1, 1.33 + schedule2, 1.34 + schedule2]; 1.35 + 1.36 + for (var i = 0; i < 5; i++) { 1.37 + c += reallyDeepNestedExit(schedules[i]); 1.38 + } 1.39 + return c; 1.40 +} 1.41 +assertEq(testReallyDeepNestedExit(), 198);