Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 class SsaCodeGeneratorTask extends CompilerTask { | 5 class SsaCodeGeneratorTask extends CompilerTask { |
| 6 final JavaScriptBackend backend; | 6 final JavaScriptBackend backend; |
| 7 SsaCodeGeneratorTask(JavaScriptBackend backend) | 7 SsaCodeGeneratorTask(JavaScriptBackend backend) |
| 8 : this.backend = backend, | 8 : this.backend = backend, |
| 9 super(backend.compiler); | 9 super(backend.compiler); |
| 10 String get name() => 'SSA code generator'; | 10 String get name() => 'SSA code generator'; |
| (...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1165 endExpression(JSPrecedence.EQUALITY_PRECEDENCE); | 1165 endExpression(JSPrecedence.EQUALITY_PRECEDENCE); |
| 1166 } else if (node.element === equalsNullElement || | 1166 } else if (node.element === equalsNullElement || |
| 1167 node.element === boolifiedEqualsNullElement) { | 1167 node.element === boolifiedEqualsNullElement) { |
| 1168 beginExpression(JSPrecedence.CALL_PRECEDENCE); | 1168 beginExpression(JSPrecedence.CALL_PRECEDENCE); |
| 1169 use(node.target, JSPrecedence.CALL_PRECEDENCE); | 1169 use(node.target, JSPrecedence.CALL_PRECEDENCE); |
| 1170 buffer.add('('); | 1170 buffer.add('('); |
| 1171 use(node.left, JSPrecedence.ASSIGNMENT_PRECEDENCE); | 1171 use(node.left, JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| 1172 buffer.add(')'); | 1172 buffer.add(')'); |
| 1173 endExpression(JSPrecedence.CALL_PRECEDENCE); | 1173 endExpression(JSPrecedence.CALL_PRECEDENCE); |
| 1174 } else { | 1174 } else { |
| 1175 visitInvokeStatic(node); | 1175 if (node.left is HFieldGet && node.right is HConstant) { |
|
ngeoffray
2012/06/14 13:01:21
This is too late in the game. The node.builtin sho
Søren Gjesse
2012/06/15 13:19:59
Removed all this as the SSA optimization phase now
| |
| 1176 HFieldGet left = node.left; | |
| 1177 HConstant right = node.right; | |
| 1178 Type type = left.receiver.propagatedType.computeType(compiler); | |
| 1179 if (left.element != null && | |
| 1180 compiler.codegenWorld.hasFieldOnlyIntegerSetters( | |
| 1181 type, left.element.name)) { | |
| 1182 switch (compiler.pass) { | |
| 1183 case 1: | |
| 1184 visitInvokeStatic(node); | |
| 1185 break; | |
| 1186 case 2: | |
| 1187 if (right.isConstantInteger()) { | |
| 1188 buffer.add('('); | |
| 1189 use(node.left, JSPrecedence.EQUALITY_PRECEDENCE); | |
| 1190 buffer.add(' === '); | |
| 1191 use(node.right, JSPrecedence.RELATIONAL_PRECEDENCE); | |
| 1192 buffer.add(')'); | |
| 1193 } else { | |
| 1194 visitInvokeStatic(node); | |
| 1195 } | |
| 1196 break; | |
| 1197 } | |
| 1198 } else { | |
| 1199 visitInvokeStatic(node); | |
| 1200 } | |
| 1201 } else { | |
| 1202 visitInvokeStatic(node); | |
| 1203 } | |
| 1176 } | 1204 } |
| 1177 } | 1205 } |
| 1178 | 1206 |
| 1179 visitAdd(HAdd node) => visitInvokeBinary(node, '+'); | 1207 visitAdd(HAdd node) => visitInvokeBinary(node, '+'); |
| 1180 visitDivide(HDivide node) => visitInvokeBinary(node, '/'); | 1208 visitDivide(HDivide node) => visitInvokeBinary(node, '/'); |
| 1181 visitMultiply(HMultiply node) => visitInvokeBinary(node, '*'); | 1209 visitMultiply(HMultiply node) => visitInvokeBinary(node, '*'); |
| 1182 visitSubtract(HSubtract node) => visitInvokeBinary(node, '-'); | 1210 visitSubtract(HSubtract node) => visitInvokeBinary(node, '-'); |
| 1183 // Truncating divide does not have a JS equivalent. | 1211 // Truncating divide does not have a JS equivalent. |
| 1184 visitTruncatingDivide(HTruncatingDivide node) => visitInvokeStatic(node); | 1212 visitTruncatingDivide(HTruncatingDivide node) => visitInvokeStatic(node); |
| 1185 // Modulo cannot be mapped to the native operator (different semantics). | 1213 // Modulo cannot be mapped to the native operator (different semantics). |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1721 visitFieldSet(HFieldSet node) { | 1749 visitFieldSet(HFieldSet node) { |
| 1722 String name; | 1750 String name; |
| 1723 if (!node.isFromActivation()) { | 1751 if (!node.isFromActivation()) { |
| 1724 name = compiler.namer.getName(node.element); | 1752 name = compiler.namer.getName(node.element); |
| 1725 beginExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); | 1753 beginExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| 1726 use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); | 1754 use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); |
| 1727 buffer.add('.'); | 1755 buffer.add('.'); |
| 1728 buffer.add(name); | 1756 buffer.add(name); |
| 1729 Type type = node.receiver.propagatedType.computeType(compiler); | 1757 Type type = node.receiver.propagatedType.computeType(compiler); |
| 1730 if (type != null) { | 1758 if (type != null) { |
| 1731 world.registerFieldSetter(node.element.name, type); | 1759 Type valueType = node.value.propagatedType.computeType(compiler); |
| 1760 if (valueType.toString() == "int") { | |
|
ngeoffray
2012/06/14 13:01:21
You should change that to node.value.isInteger()
Søren Gjesse
2012/06/15 13:19:59
Done.
| |
| 1761 world.registerFieldSetter(node.element.name, type, true); | |
| 1762 } else { | |
| 1763 world.registerFieldSetter(node.element.name, type, false); | |
| 1764 } | |
| 1732 } | 1765 } |
| 1733 } else { | 1766 } else { |
| 1734 declareInstruction(node.receiver); | 1767 declareInstruction(node.receiver); |
| 1735 } | 1768 } |
| 1736 buffer.add(' = '); | 1769 buffer.add(' = '); |
| 1737 use(node.value, JSPrecedence.ASSIGNMENT_PRECEDENCE); | 1770 use(node.value, JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| 1738 if (node.receiver !== null) { | 1771 if (node.receiver !== null) { |
| 1739 endExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); | 1772 endExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| 1740 } | 1773 } |
| 1741 } | 1774 } |
| (...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2885 startBailoutSwitch(); | 2918 startBailoutSwitch(); |
| 2886 } | 2919 } |
| 2887 } | 2920 } |
| 2888 | 2921 |
| 2889 void endLabeledBlock(HLabeledBlockInformation labeledBlockInfo) { | 2922 void endLabeledBlock(HLabeledBlockInformation labeledBlockInfo) { |
| 2890 if (labeledBlockInfo.body.start.hasGuards()) { | 2923 if (labeledBlockInfo.body.start.hasGuards()) { |
| 2891 endBailoutSwitch(); | 2924 endBailoutSwitch(); |
| 2892 } | 2925 } |
| 2893 } | 2926 } |
| 2894 } | 2927 } |
| OLD | NEW |