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

Unified Diff: lib/compiler/implementation/ssa/nodes.dart

Issue 10825386: Use JavaScript runtime semantics when constant folding. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update status file. Created 8 years, 3 months 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 side-by-side diff with in-line comments
Download patch
Index: lib/compiler/implementation/ssa/nodes.dart
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart
index 81fe9e4854c84e7a1a9e627fc09684de6e2af008..5a316fbfab1d52e574bde8fde1c085f1d6ddcfa2 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/lib/compiler/implementation/ssa/nodes.dart
@@ -178,26 +178,6 @@ class HGraph {
return result;
}
- HConstant addConstantInt(int i) {
ngeoffray 2012/09/05 11:20:36 I would keep these helpers, and pass the backend o
floitsch 2012/09/05 16:12:01 Kept them, but they want the constantSystem.
- return addConstant(new IntConstant(i));
- }
-
- HConstant addConstantDouble(double d) {
- return addConstant(new DoubleConstant(d));
- }
-
- HConstant addConstantString(DartString str, Node node) {
- return addConstant(new StringConstant(str, node));
- }
-
- HConstant addConstantBool(bool value) {
- return addConstant(new BoolConstant(value));
- }
-
- HConstant addConstantNull() {
- return addConstant(new NullConstant());
- }
-
void finalize() {
addBlock(exit);
exit.open();
@@ -1515,7 +1495,7 @@ class HInvokeBinary extends HInvokeStatic {
HInstruction get left => inputs[1];
HInstruction get right => inputs[2];
- abstract BinaryOperation get operation;
+ abstract BinaryOperation operation(ConstantSystem constantSystem);
abstract isBuiltin(HTypeMap types);
}
@@ -1576,7 +1556,7 @@ class HBinaryArithmetic extends HInvokeBinary {
}
// TODO(1603): The class should be marked as abstract.
- abstract BinaryOperation get operation;
+ abstract BinaryOperation operation(ConstantSystem constantSystem);
}
class HAdd extends HBinaryArithmetic {
@@ -1584,7 +1564,8 @@ class HAdd extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitAdd(this);
- AddOperation get operation => const AddOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.add;
int typeCode() => HInstruction.ADD_TYPECODE;
bool typeEquals(other) => other is HAdd;
bool dataEquals(HInstruction other) => true;
@@ -1607,7 +1588,8 @@ class HDivide extends HBinaryArithmetic {
return super.computeDesiredTypeForNonTargetInput(input, types);
}
- DivideOperation get operation => const DivideOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.divide;
int typeCode() => HInstruction.DIVIDE_TYPECODE;
bool typeEquals(other) => other is HDivide;
bool dataEquals(HInstruction other) => true;
@@ -1618,7 +1600,8 @@ class HModulo extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitModulo(this);
- ModuloOperation get operation => const ModuloOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.modulo;
int typeCode() => HInstruction.MODULO_TYPECODE;
bool typeEquals(other) => other is HModulo;
bool dataEquals(HInstruction other) => true;
@@ -1629,7 +1612,8 @@ class HMultiply extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitMultiply(this);
- MultiplyOperation get operation => const MultiplyOperation();
+ BinaryOperation operation(ConstantSystem operations)
+ => operations.multiply;
int typeCode() => HInstruction.MULTIPLY_TYPECODE;
bool typeEquals(other) => other is HMultiply;
bool dataEquals(HInstruction other) => true;
@@ -1640,7 +1624,8 @@ class HSubtract extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitSubtract(this);
- SubtractOperation get operation => const SubtractOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.subtract;
int typeCode() => HInstruction.SUBTRACT_TYPECODE;
bool typeEquals(other) => other is HSubtract;
bool dataEquals(HInstruction other) => true;
@@ -1674,8 +1659,8 @@ class HTruncatingDivide extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
- TruncatingDivideOperation get operation
- => const TruncatingDivideOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.truncatingDivide;
int typeCode() => HInstruction.TRUNCATING_DIVIDE_TYPECODE;
bool typeEquals(other) => other is HTruncatingDivide;
bool dataEquals(HInstruction other) => true;
@@ -1731,7 +1716,8 @@ class HShiftLeft extends HBinaryBitOp {
return count >= 0 && count <= 31;
}
- ShiftLeftOperation get operation => const ShiftLeftOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.shiftLeft;
int typeCode() => HInstruction.SHIFT_LEFT_TYPECODE;
bool typeEquals(other) => other is HShiftLeft;
bool dataEquals(HInstruction other) => true;
@@ -1745,7 +1731,8 @@ class HShiftRight extends HBinaryBitOp {
// Shift right cannot be mapped to the native operator easily.
bool isBuiltin(HTypeMap types) => false;
- ShiftRightOperation get operation => const ShiftRightOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.shiftRight;
int typeCode() => HInstruction.SHIFT_RIGHT_TYPECODE;
bool typeEquals(other) => other is HShiftRight;
bool dataEquals(HInstruction other) => true;
@@ -1756,7 +1743,8 @@ class HBitOr extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitOr(this);
- BitOrOperation get operation => const BitOrOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.bitOr;
int typeCode() => HInstruction.BIT_OR_TYPECODE;
bool typeEquals(other) => other is HBitOr;
bool dataEquals(HInstruction other) => true;
@@ -1767,7 +1755,8 @@ class HBitAnd extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitAnd(this);
- BitAndOperation get operation => const BitAndOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.bitAnd;
int typeCode() => HInstruction.BIT_AND_TYPECODE;
bool typeEquals(other) => other is HBitAnd;
bool dataEquals(HInstruction other) => true;
@@ -1778,7 +1767,8 @@ class HBitXor extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitXor(this);
- BitXorOperation get operation => const BitXorOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.bitXor;
int typeCode() => HInstruction.BIT_XOR_TYPECODE;
bool typeEquals(other) => other is HBitXor;
bool dataEquals(HInstruction other) => true;
@@ -1823,14 +1813,15 @@ class HInvokeUnary extends HInvokeStatic {
HType computeLikelyType(HTypeMap types) => HType.NUMBER;
- abstract UnaryOperation get operation;
+ abstract UnaryOperation operation(ConstantSystem constantSystem);
}
class HNegate extends HInvokeUnary {
HNegate(HStatic target, HInstruction input) : super(target, input);
accept(HVisitor visitor) => visitor.visitNegate(this);
- NegateOperation get operation => const NegateOperation();
+ UnaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.negate;
int typeCode() => HInstruction.NEGATE_TYPECODE;
bool typeEquals(other) => other is HNegate;
bool dataEquals(HInstruction other) => true;
@@ -1858,7 +1849,8 @@ class HBitNot extends HInvokeUnary {
return HType.UNKNOWN;
}
- BitNotOperation get operation => const BitNotOperation();
+ UnaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.bitNot;
int typeCode() => HInstruction.BIT_NOT_TYPECODE;
bool typeEquals(other) => other is HBitNot;
bool dataEquals(HInstruction other) => true;
@@ -2157,7 +2149,7 @@ class HRelational extends HInvokeBinary {
bool isBuiltin(HTypeMap types)
=> left.isNumber(types) && right.isNumber(types);
// TODO(1603): the class should be marked as abstract.
- abstract BinaryOperation get operation;
+ abstract BinaryOperation operation(ConstantSystem constantSystem);
}
class HEquals extends HRelational {
@@ -2206,7 +2198,8 @@ class HEquals extends HRelational {
return HType.UNKNOWN;
}
- EqualsOperation get operation => const EqualsOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.equal;
int typeCode() => HInstruction.EQUALS_TYPECODE;
bool typeEquals(other) => other is HEquals;
bool dataEquals(HInstruction other) => true;
@@ -2226,7 +2219,8 @@ class HIdentity extends HRelational {
HType computeDesiredTypeForInput(HInstruction input, HTypeMap types)
=> HType.UNKNOWN;
- IdentityOperation get operation => const IdentityOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.identity;
int typeCode() => HInstruction.IDENTITY_TYPECODE;
bool typeEquals(other) => other is HIdentity;
bool dataEquals(HInstruction other) => true;
@@ -2237,7 +2231,8 @@ class HGreater extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitGreater(this);
- GreaterOperation get operation => const GreaterOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.greater;
int typeCode() => HInstruction.GREATER_TYPECODE;
bool typeEquals(other) => other is HGreater;
bool dataEquals(HInstruction other) => true;
@@ -2248,7 +2243,8 @@ class HGreaterEqual extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitGreaterEqual(this);
- GreaterEqualOperation get operation => const GreaterEqualOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.greaterEqual;
int typeCode() => HInstruction.GREATER_EQUAL_TYPECODE;
bool typeEquals(other) => other is HGreaterEqual;
bool dataEquals(HInstruction other) => true;
@@ -2259,7 +2255,8 @@ class HLess extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitLess(this);
- LessOperation get operation => const LessOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.less;
int typeCode() => HInstruction.LESS_TYPECODE;
bool typeEquals(other) => other is HLess;
bool dataEquals(HInstruction other) => true;
@@ -2270,7 +2267,8 @@ class HLessEqual extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitLessEqual(this);
- LessEqualOperation get operation => const LessEqualOperation();
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.lessEqual;
int typeCode() => HInstruction.LESS_EQUAL_TYPECODE;
bool typeEquals(other) => other is HLessEqual;
bool dataEquals(HInstruction other) => true;

Powered by Google App Engine
This is Rietveld 408576698