Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 String BETA_CONT_LIN_OUT = """ | 128 String BETA_CONT_LIN_OUT = """ |
| 129 (FunctionDefinition main ( return) | 129 (FunctionDefinition main ( return) |
| 130 (LetPrim v0 (Constant IntConstant(0))) | 130 (LetPrim v0 (Constant IntConstant(0))) |
| 131 (LetCont (k0 v1) | 131 (LetCont (k0 v1) |
| 132 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0))) | 132 (LetCont (k1 v2) (LetPrim v3 (Constant IntConstant(0))) |
| 133 (InvokeContinuation return v3)) | 133 (InvokeContinuation return v3)) |
| 134 (InvokeStatic print v0 k1)) | 134 (InvokeStatic print v0 k1)) |
| 135 (InvokeStatic print v0 k0)) | 135 (InvokeStatic print v0 k0)) |
| 136 """; | 136 """; |
| 137 | 137 |
| 138 // Beta-cont-lin with continuation passed as arg in invoke. IR written by hand. | |
| 139 | |
| 140 String ARG_BETA_CONT_LIN_IN = """ | |
| 141 (FunctionDefinition main ( return) | |
| 142 (LetCont (k0 v0) | |
| 143 (LetPrim v1 (Constant IntConstant(0))) | |
| 144 (InvokeStatic print v1 return)) | |
| 145 (InvokeContinuation return k0)) | |
| 146 """; | |
| 147 String ARG_BETA_CONT_LIN_OUT = ARG_BETA_CONT_LIN_IN; | |
| 148 | |
| 149 // Beta-cont-lin with recursive continuation. IR written by hand. | 138 // Beta-cont-lin with recursive continuation. IR written by hand. |
| 150 | 139 |
| 151 String RECURSIVE_BETA_CONT_LIN_IN = """ | 140 String RECURSIVE_BETA_CONT_LIN_IN = """ |
| 152 (FunctionDefinition main ( return) | 141 (FunctionDefinition main ( return) |
| 153 (LetCont* (k0 v0) | 142 (LetCont* (k0 v0) |
| 154 (InvokeContinuation* k0 v0)) | 143 (InvokeContinuation* k0 v0)) |
| 155 (LetPrim v1 (Constant IntConstant(0))) | 144 (LetPrim v1 (Constant IntConstant(0))) |
| 156 (InvokeContinuation k0 v1)) | 145 (InvokeContinuation k0 v1)) |
| 157 """; | 146 """; |
| 158 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN; | 147 String RECURSIVE_BETA_CONT_LIN_OUT = RECURSIVE_BETA_CONT_LIN_IN; |
| 159 | 148 |
| 160 // Beta-cont-lin used inside body. IR written by hand. | 149 // Beta-cont-lin used inside body. IR written by hand. |
| 161 | 150 |
| 162 String USED_BETA_CONT_LIN_IN = """ | 151 String USED_BETA_CONT_LIN_IN = """ |
| 163 (FunctionDefinition main ( return) | 152 (FunctionDefinition main ( return) |
| 164 (LetCont (k0 v0) | 153 (LetPrim v0 (Constant IntConstant(0))) |
| 165 (LetCont (k1 v1) | 154 (LetCont (k0 v1) |
| 166 (LetCont (k2 v2) (LetPrim v3 (Constant IntConstant(0))) | 155 (LetCont (k1 v2) |
| 167 (InvokeContinuation return v3)) | 156 (LetCont (k2 v3) (LetPrim v4 (Constant IntConstant(0))) |
| 168 (InvokeStatic print v0 k2)) | 157 (InvokeContinuation return v4)) |
| 169 (InvokeStatic print v0 k1)) | 158 (InvokeStatic print v1 k2)) |
| 170 (LetPrim v4 | 159 (InvokeStatic print v1 k1)) |
| 160 (LetPrim v5 | |
| 171 (CreateFunction | 161 (CreateFunction |
| 172 (FunctionDefinition f ( return) | 162 (FunctionDefinition f ( return) |
| 173 (InvokeContinuation return k0)))) | 163 (InvokeContinuation return v1)))) |
| 174 (InvokeContinuation k0 v4)) | 164 (InvokeContinuation k0 v0)) |
|
Kevin Millikin (Google)
2014/11/07 11:58:54
v4 is not in scope here. I've introduced a bindin
| |
| 175 """; | 165 """; |
| 176 String USED_BETA_CONT_LIN_OUT = USED_BETA_CONT_LIN_IN; | 166 String USED_BETA_CONT_LIN_OUT = USED_BETA_CONT_LIN_IN; |
| 177 | 167 |
| 178 // Eta-cont: letcont k x = j x in K -> K[j/k]. | 168 // Eta-cont: letcont k x = j x in K -> K[j/k]. |
| 179 // IR written by hand. | 169 // IR written by hand. |
| 180 | 170 |
| 181 String ETA_CONT_IN = """ | 171 String ETA_CONT_IN = """ |
| 182 (FunctionDefinition main ( return) | 172 (FunctionDefinition main ( return) |
| 183 (LetPrim v3 (Constant IntConstant(0))) | 173 (LetPrim v3 (Constant IntConstant(0))) |
| 184 (LetCont* (k1 v1) (InvokeContinuation return v3)) | 174 (LetCont* (k1 v1) (InvokeContinuation return v3)) |
| 185 (LetCont (k0 v0) (InvokeContinuation k1 v0)) | 175 (LetCont (k0 v0) (InvokeContinuation k1 v0)) |
| 186 (LetPrim v4 | 176 (LetPrim v4 |
| 187 (CreateFunction | 177 (CreateFunction |
| 188 (FunctionDefinition f ( return) | 178 (FunctionDefinition f ( return) |
| 189 (InvokeContinuation k1 k0)))) | 179 (InvokeContinuation k1 v3)))) |
| 190 (InvokeContinuation k0 v3)) | 180 (InvokeContinuation k0 v3)) |
| 191 """; | 181 """; |
| 192 String ETA_CONT_OUT = """ | 182 String ETA_CONT_OUT = """ |
| 193 (FunctionDefinition main ( return) | 183 (FunctionDefinition main ( return) |
| 194 (LetPrim v0 (Constant IntConstant(0))) | 184 (LetPrim v0 (Constant IntConstant(0))) |
| 195 (LetCont (k0 v1) (InvokeContinuation return v0)) | 185 (LetCont (k0 v1) (InvokeContinuation return v0)) |
| 196 (InvokeContinuation k0 v0)) | 186 (InvokeContinuation k0 v0)) |
| 197 """; | 187 """; |
| 198 | 188 |
| 199 // Beta-fun-lin and eta-fun might not apply to us, since | 189 // Beta-fun-lin and eta-fun might not apply to us, since |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 213 final unstringifier = new SExpressionUnstringifier(); | 203 final unstringifier = new SExpressionUnstringifier(); |
| 214 final stringifier = new SExpressionStringifier(); | 204 final stringifier = new SExpressionStringifier(); |
| 215 final optimizer = new ShrinkingReducer(); | 205 final optimizer = new ShrinkingReducer(); |
| 216 | 206 |
| 217 FunctionDefinition f = unstringifier.unstringify(input); | 207 FunctionDefinition f = unstringifier.unstringify(input); |
| 218 optimizer.rewrite(f); | 208 optimizer.rewrite(f); |
| 219 | 209 |
| 220 String expected = normalizeSExpr(expectedOutput); | 210 String expected = normalizeSExpr(expectedOutput); |
| 221 String actual = normalizeSExpr(stringifier.visit(f)); | 211 String actual = normalizeSExpr(stringifier.visit(f)); |
| 222 | 212 |
| 223 Expect.equals(expected, actual); | 213 Expect.equals(expected, actual); |
| 224 } | 214 } |
| 225 | 215 |
| 226 void main() { | 216 void main() { |
| 227 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT); | 217 testShrinkingReducer(DEAD_VAL_IN, DEAD_VAL_OUT); |
| 228 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT); | 218 testShrinkingReducer(ITERATIVE_DEAD_VAL1_IN, ITERATIVE_DEAD_VAL1_OUT); |
| 229 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT); | 219 testShrinkingReducer(ITERATIVE_DEAD_VAL2_IN, ITERATIVE_DEAD_VAL2_OUT); |
| 230 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT); | 220 testShrinkingReducer(DEAD_CONT_IN, DEAD_CONT_OUT); |
| 231 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT); | 221 testShrinkingReducer(ITERATIVE_DEAD_CONT_IN, ITERATIVE_DEAD_CONT_OUT); |
| 232 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT); | 222 testShrinkingReducer(BETA_CONT_LIN_IN, BETA_CONT_LIN_OUT); |
| 233 testShrinkingReducer(ARG_BETA_CONT_LIN_IN, ARG_BETA_CONT_LIN_OUT); | |
| 234 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT); | 223 testShrinkingReducer(RECURSIVE_BETA_CONT_LIN_IN, RECURSIVE_BETA_CONT_LIN_OUT); |
| 235 testShrinkingReducer(USED_BETA_CONT_LIN_IN, USED_BETA_CONT_LIN_OUT); | |
| 236 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT); | 224 testShrinkingReducer(ETA_CONT_IN, ETA_CONT_OUT); |
| 237 } | 225 } |
| OLD | NEW |