gc-during-bailout.js (3652B)
1 setJitCompilerOption("ion.warmup.trigger", 30); 2 gcPreserveCode(); 3 var o = {}; 4 5 function f(i) { 6 var obj_1 = { a: 0 }; 7 var obj_2 = { a: 0 }; 8 var obj_3 = { a: 0 }; 9 var obj_4 = { a: 0 }; 10 var obj_5 = { a: 0 }; 11 var obj_6 = { a: 0 }; 12 var obj_7 = { a: 0 }; 13 var obj_8 = { a: 0 }; 14 var obj_9 = { a: 0 }; 15 var obj_10 = { a: 0 }; 16 var obj_11 = { a: 0 }; 17 var obj_12 = { a: 0 }; 18 var obj_13 = { a: 0 }; 19 var obj_14 = { a: 0 }; 20 var obj_15 = { a: 0 }; 21 var obj_16 = { a: 0 }; 22 var obj_17 = { a: 0 }; 23 var obj_18 = { a: 0 }; 24 var obj_19 = { a: 0 }; 25 var obj_20 = { a: 0 }; 26 var obj_21 = { a: 0 }; 27 var obj_22 = { a: 0 }; 28 var obj_23 = { a: 0 }; 29 var obj_24 = { a: 0 }; 30 var obj_25 = { a: 0 }; 31 var obj_26 = { a: 0 }; 32 var obj_27 = { a: 0 }; 33 var obj_28 = { a: 0 }; 34 var obj_29 = { a: 0 }; 35 var obj_30 = { a: 0 }; 36 37 // Doing a bailout after the return of the function call implies that we 38 // cannot resume before the function call. Thus, we would have to recover 39 // the 30 objects allocations during the bailout. 40 schedulegc(i % 100); 41 bailout(); 42 43 obj_1.a = 1; 44 obj_2.a = 1; 45 obj_3.a = 1; 46 obj_4.a = 1; 47 obj_5.a = 1; 48 obj_6.a = 1; 49 obj_7.a = 1; 50 obj_8.a = 1; 51 obj_9.a = 1; 52 obj_10.a = 1; 53 obj_11.a = 1; 54 obj_12.a = 1; 55 obj_13.a = 1; 56 obj_14.a = 1; 57 obj_15.a = 1; 58 obj_16.a = 1; 59 obj_17.a = 1; 60 obj_18.a = 1; 61 obj_19.a = 1; 62 obj_20.a = 1; 63 obj_21.a = 1; 64 obj_22.a = 1; 65 obj_23.a = 1; 66 obj_24.a = 1; 67 obj_25.a = 1; 68 obj_26.a = 1; 69 obj_27.a = 1; 70 obj_28.a = 1; 71 obj_29.a = 1; 72 obj_30.a = 1; 73 } 74 75 for (var i = 0; i < 200; i++) { 76 // Do not inline 'f', to keep re-entering 'f' at every loop iteration. 77 with (o) { } 78 f(i); 79 } 80 81 // This is the same test except that we do not preserve code under shrinking GC. 82 gczeal(14); 83 84 function g(i) { 85 var obj_1 = { a: 0 }; 86 var obj_2 = { a: 0 }; 87 var obj_3 = { a: 0 }; 88 var obj_4 = { a: 0 }; 89 var obj_5 = { a: 0 }; 90 var obj_6 = { a: 0 }; 91 var obj_7 = { a: 0 }; 92 var obj_8 = { a: 0 }; 93 var obj_9 = { a: 0 }; 94 var obj_10 = { a: 0 }; 95 var obj_11 = { a: 0 }; 96 var obj_12 = { a: 0 }; 97 var obj_13 = { a: 0 }; 98 var obj_14 = { a: 0 }; 99 var obj_15 = { a: 0 }; 100 var obj_16 = { a: 0 }; 101 var obj_17 = { a: 0 }; 102 var obj_18 = { a: 0 }; 103 var obj_19 = { a: 0 }; 104 var obj_20 = { a: 0 }; 105 var obj_21 = { a: 0 }; 106 var obj_22 = { a: 0 }; 107 var obj_23 = { a: 0 }; 108 var obj_24 = { a: 0 }; 109 var obj_25 = { a: 0 }; 110 var obj_26 = { a: 0 }; 111 var obj_27 = { a: 0 }; 112 var obj_28 = { a: 0 }; 113 var obj_29 = { a: 0 }; 114 var obj_30 = { a: 0 }; 115 116 // Doing a bailout after the return of the function call implies that we 117 // cannot resume before the function call. Thus, we would have to recover 118 // the 30 objects allocations during the bailout. 119 schedulegc(i % 100); 120 bailout(); 121 122 obj_1.a = 1; 123 obj_2.a = 1; 124 obj_3.a = 1; 125 obj_4.a = 1; 126 obj_5.a = 1; 127 obj_6.a = 1; 128 obj_7.a = 1; 129 obj_8.a = 1; 130 obj_9.a = 1; 131 obj_10.a = 1; 132 obj_11.a = 1; 133 obj_12.a = 1; 134 obj_13.a = 1; 135 obj_14.a = 1; 136 obj_15.a = 1; 137 obj_16.a = 1; 138 obj_17.a = 1; 139 obj_18.a = 1; 140 obj_19.a = 1; 141 obj_20.a = 1; 142 obj_21.a = 1; 143 obj_22.a = 1; 144 obj_23.a = 1; 145 obj_24.a = 1; 146 obj_25.a = 1; 147 obj_26.a = 1; 148 obj_27.a = 1; 149 obj_28.a = 1; 150 obj_29.a = 1; 151 obj_30.a = 1; 152 } 153 154 for (var i = 0; i < 200; i++) { 155 // Do not inline 'g', to keep re-entering 'g' at every loop iteration. 156 with (o) { } 157 g(i); 158 }