Chromium Code Reviews| Index: tests/language/branch_canonicalization_test.dart |
| diff --git a/tests/language/branch_canonicalization_test.dart b/tests/language/branch_canonicalization_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7e39572940d410715c565a0c9dfbb7e43622372c |
| --- /dev/null |
| +++ b/tests/language/branch_canonicalization_test.dart |
| @@ -0,0 +1,65 @@ |
| +// 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. |
|
ahe
2013/02/13 14:46:23
Add empty line between copyright and file comment.
Vyacheslav Egorov (Google)
2013/03/19 20:27:25
I am not sure what are style here is. I see a lot
|
| +// Test that branch fusion correctly sets branch environment for comparisons |
| +// that require unboxing and does not fuse branches that can deoptimize. |
| + |
| +var sideEffect = true; |
| + |
| +barDouble(a, b) { |
| + sideEffect = false; |
| + final result = (a == b); |
| + sideEffect = !sideEffect; |
| + return result; |
| +} |
| +fooDouble(a, b) => barDouble(a, b) ? 1 : 0; |
| + |
| +barMint(a, b) { |
| + sideEffect = false; |
| + final result = (a == b); |
| + sideEffect = !sideEffect; |
| + return result; |
| +} |
| +fooMint(a, b) => barMint(a, b) ? 1 : 0; |
| + |
| +class A { |
| + operator == (other) => identical(this, other); |
| +} |
| + |
| +class B extends A { |
| +} |
| + |
| +class C extends A { |
| +} |
| + |
| +barPoly(a, b) { |
| + sideEffect = false; |
| + final result = a == b; |
| + sideEffect = !sideEffect; |
| + return result; |
| +} |
| + |
| +fooPoly(a, b) => barPoly(a, b) ? 1 : 0; |
| + |
| +main () { |
| + final a = 1.0; |
| + final b = 1 << 62; |
| + final x = new A(), y = new B(), z = new C(); |
| + for (var i = 0; i < 10000; i++) { |
| + Expect.equals(1, fooDouble(a, a)); |
| + Expect.isTrue(sideEffect); |
| + Expect.equals(0, fooMint(b, 0)); |
| + Expect.isTrue(sideEffect); |
| + Expect.equals(1, fooPoly(x, x)); |
| + Expect.equals(0, fooPoly(y, x)); |
| + } |
| + Expect.equals(1, fooDouble(z, z)); |
| + Expect.isTrue(sideEffect); |
| + Expect.equals(1, fooMint(z, z)); |
| + Expect.isTrue(sideEffect); |
| + Expect.equals(1, fooPoly(z, z)); |
| + Expect.isTrue(sideEffect); |
| +} |
| + |
| + |
| + |
|
ahe
2013/02/13 14:46:23
Extra lines.
Vyacheslav Egorov (Google)
2013/03/19 20:27:25
I will remove this.
|