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

Side by Side Diff: tests/compiler/dart2js/backend_dart/opt_shrinking_test.dart

Issue 833353002: Make scoping more prominent in the CPS IR's printed representation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 'sexpr_unstringifier.dart'; 5 import 'sexpr_unstringifier.dart';
6 import "package:expect/expect.dart"; 6 import "package:expect/expect.dart";
7 import 'package:compiler/src/cps_ir/cps_ir_nodes.dart'; 7 import 'package:compiler/src/cps_ir/cps_ir_nodes.dart';
8 import 'package:compiler/src/cps_ir/cps_ir_nodes_sexpr.dart'; 8 import 'package:compiler/src/cps_ir/cps_ir_nodes_sexpr.dart';
9 import 'package:compiler/src/cps_ir/optimizers.dart'; 9 import 'package:compiler/src/cps_ir/optimizers.dart';
10 10
11 // The tests in this file that ensure shrinking reductions work as expected. 11 // The tests in this file that ensure shrinking reductions work as expected.
12 // Reductions and their corresponding names are taken from 12 // Reductions and their corresponding names are taken from
13 // 'Compiling with Continuations, Continued' by Andrew Kennedy. 13 // 'Compiling with Continuations, Continued' by Andrew Kennedy.
14 14
15 // Basic dead-val: letprim x = V in K -> K (x not free in K). 15 // Basic dead-val: letprim x = V in K -> K (x not free in K).
16 // 16 //
17 // int main() { 17 // int main() {
18 // int i = 42; 18 // int i = 42;
19 // return 0; 19 // return 0;
20 // } 20 // }
21 21
22 String DEAD_VAL_IN = """ 22 String DEAD_VAL_IN = """
23 (FunctionDefinition main () return () 23 (FunctionDefinition main () return ()
24 (LetPrim v0 (Constant (Int 42))) 24 (LetPrim (v0 (Constant (Int 42)))
25 (LetPrim v1 (Constant (Int 0))) 25 (LetPrim (v1 (Constant (Int 0)))
26 (InvokeContinuation return v1)) 26 (InvokeContinuation return (v1)))))
27 """; 27 """;
28 String DEAD_VAL_OUT = """ 28 String DEAD_VAL_OUT = """
29 (FunctionDefinition main () return () 29 (FunctionDefinition main () return ()
30 (LetPrim v0 (Constant (Int 0))) 30 (LetPrim (v0 (Constant (Int 0)))
31 (InvokeContinuation return v0)) 31 (InvokeContinuation return (v0))))
32 """; 32 """;
33 33
34 // Iterative dead-val. No optimizations possible since the continuation to 34 // Iterative dead-val. No optimizations possible since the continuation to
35 // InvokeMethod must have one argument, even if it is unused. 35 // InvokeMethod must have one argument, even if it is unused.
36 // 36 //
37 // int main() { 37 // int main() {
38 // int i = 42; 38 // int i = 42;
39 // int j = i + 1; 39 // int j = i + 1;
40 // return 0; 40 // return 0;
41 // } 41 // }
42 42
43 String ITERATIVE_DEAD_VAL1_IN = """ 43 String ITERATIVE_DEAD_VAL1_IN = """
44 (FunctionDefinition main () return () 44 (FunctionDefinition main () return ()
45 (LetPrim v0 (Constant (Int 42))) 45 (LetPrim (v0 (Constant (Int 42)))
46 (LetPrim v1 (Constant (Int 1))) 46 (LetPrim (v1 (Constant (Int 1)))
47 (LetCont (k0 v2) (LetPrim v3 (Constant (Int 0))) 47 (LetCont (k0 (v2)
48 (InvokeContinuation return v3)) 48 (LetPrim (v3 (Constant (Int 0)))
49 (InvokeMethod v0 + v1 k0)) 49 (InvokeContinuation return (v3))))
50 (InvokeMethod v0 + (v1) k0)))))
50 """; 51 """;
51 String ITERATIVE_DEAD_VAL1_OUT = ITERATIVE_DEAD_VAL1_IN; 52 String ITERATIVE_DEAD_VAL1_OUT = ITERATIVE_DEAD_VAL1_IN;
52 53
53 // Iterative dead-val. IR written by hand. 54 // Iterative dead-val. IR written by hand.
54 55
55 String ITERATIVE_DEAD_VAL2_IN = """ 56 String ITERATIVE_DEAD_VAL2_IN = """
56 (FunctionDefinition main () return () 57 (FunctionDefinition main () return ()
57 (LetPrim v0 (Constant (Int 42))) 58 (LetPrim (v0 (Constant (Int 42)))
58 (LetPrim v1 59 (LetPrim (v1
59 (CreateFunction 60 (CreateFunction
60 (FunctionDefinition f (i) return () 61 (FunctionDefinition f (i) return ()
61 (InvokeContinuation return v0)))) 62 (InvokeContinuation return (v0)))))
62 (LetPrim v2 (Constant (Int 0))) 63 (LetPrim (v2 (Constant (Int 0)))
63 (InvokeContinuation return v2)) 64 (InvokeContinuation return (v2))))))
64 """; 65 """;
65 String ITERATIVE_DEAD_VAL2_OUT = """ 66 String ITERATIVE_DEAD_VAL2_OUT = """
66 (FunctionDefinition main () return () 67 (FunctionDefinition main () return ()
67 (LetPrim v0 (Constant (Int 0))) 68 (LetPrim (v0 (Constant (Int 0)))
68 (InvokeContinuation return v0)) 69 (InvokeContinuation return (v0))))
69 """; 70 """;
70 71
71 // Basic dead-cont: letcont k x = L in K -> K (k not free in K). 72 // Basic dead-cont: letcont k x = L in K -> K (k not free in K).
72 // IR written by hand. 73 // IR written by hand.
73 74
74 String DEAD_CONT_IN = """ 75 String DEAD_CONT_IN = """
75 (FunctionDefinition main () return () 76 (FunctionDefinition main () return ()
76 (LetPrim v4 (Constant (Int 0))) 77 (LetPrim (v4 (Constant (Int 0)))
77 (LetCont (k0 v0) (InvokeConstructor List return)) 78 (LetCont (k0 (v0)
78 (LetCont (k1 v1) 79 (InvokeConstructor List () return))
79 (LetCont (k2 v2) (LetPrim v3 (Constant (Int 0))) 80 (LetCont (k1 (v1)
80 (InvokeContinuation return v3)) 81 (LetCont (k2 (v2)
81 (InvokeStatic print v4 k2)) 82 (LetPrim (v3 (Constant (Int 0)))
82 (InvokeStatic print v4 k1)) 83 (InvokeContinuation return (v3))))
84 (InvokeStatic print (v4) k2)))
85 (InvokeStatic print (v4) k1)))))
83 """; 86 """;
84 String DEAD_CONT_OUT = """ 87 String DEAD_CONT_OUT = """
85 (FunctionDefinition main () return () 88 (FunctionDefinition main () return ()
86 (LetPrim v0 (Constant (Int 0))) 89 (LetPrim (v0 (Constant (Int 0)))
87 (LetCont (k0 v1) 90 (LetCont (k0 (v1)
88 (LetCont (k1 v2) (LetPrim v3 (Constant (Int 0))) 91 (LetCont (k1 (v2)
89 (InvokeContinuation return v3)) 92 (LetPrim (v3 (Constant (Int 0)))
90 (InvokeStatic print v0 k1)) 93 (InvokeContinuation return (v3))))
91 (InvokeStatic print v0 k0)) 94 (InvokeStatic print (v0) k1)))
95 (InvokeStatic print (v0) k0))))
92 """; 96 """;
93 97
94 // Iterative dead-cont. IR written by hand. 98 // Iterative dead-cont. IR written by hand.
95 99
96 String ITERATIVE_DEAD_CONT_IN = """ 100 String ITERATIVE_DEAD_CONT_IN = """
97 (FunctionDefinition main () return () 101 (FunctionDefinition main () return ()
98 (LetPrim v4 (Constant (Int 0))) 102 (LetPrim (v4 (Constant (Int 0)))
99 (LetCont (k0 v0) (InvokeConstructor List return)) 103 (LetCont (k0 (v0)
100 (LetCont (k3 v5) (InvokeContinuation k0 v5)) 104 (InvokeConstructor List () return))
101 (LetCont (k1 v1) 105 (LetCont (k3 (v5)
102 (LetCont (k2 v2) (LetPrim v3 (Constant (Int 0))) 106 (InvokeContinuation k0 (v5)))
103 (InvokeContinuation return v3)) 107 (LetCont (k1 (v1)
104 (InvokeStatic print v4 k2)) 108 (LetCont (k2 (v2)
105 (InvokeStatic print v4 k1)) 109 (LetPrim (v3 (Constant (Int 0)))
110 (InvokeContinuation return (v3))))
111 (InvokeStatic print (v4) k2)))
112 (InvokeStatic print (v4) k1))))))
106 """; 113 """;
107 String ITERATIVE_DEAD_CONT_OUT = """ 114 String ITERATIVE_DEAD_CONT_OUT = """
108 (FunctionDefinition main () return () 115 (FunctionDefinition main () return ()
109 (LetPrim v0 (Constant (Int 0))) 116 (LetPrim (v0 (Constant (Int 0)))
110 (LetCont (k0 v1) 117 (LetCont (k0 (v1)
111 (LetCont (k1 v2) (LetPrim v3 (Constant (Int 0))) 118 (LetCont (k1 (v2)
112 (InvokeContinuation return v3)) 119 (LetPrim (v3 (Constant (Int 0)))
113 (InvokeStatic print v0 k1)) 120 (InvokeContinuation return (v3))))
114 (InvokeStatic print v0 k0)) 121 (InvokeStatic print (v0) k1)))
122 (InvokeStatic print (v0) k0))))
115 """; 123 """;
116 124
117 // Beta-cont-lin: letcont k x = K in C[k y] -> C[K[y/x]] (k not free in C). 125 // Beta-cont-lin: letcont k x = K in C[k y] -> C[K[y/x]] (k not free in C).
118 // IR written by hand. 126 // IR written by hand.
119 127
120 String BETA_CONT_LIN_IN = """ 128 String BETA_CONT_LIN_IN = """
121 (FunctionDefinition main () return () 129 (FunctionDefinition main () return ()
122 (LetCont (k0 v0) 130 (LetCont (k0 (v0)
123 (LetCont (k1 v1) 131 (LetCont (k1 (v1)
124 (LetCont (k2 v2) (LetPrim v3 (Constant (Int 0))) 132 (LetCont (k2 (v2)
125 (InvokeContinuation return v3)) 133 (LetPrim (v3 (Constant (Int 0)))
126 (InvokeStatic print v0 k2)) 134 (InvokeContinuation return (v3))))
127 (InvokeStatic print v0 k1)) 135 (InvokeStatic print (v0) k2)))
128 (LetPrim v4 (Constant (Int 0))) 136 (InvokeStatic print (v0) k1)))
129 (InvokeContinuation k0 v4)) 137 (LetPrim (v4 (Constant (Int 0)))
138 (InvokeContinuation k0 (v4)))))
130 """; 139 """;
131 String BETA_CONT_LIN_OUT = """ 140 String BETA_CONT_LIN_OUT = """
132 (FunctionDefinition main () return () 141 (FunctionDefinition main () return ()
133 (LetPrim v0 (Constant (Int 0))) 142 (LetPrim (v0 (Constant (Int 0)))
134 (LetCont (k0 v1) 143 (LetCont (k0 (v1)
135 (LetCont (k1 v2) (LetPrim v3 (Constant (Int 0))) 144 (LetCont (k1 (v2)
136 (InvokeContinuation return v3)) 145 (LetPrim (v3 (Constant (Int 0)))
137 (InvokeStatic print v0 k1)) 146 (InvokeContinuation return (v3))))
138 (InvokeStatic print v0 k0)) 147 (InvokeStatic print (v0) k1)))
148 (InvokeStatic print (v0) k0))))
139 """; 149 """;
140 150
141 // Beta-cont-lin with recursive continuation. IR written by hand. 151 // Beta-cont-lin with recursive continuation. IR written by hand.
142 152
143 String RECURSIVE_BETA_CONT_LIN_IN = """ 153 String RECURSIVE_BETA_CONT_LIN_IN = """
144 (FunctionDefinition main () return () 154 (FunctionDefinition main () return ()
145 (LetCont* (k0 v0) 155 (LetCont* (k0 (v0)
146 (InvokeContinuation* k0 v0)) 156 (InvokeContinuation* k0 (v0)))
147 (LetPrim v1 (Constant (Int 0))) 157 (LetPrim (v1 (Constant (Int 0)))
148 (InvokeContinuation k0 v1)) 158 (InvokeContinuation k0 (v1)))))
149 """; 159 """;
150 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN; 160 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN;
151 161
152 // Beta-cont-lin used inside body. IR written by hand. 162 // Beta-cont-lin used inside body. IR written by hand.
153 163
154 String USED_BETA_CONT_LIN_IN = """ 164 String USED_BETA_CONT_LIN_IN = """
155 (FunctionDefinition main () return () 165 (FunctionDefinition main () return ()
156 (LetPrim v0 (Constant (Int 0))) 166 (LetPrim (v0 (Constant (Int 0)))
157 (LetCont (k0 v1) 167 (LetCont (k0 (v1)
158 (LetCont (k1 v2) 168 (LetCont (k1 (v2)
159 (LetCont (k2 v3) (LetPrim v4 (Constant (Int 0))) 169 (LetCont (k2 (v3)
160 (InvokeContinuation return v4)) 170 (LetPrim (v4 (Constant (Int 0)))
161 (InvokeStatic print v1 k2)) 171 (InvokeContinuation return (v4))))
162 (InvokeStatic print v1 k1)) 172 (InvokeStatic print (v1) k2)))
163 (LetPrim v5 173 (InvokeStatic print (v1) k1)))
164 (CreateFunction 174 (LetPrim (v5
165 (FunctionDefinition f () return () 175 (CreateFunction
166 (InvokeContinuation return v1)))) 176 (FunctionDefinition f () return ()
167 (InvokeContinuation k0 v0)) 177 (InvokeContinuation return (v1)))))
178 (InvokeContinuation k0 (v0))))))
168 """; 179 """;
169 String USED_BETA_CONT_LIN_OUT = USED_BETA_CONT_LIN_IN; 180 String USED_BETA_CONT_LIN_OUT = """
181 (FunctionDefinition main () return ()
182 (LetPrim (v0 (Constant (Int 0)))
183 (LetCont (k0 (v1)
184 (LetCont (k1 (v2)
185 (LetPrim (v3 (Constant (Int 0)))
186 (InvokeContinuation return (v3))))
187 (InvokeStatic print (v0) k1)))
188 (InvokeStatic print (v0) k0))))
189 """;
170 190
171 // Eta-cont: letcont k x = j x in K -> K[j/k]. 191 // Eta-cont: letcont k x = j x in K -> K[j/k].
172 // IR written by hand. 192 // IR written by hand.
173 193
174 String ETA_CONT_IN = """ 194 String ETA_CONT_IN = """
175 (FunctionDefinition main () return () 195 (FunctionDefinition main () return ()
176 (LetPrim v3 (Constant (Int 0))) 196 (LetPrim (v3 (Constant (Int 0)))
177 (LetCont* (k1 v1) (InvokeContinuation return v3)) 197 (LetCont* (k1 (v1)
178 (LetCont (k0 v0) (InvokeContinuation k1 v0)) 198 (InvokeContinuation return (v3)))
179 (LetPrim v4 199 (LetCont (k0 (v0)
180 (CreateFunction 200 (InvokeContinuation k1 (v0)))
181 (FunctionDefinition f () return () 201 (LetPrim (v4
182 (InvokeContinuation k1 v3)))) 202 (CreateFunction
183 (InvokeContinuation k0 v3)) 203 (FunctionDefinition f () return ()
204 (InvokeContinuation k1 (v3)))))
205 (InvokeContinuation k0 (v3)))))))
184 """; 206 """;
185 String ETA_CONT_OUT = """ 207 String ETA_CONT_OUT = """
186 (FunctionDefinition main () return () 208 (FunctionDefinition main () return ()
187 (LetPrim v0 (Constant (Int 0))) 209 (LetPrim (v0 (Constant (Int 0)))
188 (LetCont (k0 v1) (InvokeContinuation return v0)) 210 (LetCont (k0 (v1)
189 (InvokeContinuation k0 v0)) 211 (InvokeContinuation return (v0)))
212 (InvokeContinuation k0 (v0)))))
190 """; 213 """;
191 214
192 // Beta-fun-lin and eta-fun might not apply to us, since 215 // Beta-fun-lin and eta-fun might not apply to us, since
193 // a. in (InvokeMethod v0 call k0), v0 might carry state, and 216 // a. in (InvokeMethod v0 call k0), v0 might carry state, and
194 // b. there is no way to generate static nested functions that we could 217 // b. there is no way to generate static nested functions that we could
195 // use InvokeStatic on. 218 // use InvokeStatic on.
196 219
197 /// Normalizes whitespace by replacing all whitespace sequences by a single 220 /// Normalizes whitespace by replacing all whitespace sequences by a single
198 /// space and trimming leading and trailing whitespace. 221 /// space and trimming leading and trailing whitespace.
199 String normalizeSExpr(String input) { 222 String normalizeSExpr(String input) {
(...skipping 17 matching lines...) Expand all
217 } 240 }
218 241
219 void main() { 242 void main() {
220 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT); 243 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT);
221 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT); 244 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT);
222 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT); 245 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT);
223 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT); 246 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT);
224 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT); 247 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT);
225 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT); 248 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT);
226 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT); 249 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT);
250 testShrinkingReducer(USED_BETA_CONT_LIN_IN, USED_BETA_CONT_LIN_OUT);
227 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT); 251 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT);
228 } 252 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698