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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/ssa/nodes.dart

Issue 106973008: Optimize num::~/, num::>> and num::<< for some cases. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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) 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 part of ssa; 5 part of ssa;
6 6
7 abstract class HVisitor<R> { 7 abstract class HVisitor<R> {
8 R visitAdd(HAdd node); 8 R visitAdd(HAdd node);
9 R visitBitAnd(HBitAnd node); 9 R visitBitAnd(HBitAnd node);
10 R visitBitNot(HBitNot node); 10 R visitBitNot(HBitNot node);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 R visitShiftRight(HShiftRight node); 58 R visitShiftRight(HShiftRight node);
59 R visitStatic(HStatic node); 59 R visitStatic(HStatic node);
60 R visitStaticStore(HStaticStore node); 60 R visitStaticStore(HStaticStore node);
61 R visitStringConcat(HStringConcat node); 61 R visitStringConcat(HStringConcat node);
62 R visitStringify(HStringify node); 62 R visitStringify(HStringify node);
63 R visitSubtract(HSubtract node); 63 R visitSubtract(HSubtract node);
64 R visitSwitch(HSwitch node); 64 R visitSwitch(HSwitch node);
65 R visitThis(HThis node); 65 R visitThis(HThis node);
66 R visitThrow(HThrow node); 66 R visitThrow(HThrow node);
67 R visitThrowExpression(HThrowExpression node); 67 R visitThrowExpression(HThrowExpression node);
68 R visitTruncatingDivide(HTruncatingDivide node);
68 R visitTry(HTry node); 69 R visitTry(HTry node);
69 R visitTypeConversion(HTypeConversion node); 70 R visitTypeConversion(HTypeConversion node);
70 R visitTypeKnown(HTypeKnown node); 71 R visitTypeKnown(HTypeKnown node);
71 R visitReadTypeVariable(HReadTypeVariable node); 72 R visitReadTypeVariable(HReadTypeVariable node);
72 R visitFunctionType(HFunctionType node); 73 R visitFunctionType(HFunctionType node);
73 R visitVoidType(HVoidType node); 74 R visitVoidType(HVoidType node);
74 R visitInterfaceType(HInterfaceType node); 75 R visitInterfaceType(HInterfaceType node);
75 R visitDynamicType(HDynamicType node); 76 R visitDynamicType(HDynamicType node);
76 } 77 }
77 78
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 visitShiftRight(HShiftRight node) => visitBinaryBitOp(node); 325 visitShiftRight(HShiftRight node) => visitBinaryBitOp(node);
325 visitSubtract(HSubtract node) => visitBinaryArithmetic(node); 326 visitSubtract(HSubtract node) => visitBinaryArithmetic(node);
326 visitSwitch(HSwitch node) => visitControlFlow(node); 327 visitSwitch(HSwitch node) => visitControlFlow(node);
327 visitStatic(HStatic node) => visitInstruction(node); 328 visitStatic(HStatic node) => visitInstruction(node);
328 visitStaticStore(HStaticStore node) => visitInstruction(node); 329 visitStaticStore(HStaticStore node) => visitInstruction(node);
329 visitStringConcat(HStringConcat node) => visitInstruction(node); 330 visitStringConcat(HStringConcat node) => visitInstruction(node);
330 visitStringify(HStringify node) => visitInstruction(node); 331 visitStringify(HStringify node) => visitInstruction(node);
331 visitThis(HThis node) => visitParameterValue(node); 332 visitThis(HThis node) => visitParameterValue(node);
332 visitThrow(HThrow node) => visitControlFlow(node); 333 visitThrow(HThrow node) => visitControlFlow(node);
333 visitThrowExpression(HThrowExpression node) => visitInstruction(node); 334 visitThrowExpression(HThrowExpression node) => visitInstruction(node);
335 visitTruncatingDivide(HTruncatingDivide node) => visitBinaryArithmetic(node);
334 visitTry(HTry node) => visitControlFlow(node); 336 visitTry(HTry node) => visitControlFlow(node);
335 visitIs(HIs node) => visitInstruction(node); 337 visitIs(HIs node) => visitInstruction(node);
336 visitTypeConversion(HTypeConversion node) => visitCheck(node); 338 visitTypeConversion(HTypeConversion node) => visitCheck(node);
337 visitTypeKnown(HTypeKnown node) => visitCheck(node); 339 visitTypeKnown(HTypeKnown node) => visitCheck(node);
338 visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node); 340 visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node);
339 visitFunctionType(HFunctionType node) => visitInstruction(node); 341 visitFunctionType(HFunctionType node) => visitInstruction(node);
340 visitVoidType(HVoidType node) => visitInstruction(node); 342 visitVoidType(HVoidType node) => visitInstruction(node);
341 visitInterfaceType(HInterfaceType node) => visitInstruction(node); 343 visitInterfaceType(HInterfaceType node) => visitInstruction(node);
342 visitDynamicType(HDynamicType node) => visitInstruction(node); 344 visitDynamicType(HDynamicType node) => visitInstruction(node);
343 } 345 }
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 static const int INVOKE_STATIC_TYPECODE = 26; 793 static const int INVOKE_STATIC_TYPECODE = 26;
792 static const int INDEX_TYPECODE = 27; 794 static const int INDEX_TYPECODE = 27;
793 static const int IS_TYPECODE = 28; 795 static const int IS_TYPECODE = 28;
794 static const int INVOKE_DYNAMIC_TYPECODE = 29; 796 static const int INVOKE_DYNAMIC_TYPECODE = 29;
795 static const int SHIFT_RIGHT_TYPECODE = 30; 797 static const int SHIFT_RIGHT_TYPECODE = 30;
796 static const int READ_TYPE_VARIABLE_TYPECODE = 31; 798 static const int READ_TYPE_VARIABLE_TYPECODE = 31;
797 static const int FUNCTION_TYPE_TYPECODE = 32; 799 static const int FUNCTION_TYPE_TYPECODE = 32;
798 static const int VOID_TYPE_TYPECODE = 33; 800 static const int VOID_TYPE_TYPECODE = 33;
799 static const int INTERFACE_TYPE_TYPECODE = 34; 801 static const int INTERFACE_TYPE_TYPECODE = 34;
800 static const int DYNAMIC_TYPE_TYPECODE = 35; 802 static const int DYNAMIC_TYPE_TYPECODE = 35;
803 static const int TRUNCATING_DIVIDE_TYPECODE = 36;
801 804
802 HInstruction(this.inputs, this.instructionType) 805 HInstruction(this.inputs, this.instructionType)
803 : id = idCounter++, usedBy = <HInstruction>[] { 806 : id = idCounter++, usedBy = <HInstruction>[] {
804 assert(inputs.every((e) => e != null)); 807 assert(inputs.every((e) => e != null));
805 } 808 }
806 809
807 int get hashCode => id; 810 int get hashCode => id;
808 811
809 bool useGvn() => _useGvn; 812 bool useGvn() => _useGvn;
810 void setUseGvn() { _useGvn = true; } 813 void setUseGvn() { _useGvn = true; }
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 HSubtract(left, right, selector, type) : super(left, right, selector, type); 1675 HSubtract(left, right, selector, type) : super(left, right, selector, type);
1673 accept(HVisitor visitor) => visitor.visitSubtract(this); 1676 accept(HVisitor visitor) => visitor.visitSubtract(this);
1674 1677
1675 BinaryOperation operation(ConstantSystem constantSystem) 1678 BinaryOperation operation(ConstantSystem constantSystem)
1676 => constantSystem.subtract; 1679 => constantSystem.subtract;
1677 int typeCode() => HInstruction.SUBTRACT_TYPECODE; 1680 int typeCode() => HInstruction.SUBTRACT_TYPECODE;
1678 bool typeEquals(other) => other is HSubtract; 1681 bool typeEquals(other) => other is HSubtract;
1679 bool dataEquals(HInstruction other) => true; 1682 bool dataEquals(HInstruction other) => true;
1680 } 1683 }
1681 1684
1685 class HTruncatingDivide extends HBinaryArithmetic {
1686 HTruncatingDivide(left, right, selector, type)
1687 : super(left, right, selector, type);
1688 accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
1689
1690 BinaryOperation operation(ConstantSystem constantSystem)
1691 => constantSystem.truncatingDivide;
1692 int typeCode() => HInstruction.TRUNCATING_DIVIDE_TYPECODE;
1693 bool typeEquals(other) => other is HTruncatingDivide;
1694 bool dataEquals(HInstruction other) => true;
1695 }
1696
1682 /** 1697 /**
1683 * An [HSwitch] instruction has one input for the incoming 1698 * An [HSwitch] instruction has one input for the incoming
1684 * value, and one input per constant that it can switch on. 1699 * value, and one input per constant that it can switch on.
1685 * Its block has one successor per constant, and one for the default. 1700 * Its block has one successor per constant, and one for the default.
1686 */ 1701 */
1687 class HSwitch extends HControlFlow { 1702 class HSwitch extends HControlFlow {
1688 HSwitch(List<HInstruction> inputs) : super(inputs); 1703 HSwitch(List<HInstruction> inputs) : super(inputs);
1689 1704
1690 HConstant constant(int index) => inputs[index + 1]; 1705 HConstant constant(int index) => inputs[index + 1];
1691 HInstruction get expression => inputs[0]; 1706 HInstruction get expression => inputs[0];
(...skipping 1192 matching lines...) Expand 10 before | Expand all | Expand 10 after
2884 class HDynamicType extends HRuntimeType { 2899 class HDynamicType extends HRuntimeType {
2885 HDynamicType(DynamicType dartType, TypeMask instructionType) 2900 HDynamicType(DynamicType dartType, TypeMask instructionType)
2886 : super(const <HInstruction>[], dartType, instructionType); 2901 : super(const <HInstruction>[], dartType, instructionType);
2887 2902
2888 accept(HVisitor visitor) => visitor.visitDynamicType(this); 2903 accept(HVisitor visitor) => visitor.visitDynamicType(this);
2889 2904
2890 int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE; 2905 int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE;
2891 2906
2892 bool typeEquals(HInstruction other) => other is HDynamicType; 2907 bool typeEquals(HInstruction other) => other is HDynamicType;
2893 } 2908 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698