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

Unified Diff: pkg/compiler/lib/src/ssa/nodes.dart

Issue 2561533002: dart2js: Constant folding and specialization for remainder (Closed)
Patch Set: fix range analysis Created 4 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/ssa/nodes.dart
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 712ff298bf4671b42b0350325a08196fcdd62538..4f37c36896dc30c197adf1a4946d65fce6c1fe0b 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -79,6 +79,7 @@ abstract class HVisitor<R> {
R visitRangeConversion(HRangeConversion node);
R visitReadModifyWrite(HReadModifyWrite node);
R visitRef(HRef node);
+ R visitRemainder(HRemainder node);
R visitReturn(HReturn node);
R visitShiftLeft(HShiftLeft node);
R visitShiftRight(HShiftRight node);
@@ -382,6 +383,7 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor {
visitRangeConversion(HRangeConversion node) => visitCheck(node);
visitReadModifyWrite(HReadModifyWrite node) => visitInstruction(node);
visitRef(HRef node) => node.value.accept(this);
+ visitRemainder(HRemainder node) => visitBinaryArithmetic(node);
visitReturn(HReturn node) => visitControlFlow(node);
visitShiftLeft(HShiftLeft node) => visitBinaryBitOp(node);
visitShiftRight(HShiftRight node) => visitBinaryBitOp(node);
@@ -877,6 +879,7 @@ abstract class HInstruction implements Spannable {
static const int TYPE_INFO_EXPRESSION_TYPECODE = 40;
static const int FOREIGN_CODE_TYPECODE = 41;
+ static const int REMAINDER_TYPECODE = 42;
HInstruction(this.inputs, this.instructionType)
: id = idCounter++,
@@ -2037,6 +2040,19 @@ class HTruncatingDivide extends HBinaryArithmetic {
bool dataEquals(HInstruction other) => true;
}
+class HRemainder extends HBinaryArithmetic {
+ HRemainder(
+ HInstruction left, HInstruction right, Selector selector, TypeMask type)
+ : super(left, right, selector, type);
+ accept(HVisitor visitor) => visitor.visitRemainder(this);
+
+ BinaryOperation operation(ConstantSystem constantSystem) =>
+ constantSystem.remainder;
+ int typeCode() => HInstruction.REMAINDER_TYPECODE;
+ bool typeEquals(other) => other is HRemainder;
+ bool dataEquals(HInstruction other) => true;
+}
+
/**
* An [HSwitch] instruction has one input for the incoming
* value, and one input per constant that it can switch on.

Powered by Google App Engine
This is Rietveld 408576698