Index: sdk/lib/_internal/compiler/implementation/ssa/nodes.dart |
=================================================================== |
--- sdk/lib/_internal/compiler/implementation/ssa/nodes.dart (revision 30633) |
+++ sdk/lib/_internal/compiler/implementation/ssa/nodes.dart (working copy) |
@@ -55,6 +55,7 @@ |
R visitRangeConversion(HRangeConversion node); |
R visitReturn(HReturn node); |
R visitShiftLeft(HShiftLeft node); |
+ R visitShiftRight(HShiftRight node); |
R visitStatic(HStatic node); |
R visitStaticStore(HStaticStore node); |
R visitStringConcat(HStringConcat node); |
@@ -336,6 +337,7 @@ |
visitRangeConversion(HRangeConversion node) => visitCheck(node); |
visitReturn(HReturn node) => visitControlFlow(node); |
visitShiftLeft(HShiftLeft node) => visitBinaryBitOp(node); |
+ visitShiftRight(HShiftRight node) => visitBinaryBitOp(node); |
visitSubtract(HSubtract node) => visitBinaryArithmetic(node); |
visitSwitch(HSwitch node) => visitControlFlow(node); |
visitStatic(HStatic node) => visitInstruction(node); |
@@ -801,6 +803,7 @@ |
static const int INDEX_TYPECODE = 27; |
static const int IS_TYPECODE = 28; |
static const int INVOKE_DYNAMIC_TYPECODE = 29; |
+ static const int SHIFT_RIGHT_TYPECODE = 30; |
HInstruction(this.inputs, this.instructionType) |
: id = idCounter++, usedBy = <HInstruction>[] { |
@@ -1727,6 +1730,17 @@ |
bool dataEquals(HInstruction other) => true; |
} |
+class HShiftRight extends HBinaryBitOp { |
+ HShiftRight(left, right, selector, type) : super(left, right, selector, type); |
+ accept(HVisitor visitor) => visitor.visitShiftRight(this); |
+ |
+ BinaryOperation operation(ConstantSystem constantSystem) |
+ => constantSystem.shiftRight; |
+ int typeCode() => HInstruction.SHIFT_RIGHT_TYPECODE; |
+ bool typeEquals(other) => other is HShiftRight; |
+ bool dataEquals(HInstruction other) => true; |
+} |
+ |
class HBitOr extends HBinaryBitOp { |
HBitOr(left, right, selector, type) : super(left, right, selector, type); |
accept(HVisitor visitor) => visitor.visitBitOr(this); |