blob: 64e804d0845cefe7ef4f2822c1b1ad64dd8a5372 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Test correct handling reusable boxes.
// VMOptions=--optimization_counter_threshold=100 --no-background_compilation
library reusable_boxes_test;
import 'dart:typed_data';
import 'package:expect/expect.dart';
class D {
var a = 0.0;
var b = 1.0;
dynamic c = 2.0;
test() {
a = 0.0;
b = 1.0;
c = a + b;
return c;
}
testParam(x, y) {
x = x * x;
y = y * y;
c = x + y;
}
}
testD() {
var f = new D();
var r = 0.0;
for (var i = 0; i < 20; i++) {
r += f.test();
}
Expect.equals(20.0, r);
// Trigger a deopt of test.
f.testParam(new Float32x4(1.0, 2.0, 3.0, 4.0), new Float32x4.zero());
r = 0.0;
for (var i = 0; i < 20; i++) {
r += f.test();
}
Expect.equals(20.0, r);
}
class F {
var a = new Float32x4.zero();
var b = new Float32x4(1.0, 2.0, 3.0, 4.0);
dynamic c = new Float32x4.zero();
test() {
a = new Float32x4.zero();
b = new Float32x4(1.0, 2.0, 3.0, 4.0);
c = a + b;
return c;
}
testParam(x, y) {
x = x * x;
y = y * y;
c = x + y;
}
}
testF() {
var f = new F();
var r = new Float32x4.zero();
for (var i = 0; i < 20; i++) {
r += f.test();
}
Expect.equals(20.0, r.x);
Expect.equals(40.0, r.y);
Expect.equals(60.0, r.z);
Expect.equals(80.0, r.w);
// Trigger a deopt of test.
f.testParam(1.0, 2.0);
r = new Float32x4.zero();
for (var i = 0; i < 20; i++) {
r += f.test();
}
Expect.equals(20.0, r.x);
Expect.equals(40.0, r.y);
Expect.equals(60.0, r.z);
Expect.equals(80.0, r.w);
}
main() {
testD();
testF();
}