Index: tests/language/vm/load_to_load_forwarding_vm_test.dart |
diff --git a/tests/language/vm/load_to_load_forwarding_vm_test.dart b/tests/language/vm/load_to_load_forwarding_vm_test.dart |
index 5926305c36f8c7f76ddb37fcaba08d85e3d3fbf0..86c5de7771be51d267fd1ee3569a8f81470b9d64 100644 |
--- a/tests/language/vm/load_to_load_forwarding_vm_test.dart |
+++ b/tests/language/vm/load_to_load_forwarding_vm_test.dart |
@@ -240,49 +240,217 @@ testIndexedNoAlias(a) { |
return a[0] + a[1]; |
} |
-testIndexedAliasedStore(a, b) { |
- a[0] = 1; |
- a[1] = 2; |
- if (a == b) { |
- b[0] = 3; |
- } |
- return a[0] + a[1]; |
+// |
+// Tests for indexed store aliases were autogenerated to have extensive |
+// coverage for all interesting aliasing combinations within the alias |
+// lattice (*[*], *[C], X[*], X[C]) |
+// |
+ |
+testIndexedAliasedStore1(i) { |
+ var a = new List(2); |
+ a[0] = 1; // X[C] |
+ a[i] = 2; // X[*] |
+ return a[0]; |
} |
-testIndexedAliasedStore1(a, b) { |
- a[0] = 1; |
- a[1] = 2; |
- if (a == b) { |
- b[0] = 3; |
- } |
- return a[0] + a[1]; |
+testIndexedAliasedStore2(f, c) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ a[0] = 1; // X[C] |
+ d[0] = 2; // *[C] |
+ return a[0]; |
} |
-testIndexedAliasedStore2(a, b, i) { |
- a[0] = 1; |
- a[1] = 2; |
- if (a == b) { |
- b[i] = 3; |
- } |
- return a[0] + a[1]; |
+testIndexedAliasedStore3(f, c, i) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ a[0] = 1; // X[C] |
+ d[i] = 2; // *[*] |
+ return a[0]; |
} |
+testIndexedAliasedStore4(i) { |
+ var a = new List(2); |
+ a[i] = 1; // X[*] |
+ a[0] = 2; // X[C] |
+ return a[i]; |
+} |
-testIndexedAliasedStore3(i) { |
+testIndexedAliasedStore5(i, j) { |
var a = new List(2); |
- a[0] = 1; |
- a[i] = 3; |
- return a[0]; |
+ a[i] = 1; // X[*] |
+ a[j] = 2; // X[*] |
+ return a[i]; |
} |
+testIndexedAliasedStore6(i, f, c) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ a[i] = 1; // X[*] |
+ d[0] = 2; // *[C] |
+ return a[i]; |
+} |
-testIndexedAliasedStore4(b) { |
+testIndexedAliasedStore7(i, f, c) { |
var a = new List(2); |
- a[0] = 1; |
- b[0] = 3; |
- return a[0]; |
+ var d = f ? a : c; |
+ a[i] = 1; // X[*] |
+ d[i] = 2; // *[*] |
+ return a[i]; |
+} |
+ |
+testIndexedAliasedStore8(c, i) { |
+ c[0] = 1; // *[C] |
+ c[i] = 2; // *[*] |
+ return c[0]; |
+} |
+ |
+testIndexedAliasedStore9(c, f) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ c[0] = 1; // *[C] |
+ d[0] = 2; // *[C] |
+ return c[0]; |
+} |
+ |
+testIndexedAliasedStore10(c, i) { |
+ c[i] = 1; // *[*] |
+ c[0] = 2; // *[C] |
+ return c[i]; |
} |
+testIndexedAliasedStore11(c, i, j) { |
+ c[i] = 1; // *[*] |
+ c[j] = 2; // *[*] |
+ return c[i]; |
+} |
+ |
+testIndexedAliasedStore12(f, c) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ d[0] = 1; // *[C] |
+ a[0] = 2; // X[C] |
+ return d[0]; |
+} |
+ |
+testIndexedAliasedStore13(f, c, i) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ d[0] = 1; // *[C] |
+ a[i] = 2; // X[*] |
+ return d[0]; |
+} |
+ |
+testIndexedAliasedStore14(f, c, i) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ d[i] = 1; // *[*] |
+ a[0] = 2; // X[C] |
+ return d[i]; |
+} |
+ |
+testIndexedAliasedStore15(f, c, i) { |
+ var a = new List(2); |
+ var d = f ? a : c; |
+ d[i] = 1; // *[*] |
+ a[i] = 2; // X[*] |
+ return d[i]; |
+} |
+ |
+testIndexedAliasedStores() { |
+ var arr = new List(2); |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore1(0)); |
+ Expect.equals(1, testIndexedAliasedStore1(1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore2(false, arr)); |
+ Expect.equals(2, testIndexedAliasedStore2(true, arr)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore3(false, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore3(false, arr, 1)); |
+ Expect.equals(2, testIndexedAliasedStore3(true, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore3(true, arr, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore4(0)); |
+ Expect.equals(1, testIndexedAliasedStore4(1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore5(0, 0)); |
+ Expect.equals(1, testIndexedAliasedStore5(0, 1)); |
+ Expect.equals(1, testIndexedAliasedStore5(1, 0)); |
+ Expect.equals(2, testIndexedAliasedStore5(1, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore6(0, false, arr)); |
+ Expect.equals(2, testIndexedAliasedStore6(0, true, arr)); |
+ Expect.equals(1, testIndexedAliasedStore6(1, false, arr)); |
+ Expect.equals(1, testIndexedAliasedStore6(1, true, arr)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore7(0, false, arr)); |
+ Expect.equals(2, testIndexedAliasedStore7(0, true, arr)); |
+ Expect.equals(1, testIndexedAliasedStore7(1, false, arr)); |
+ Expect.equals(2, testIndexedAliasedStore7(1, true, arr)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore8(arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore8(arr, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore9(arr, false)); |
+ Expect.equals(1, testIndexedAliasedStore9(arr, true)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore10(arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore10(arr, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(2, testIndexedAliasedStore11(arr, 0, 0)); |
+ Expect.equals(1, testIndexedAliasedStore11(arr, 0, 1)); |
+ Expect.equals(1, testIndexedAliasedStore11(arr, 1, 0)); |
+ Expect.equals(2, testIndexedAliasedStore11(arr, 1, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore12(false, arr)); |
+ Expect.equals(2, testIndexedAliasedStore12(true, arr)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore13(false, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore13(false, arr, 1)); |
+ Expect.equals(2, testIndexedAliasedStore13(true, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore13(true, arr, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore14(false, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore14(false, arr, 1)); |
+ Expect.equals(2, testIndexedAliasedStore14(true, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore14(true, arr, 1)); |
+ } |
+ |
+ for (var i = 0; i < 50; i++) { |
+ Expect.equals(1, testIndexedAliasedStore15(false, arr, 0)); |
+ Expect.equals(1, testIndexedAliasedStore15(false, arr, 1)); |
+ Expect.equals(2, testIndexedAliasedStore15(true, arr, 0)); |
+ Expect.equals(2, testIndexedAliasedStore15(true, arr, 1)); |
+ } |
+} |
var indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; |
@@ -316,7 +484,7 @@ main() { |
final obj = new X(new X(new X(null))); |
- final cs = new C(0, new C(1, new C(2, null))); |
+ final cs = new C(0, new C(1, new C(2, null))); |
for (var i = 0; i < 20; i++) { |
Expect.listEquals([0x02010000, 0x03020100], foo(new A(0, 0))); |
@@ -361,22 +529,8 @@ main() { |
for (var i = 0; i < 20; i++) { |
Expect.equals(3, testIndexedNoAlias(array)); |
} |
- for (var i = 0; i < 20; i++) { |
- Expect.equals(5, testIndexedAliasedStore1(array, array)); |
- } |
- for (var i = 0; i < 20; i++) { |
- Expect.equals(4, testIndexedAliasedStore2(array, array, indices[1])); |
- } |
- for (var i = 0; i < 20; i++) { |
- Expect.equals(3, testIndexedAliasedStore3(indices[0])); |
- } |
- for (var i = 0; i < 20; i++) { |
- Expect.equals(1, testIndexedAliasedStore3(indices[1])); |
- } |
- for (var i = 0; i < 20; i++) { |
- Expect.equals(1, testIndexedAliasedStore4(array)); |
- } |
+ testIndexedAliasedStores(); |
var test_array = new List(1); |
for (var i = 0; i < 20; i++) { |