OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'compiler_helper.dart'; | 5 import 'compiler_helper.dart'; |
6 | 6 |
7 const String TEST_ONE = r""" | 7 const String TEST_ONE = r""" |
8 void foo(bar) { | 8 void foo(bar) { |
9 for (int i = 0; i < 1; i++) { | 9 for (int i = 0; i < 1; i++) { |
10 print(1 + bar); | 10 print(1 + bar); |
11 print(1 + bar); | 11 print(1 + bar); |
12 } | 12 } |
13 } | 13 } |
14 """; | 14 """; |
15 | 15 |
16 // Check that modulo does not have any side effect and we are | 16 // Check that modulo does not have any side effect and we are |
17 // GVN'ing the length of [:list:]. | 17 // GVN'ing the length of [:list:]. |
18 const String TEST_TWO = r""" | 18 const String TEST_TWO = r""" |
19 void foo(a) { | 19 void foo(a) { |
20 var list = new List<int>(); | 20 var list = new List<int>(); |
21 list[0] = list[0 % a]; | 21 list[0] = list[0 % a]; |
22 list[1] = list[1 % a]; | 22 list[1] = list[1 % a]; |
23 } | 23 } |
24 """; | 24 """; |
25 | 25 |
| 26 // Check that is checks get GVN'ed. |
| 27 const String TEST_THREE = r""" |
| 28 void foo(a) { |
| 29 print(a is num); |
| 30 print(a is num); |
| 31 } |
| 32 """; |
| 33 |
| 34 // Check that instructions that don't have a builtin equivalent can |
| 35 // still be GVN'ed. |
| 36 const String TEST_FOUR = r""" |
| 37 void foo(a) { |
| 38 print(1 >> a); |
| 39 print(1 >> a); |
| 40 } |
| 41 """; |
| 42 |
26 main() { | 43 main() { |
27 String generated = compile(TEST_ONE, entry: 'foo'); | 44 String generated = compile(TEST_ONE, entry: 'foo'); |
28 RegExp regexp = new RegExp(r"1 \+ [a-z]+"); | 45 RegExp regexp = new RegExp(r"1 \+ [a-z]+"); |
29 checkNumberOfMatches(regexp.allMatches(generated).iterator, 1); | 46 checkNumberOfMatches(regexp.allMatches(generated).iterator, 1); |
30 | 47 |
31 generated = compile(TEST_TWO, entry: 'foo'); | 48 generated = compile(TEST_TWO, entry: 'foo'); |
32 checkNumberOfMatches(new RegExp("length").allMatches(generated).iterator, 1); | 49 checkNumberOfMatches(new RegExp("length").allMatches(generated).iterator, 1); |
| 50 |
| 51 generated = compile(TEST_THREE, entry: 'foo'); |
| 52 checkNumberOfMatches(new RegExp("number").allMatches(generated).iterator, 1); |
| 53 |
| 54 generated = compile(TEST_FOUR, entry: 'foo'); |
| 55 checkNumberOfMatches(new RegExp("shr").allMatches(generated).iterator, 1); |
33 } | 56 } |
OLD | NEW |