Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Unified Diff: tests/language/branch_canonicalization_test.dart

Issue 12220150: When canonicalizing branch on StrictCompare ensure that branch gets correct environment. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: remove empty line Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« runtime/vm/intermediate_language.cc ('K') | « runtime/vm/intermediate_language.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..25cad8da5839ae746ffbde955111c2748ca3b1ef
--- /dev/null
+++ b/tests/language/branch_canonicalization_test.dart
@@ -0,0 +1,68 @@
+// 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 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);
Florian Schneider 2013/02/13 14:08:43 Why "final" here and "var" below in barPoly?
Vyacheslav Egorov (Google) 2013/02/13 14:10:19 cleaned up
+ 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;
+ var x = a == b;
+ sideEffect = !sideEffect;
+ return x;
+}
+
+fooPoly(a, b) {
+ var result = barPoly(a, b) ? 1 : 0;
+ return result;
+}
+
+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);
+}
+
+
+
« runtime/vm/intermediate_language.cc ('K') | « runtime/vm/intermediate_language.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698