Chromium Code Reviews| Index: lib/compiler/implementation/ssa/optimize.dart |
| =================================================================== |
| --- lib/compiler/implementation/ssa/optimize.dart (revision 7442) |
| +++ lib/compiler/implementation/ssa/optimize.dart (working copy) |
| @@ -553,6 +553,26 @@ |
| HType combinedType = value.propagatedType.union(node.propagatedType); |
| return (combinedType == value.propagatedType) ? value : node; |
| } |
| + |
| + HInstruction visitInvokeDynamicGetter(HInvokeDynamicGetter node) { |
| + HInstruction receiver = node.inputs[0]; |
| + if (!receiver.propagatedType.isUseful()) return node; |
| + Type type = receiver.propagatedType.computeType(compiler); |
| + if (type === null) return node; |
| + MemberSet memberSet = compiler.world.memberSetFor(type, node.name); |
|
kasperl
2012/05/09 11:13:03
I would actually consider not using a MemberSet he
ngeoffray
2012/05/09 11:34:22
Done.
|
| + if (memberSet.isEmpty() || !memberSet.hasJustFields()) return node; |
| + return new HFieldGet(node.name, node.inputs[0]); |
| + } |
| + |
| + HInstruction visitInvokeDynamicSetter(HInvokeDynamicSetter node) { |
| + HInstruction receiver = node.inputs[0]; |
| + if (!receiver.propagatedType.isUseful()) return node; |
| + Type type = receiver.propagatedType.computeType(compiler); |
| + if (type === null) return node; |
| + MemberSet memberSet = compiler.world.memberSetFor(type, node.name); |
| + if (memberSet.isEmpty() || !memberSet.hasJustFields()) return node; |
| + return new HFieldSet(node.name, node.inputs[0], node.inputs[1]); |
| + } |
| } |
| class SsaCheckInserter extends HBaseVisitor implements OptimizationPhase { |