blob: a21a45311711a5049e146e8aeb036500266a260a [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function test0() {
var a = 0x3fffffff << 1;
var b = a + 0.1;
for(var i = 0; i < 2; ++i) {
for(var j = 0; j < 2; ++j) {
a &= b;
-a | 0;
}
}
}
test0();
test0();
// - In the loop prepass, by the inner loop's back-edge, 'a' is live as a lossless int32
// - On the merge after the inner loop, the value of 'a' is turned into a number value when aggressive int type specialization
// is disabled, because it changed inside the loop. This is not strictly necessary because the only change to 'a' inside the
// loop is assigning to it the result of a bitwise and operation, which always produces an int32. However, we don't track that
// in the values, so we have to assume that any change inside the loop could eventually and make it not an int32.
// - When the value of 'a' is turned into a number value, it is then invalid for the lossless int version of 'a' to be live
function test1() {
var a = 1;
for(var i = 0; i < 1; ++i) {
for(var j = 0; j < 1; ++j) {
if(1)
a &= 1;
a & 255;
}
}
};
test1();
test1();
function test2() {
return (2147483648 + 1) | 0;
};
test2();
test2();
function test3() {
var a = 0;
var b = 0;
var c = 0;
for(var i = 0; i < 2; ++i) {
if(a) {
b = ~a;
test0a();
}
c &= b;
}
function test3a() { a; }
};
test3();
test3();
function test4() {
var obj0 = { prop1: 0 };
var b = 1;
prop0 = new Float64Array(1)[0];
var x = 0;
for(var i = 0; i < 2; ++i) {
++x;
if(obj0.prop1 === prop0) {
for(var j = 0; j < 1; ++j) {
if(1.1)
obj0 = {};
else {
var k = 0;
do {
if(k > 0) break;
++k;
++b;
} while(1);
}
}
}
}
return x;
function test4a() { b; }
};
WScript.Echo("test4: " + test4());
WScript.Echo("test4: " + test4());
function test5(b) {
var o = {};
var a = -2147483646;
for(var i = 0; o.p && i < 1; ++i) {
if(1 === 1) {
if(1)
a = b;
[a];
}
}
};
test5(1);
test5({});