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

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

Issue 810783002: Clean up FunctionDefinition in the IR S-expression representation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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) (LetPrim v0 (Constant IntConstant(42))) 23 (FunctionDefinition main () return ()
24 (LetPrim v1 (Constant IntConstant(0))) (InvokeContinuation return v1)) 24 (LetPrim v0 (Constant IntConstant(42)))
25 (LetPrim v1 (Constant IntConstant(0)))
26 (InvokeContinuation return v1))
25 """; 27 """;
26 String DEAD_VAL_OUT = """ 28 String DEAD_VAL_OUT = """
27 (FunctionDefinition main ( return) 29 (FunctionDefinition main () return ()
28 (LetPrim v0 (Constant IntConstant(0))) (InvokeContinuation return v0)) 30 (LetPrim v0 (Constant IntConstant(0)))
31 (InvokeContinuation return v0))
29 """; 32 """;
30 33
31 // Iterative dead-val. No optimizations possible since the continuation to 34 // Iterative dead-val. No optimizations possible since the continuation to
32 // InvokeMethod must have one argument, even if it is unused. 35 // InvokeMethod must have one argument, even if it is unused.
33 // 36 //
34 // int main() { 37 // int main() {
35 // int i = 42; 38 // int i = 42;
36 // int j = i + 1; 39 // int j = i + 1;
37 // return 0; 40 // return 0;
38 // } 41 // }
39 42
40 String ITERATIVE_DEAD_VAL1_IN = """ 43 String ITERATIVE_DEAD_VAL1_IN = """
41 (FunctionDefinition main ( return) 44 (FunctionDefinition main () return ()
42 (LetPrim v0 (Constant IntConstant(42))) 45 (LetPrim v0 (Constant IntConstant(42)))
43 (LetPrim v1 (Constant IntConstant(1))) 46 (LetPrim v1 (Constant IntConstant(1)))
44 (LetCont (k0 v2) (LetPrim v3 (Constant IntConstant(0))) 47 (LetCont (k0 v2) (LetPrim v3 (Constant IntConstant(0)))
45 (InvokeContinuation return v3)) 48 (InvokeContinuation return v3))
46 (InvokeMethod v0 + v1 k0)) 49 (InvokeMethod v0 + v1 k0))
47 """; 50 """;
48 String ITERATIVE_DEAD_VAL1_OUT = ITERATIVE_DEAD_VAL1_IN; 51 String ITERATIVE_DEAD_VAL1_OUT = ITERATIVE_DEAD_VAL1_IN;
49 52
50 // Iterative dead-val. IR written by hand. 53 // Iterative dead-val. IR written by hand.
51 54
52 String ITERATIVE_DEAD_VAL2_IN = """ 55 String ITERATIVE_DEAD_VAL2_IN = """
53 (FunctionDefinition main ( return) 56 (FunctionDefinition main () return ()
54 (LetPrim v0 (Constant IntConstant(42))) 57 (LetPrim v0 (Constant IntConstant(42)))
55 (LetPrim v1 58 (LetPrim v1
56 (CreateFunction 59 (CreateFunction
57 (FunctionDefinition f (i return) 60 (FunctionDefinition f (i) return ()
58 (InvokeContinuation return v0)))) 61 (InvokeContinuation return v0))))
59 (LetPrim v2 (Constant IntConstant(0))) 62 (LetPrim v2 (Constant IntConstant(0)))
60 (InvokeContinuation return v2)) 63 (InvokeContinuation return v2))
61 """; 64 """;
62 String ITERATIVE_DEAD_VAL2_OUT = """ 65 String ITERATIVE_DEAD_VAL2_OUT = """
63 (FunctionDefinition main ( return) 66 (FunctionDefinition main () return ()
64 (LetPrim v0 (Constant IntConstant(0))) 67 (LetPrim v0 (Constant IntConstant(0)))
65 (InvokeContinuation return v0)) 68 (InvokeContinuation return v0))
66 """; 69 """;
67 70
68 // Basic dead-cont: letcont k x = L in K -> K (k not free in K). 71 // Basic dead-cont: letcont k x = L in K -> K (k not free in K).
69 // IR written by hand. 72 // IR written by hand.
70 73
71 String DEAD_CONT_IN = """ 74 String DEAD_CONT_IN = """
72 (FunctionDefinition main ( return) 75 (FunctionDefinition main () return ()
73 (LetPrim v4 (Constant IntConstant(0))) 76 (LetPrim v4 (Constant IntConstant(0)))
74 (LetCont (k0 v0) (InvokeConstructor List return)) 77 (LetCont (k0 v0) (InvokeConstructor List return))
75 (LetCont (k1 v1) 78 (LetCont (k1 v1)
76 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0))) 79 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0)))
77 (InvokeContinuation return v3)) 80 (InvokeContinuation return v3))
78 (InvokeStatic print v4 k2)) 81 (InvokeStatic print v4 k2))
79 (InvokeStatic print v4 k1)) 82 (InvokeStatic print v4 k1))
80 """; 83 """;
81 String DEAD_CONT_OUT = """ 84 String DEAD_CONT_OUT = """
82 (FunctionDefinition main ( return) 85 (FunctionDefinition main () return ()
83 (LetPrim v0 (Constant IntConstant(0))) 86 (LetPrim v0 (Constant IntConstant(0)))
84 (LetCont (k0 v1) 87 (LetCont (k0 v1)
85 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0))) 88 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0)))
86 (InvokeContinuation return v3)) 89 (InvokeContinuation return v3))
87 (InvokeStatic print v0 k1)) 90 (InvokeStatic print v0 k1))
88 (InvokeStatic print v0 k0)) 91 (InvokeStatic print v0 k0))
89 """; 92 """;
90 93
91 // Iterative dead-cont. IR written by hand. 94 // Iterative dead-cont. IR written by hand.
92 95
93 String ITERATIVE_DEAD_CONT_IN = """ 96 String ITERATIVE_DEAD_CONT_IN = """
94 (FunctionDefinition main ( return) 97 (FunctionDefinition main () return ()
95 (LetPrim v4 (Constant IntConstant(0))) 98 (LetPrim v4 (Constant IntConstant(0)))
96 (LetCont (k0 v0) (InvokeConstructor List return)) 99 (LetCont (k0 v0) (InvokeConstructor List return))
97 (LetCont (k3 v5) (InvokeContinuation k0 v5)) 100 (LetCont (k3 v5) (InvokeContinuation k0 v5))
98 (LetCont (k1 v1) 101 (LetCont (k1 v1)
99 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0))) 102 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0)))
100 (InvokeContinuation return v3)) 103 (InvokeContinuation return v3))
101 (InvokeStatic print v4 k2)) 104 (InvokeStatic print v4 k2))
102 (InvokeStatic print v4 k1)) 105 (InvokeStatic print v4 k1))
103 """; 106 """;
104 String ITERATIVE_DEAD_CONT_OUT = """ 107 String ITERATIVE_DEAD_CONT_OUT = """
105 (FunctionDefinition main ( return) 108 (FunctionDefinition main () return ()
106 (LetPrim v0 (Constant IntConstant(0))) 109 (LetPrim v0 (Constant IntConstant(0)))
107 (LetCont (k0 v1) 110 (LetCont (k0 v1)
108 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0))) 111 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0)))
109 (InvokeContinuation return v3)) 112 (InvokeContinuation return v3))
110 (InvokeStatic print v0 k1)) 113 (InvokeStatic print v0 k1))
111 (InvokeStatic print v0 k0)) 114 (InvokeStatic print v0 k0))
112 """; 115 """;
113 116
114 // Beta-cont-lin: letcont k x = K in C[k y] -> C[K[y/x]] (k not free in C). 117 // Beta-cont-lin: letcont k x = K in C[k y] -> C[K[y/x]] (k not free in C).
115 // IR written by hand. 118 // IR written by hand.
116 119
117 String BETA_CONT_LIN_IN = """ 120 String BETA_CONT_LIN_IN = """
118 (FunctionDefinition main ( return) 121 (FunctionDefinition main () return ()
119 (LetCont (k0 v0) 122 (LetCont (k0 v0)
120 (LetCont (k1 v1) 123 (LetCont (k1 v1)
121 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0))) 124 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0)))
122 (InvokeContinuation return v3)) 125 (InvokeContinuation return v3))
123 (InvokeStatic print v0 k2)) 126 (InvokeStatic print v0 k2))
124 (InvokeStatic print v0 k1)) 127 (InvokeStatic print v0 k1))
125 (LetPrim v4 (Constant IntConstant(0))) 128 (LetPrim v4 (Constant IntConstant(0)))
126 (InvokeContinuation k0 v4)) 129 (InvokeContinuation k0 v4))
127 """; 130 """;
128 String BETA_CONT_LIN_OUT = """ 131 String BETA_CONT_LIN_OUT = """
129 (FunctionDefinition main ( return) 132 (FunctionDefinition main () return ()
130 (LetPrim v0 (Constant IntConstant(0))) 133 (LetPrim v0 (Constant IntConstant(0)))
131 (LetCont (k0 v1) 134 (LetCont (k0 v1)
132 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0))) 135 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0)))
133 (InvokeContinuation return v3)) 136 (InvokeContinuation return v3))
134 (InvokeStatic print v0 k1)) 137 (InvokeStatic print v0 k1))
135 (InvokeStatic print v0 k0)) 138 (InvokeStatic print v0 k0))
136 """; 139 """;
137 140
138 // Beta-cont-lin with recursive continuation. IR written by hand. 141 // Beta-cont-lin with recursive continuation. IR written by hand.
139 142
140 String RECURSIVE_BETA_CONT_LIN_IN = """ 143 String RECURSIVE_BETA_CONT_LIN_IN = """
141 (FunctionDefinition main ( return) 144 (FunctionDefinition main () return ()
142 (LetCont* (k0 v0) 145 (LetCont* (k0 v0)
143 (InvokeContinuation* k0 v0)) 146 (InvokeContinuation* k0 v0))
144 (LetPrim v1 (Constant IntConstant(0))) 147 (LetPrim v1 (Constant IntConstant(0)))
145 (InvokeContinuation k0 v1)) 148 (InvokeContinuation k0 v1))
146 """; 149 """;
147 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN; 150 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN;
148 151
149 // Beta-cont-lin used inside body. IR written by hand. 152 // Beta-cont-lin used inside body. IR written by hand.
150 153
151 String USED_BETA_CONT_LIN_IN = """ 154 String USED_BETA_CONT_LIN_IN = """
152 (FunctionDefinition main ( return) 155 (FunctionDefinition main () return ()
153 (LetPrim v0 (Constant IntConstant(0))) 156 (LetPrim v0 (Constant IntConstant(0)))
154 (LetCont (k0 v1) 157 (LetCont (k0 v1)
155 (LetCont (k1 v2) 158 (LetCont (k1 v2)
156 (LetCont (k2 v3) (LetPrim v4 (Constant IntConstant(0))) 159 (LetCont (k2 v3) (LetPrim v4 (Constant IntConstant(0)))
157 (InvokeContinuation return v4)) 160 (InvokeContinuation return v4))
158 (InvokeStatic print v1 k2)) 161 (InvokeStatic print v1 k2))
159 (InvokeStatic print v1 k1)) 162 (InvokeStatic print v1 k1))
160 (LetPrim v5 163 (LetPrim v5
161 (CreateFunction 164 (CreateFunction
162 (FunctionDefinition f ( return) 165 (FunctionDefinition f () return ()
163 (InvokeContinuation return v1)))) 166 (InvokeContinuation return v1))))
164 (InvokeContinuation k0 v0)) 167 (InvokeContinuation k0 v0))
165 """; 168 """;
166 String USED_BETA_CONT_LIN_OUT = USED_BETA_CONT_LIN_IN; 169 String USED_BETA_CONT_LIN_OUT = USED_BETA_CONT_LIN_IN;
167 170
168 // Eta-cont: letcont k x = j x in K -> K[j/k]. 171 // Eta-cont: letcont k x = j x in K -> K[j/k].
169 // IR written by hand. 172 // IR written by hand.
170 173
171 String ETA_CONT_IN = """ 174 String ETA_CONT_IN = """
172 (FunctionDefinition main ( return) 175 (FunctionDefinition main () return ()
173 (LetPrim v3 (Constant IntConstant(0))) 176 (LetPrim v3 (Constant IntConstant(0)))
174 (LetCont* (k1 v1) (InvokeContinuation return v3)) 177 (LetCont* (k1 v1) (InvokeContinuation return v3))
175 (LetCont (k0 v0) (InvokeContinuation k1 v0)) 178 (LetCont (k0 v0) (InvokeContinuation k1 v0))
176 (LetPrim v4 179 (LetPrim v4
177 (CreateFunction 180 (CreateFunction
178 (FunctionDefinition f ( return) 181 (FunctionDefinition f () return ()
179 (InvokeContinuation k1 v3)))) 182 (InvokeContinuation k1 v3))))
180 (InvokeContinuation k0 v3)) 183 (InvokeContinuation k0 v3))
181 """; 184 """;
182 String ETA_CONT_OUT = """ 185 String ETA_CONT_OUT = """
183 (FunctionDefinition main ( return) 186 (FunctionDefinition main () return ()
184 (LetPrim v0 (Constant IntConstant(0))) 187 (LetPrim v0 (Constant IntConstant(0)))
185 (LetCont (k0 v1) (InvokeContinuation return v0)) 188 (LetCont (k0 v1) (InvokeContinuation return v0))
186 (InvokeContinuation k0 v0)) 189 (InvokeContinuation k0 v0))
187 """; 190 """;
188 191
189 // Beta-fun-lin and eta-fun might not apply to us, since 192 // Beta-fun-lin and eta-fun might not apply to us, since
190 // a. in (InvokeMethod v0 call k0), v0 might carry state, and 193 // a. in (InvokeMethod v0 call k0), v0 might carry state, and
191 // b. there is no way to generate static nested functions that we could 194 // b. there is no way to generate static nested functions that we could
192 // use InvokeStatic on. 195 // use InvokeStatic on.
193 196
(...skipping 22 matching lines...) Expand all
216 void main() { 219 void main() {
217 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT); 220 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT);
218 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT); 221 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT);
219 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT); 222 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT);
220 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT); 223 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT);
221 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT); 224 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT);
222 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT); 225 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT);
223 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT); 226 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT);
224 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT); 227 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT);
225 } 228 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698