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

Unified Diff: src/compiler/machine-graph-verifier.cc

Issue 2555693004: Sav: [turbofan][stubs] Further adapting machine graph verifier to code stubs. (Closed)
Patch Set: 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
« no previous file with comments | « src/code-stub-assembler.cc ('k') | test/cctest/test-code-stub-assembler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/machine-graph-verifier.cc
diff --git a/src/compiler/machine-graph-verifier.cc b/src/compiler/machine-graph-verifier.cc
index 9ab361475cbd1048024bd474458407e8a5a4898e..025c5dc86572cd2714eef5a8f1883f3d56a60f41 100644
--- a/src/compiler/machine-graph-verifier.cc
+++ b/src/compiler/machine-graph-verifier.cc
@@ -306,8 +306,12 @@ class MachineRepresentationChecker {
case IrOpcode::kInt64LessThanOrEqual:
case IrOpcode::kUint64LessThan:
case IrOpcode::kUint64LessThanOrEqual:
- CheckValueInputForInt64Op(node, 0);
- CheckValueInputForInt64Op(node, 1);
+ // Allows Smi operands in stubs.
+ CheckValueInputForInt64Op(node, 0, is_stub_);
+ CheckValueInputForInt64Op(node, 1, is_stub_);
+ if (is_stub_) {
+ CheckCompatibleValueInputRepresentations(node, 0, 1);
+ }
break;
case IrOpcode::kInt32x4ExtractLane:
CheckValueInputRepresentationIs(node, 0,
@@ -342,11 +346,35 @@ class MachineRepresentationChecker {
case IrOpcode::kInt32LessThanOrEqual:
case IrOpcode::kUint32LessThan:
case IrOpcode::kUint32LessThanOrEqual:
- MACHINE_BINOP_32_LIST(LABEL) {
- CheckValueInputForInt32Op(node, 0);
- CheckValueInputForInt32Op(node, 1);
+ case IrOpcode::kInt32Add:
+ case IrOpcode::kInt32Sub:
+ // Allows Smi operands in stubs.
+ CheckValueInputForInt32Op(node, 0, is_stub_);
+ CheckValueInputForInt32Op(node, 1, is_stub_);
+ if (is_stub_) {
+ CheckCompatibleValueInputRepresentations(node, 0, 1);
}
break;
+ case IrOpcode::kWord32And:
+ case IrOpcode::kWord32Or:
+ case IrOpcode::kWord32Xor:
+ case IrOpcode::kWord32Shl:
+ case IrOpcode::kWord32Shr:
+ case IrOpcode::kWord32Sar:
+ case IrOpcode::kWord32Ror:
+ case IrOpcode::kInt32Mul:
+ case IrOpcode::kInt32AddWithOverflow:
+ case IrOpcode::kInt32SubWithOverflow:
+ case IrOpcode::kInt32MulWithOverflow:
+ case IrOpcode::kInt32MulHigh:
+ case IrOpcode::kInt32Div:
+ case IrOpcode::kInt32Mod:
+ case IrOpcode::kUint32Div:
+ case IrOpcode::kUint32Mod:
+ case IrOpcode::kUint32MulHigh:
+ CheckValueInputForInt32Op(node, 0);
+ CheckValueInputForInt32Op(node, 1);
+ break;
MACHINE_BINOP_64_LIST(LABEL) {
CheckValueInputForInt64Op(node, 0);
CheckValueInputForInt64Op(node, 1);
@@ -488,6 +516,42 @@ class MachineRepresentationChecker {
}
}
+ MachineRepresentation Promote(MachineRepresentation rep) {
+ switch (rep) {
+ case MachineRepresentation::kBit:
+ case MachineRepresentation::kWord8:
+ case MachineRepresentation::kWord16:
+ case MachineRepresentation::kWord32:
+ return MachineRepresentation::kWord32;
+ case MachineRepresentation::kTagged:
+ case MachineRepresentation::kTaggedSigned:
+ case MachineRepresentation::kTaggedPointer:
+ return MachineRepresentation::kTagged;
+ default:
+ break;
+ }
+ return rep;
+ }
+
+ void CheckCompatibleValueInputRepresentations(Node const* node, int index1,
+ int index2) {
+ Node const* input1 = node->InputAt(index1);
+ MachineRepresentation input_representation1 =
+ inferrer_->GetRepresentation(input1);
+ Node const* input2 = node->InputAt(index2);
+ MachineRepresentation input_representation2 =
+ inferrer_->GetRepresentation(input2);
+ if (Promote(input_representation1) != Promote(input_representation2)) {
+ std::stringstream str;
+ str << "TypeError: node #" << node->id() << ":" << *node->op()
+ << " uses operands with incompatible representations: node #"
+ << input1->id() << ":" << *input1->op() << ":"
+ << input_representation1 << " and #" << input2->id() << ":"
+ << *input2->op() << ":" << input_representation2 << ".";
+ FATAL(str.str().c_str());
+ }
+ }
+
void CheckValueInputIsTagged(Node const* node, int index) {
Node const* input = node->InputAt(index);
switch (inferrer_->GetRepresentation(input)) {
@@ -538,7 +602,8 @@ class MachineRepresentationChecker {
}
}
- void CheckValueInputForInt32Op(Node const* node, int index) {
+ void CheckValueInputForInt32Op(Node const* node, int index,
+ bool allow_tagged = false) {
Node const* input = node->InputAt(index);
switch (inferrer_->GetRepresentation(input)) {
case MachineRepresentation::kBit:
@@ -546,6 +611,13 @@ class MachineRepresentationChecker {
case MachineRepresentation::kWord16:
case MachineRepresentation::kWord32:
return;
+ case MachineRepresentation::kTagged:
+ case MachineRepresentation::kTaggedSigned:
+ case MachineRepresentation::kTaggedPointer:
+ if (Is32() && allow_tagged) {
+ return;
+ }
+ break;
case MachineRepresentation::kNone: {
std::ostringstream str;
str << "TypeError: node #" << input->id() << ":" << *input->op()
@@ -563,13 +635,21 @@ class MachineRepresentationChecker {
FATAL(str.str().c_str());
}
- void CheckValueInputForInt64Op(Node const* node, int index) {
+ void CheckValueInputForInt64Op(Node const* node, int index,
+ bool allow_tagged = false) {
Node const* input = node->InputAt(index);
MachineRepresentation input_representation =
inferrer_->GetRepresentation(input);
switch (input_representation) {
case MachineRepresentation::kWord64:
return;
+ case MachineRepresentation::kTagged:
+ case MachineRepresentation::kTaggedSigned:
+ case MachineRepresentation::kTaggedPointer:
+ if (Is64() && allow_tagged) {
+ return;
+ }
+ break;
case MachineRepresentation::kNone: {
std::ostringstream str;
str << "TypeError: node #" << input->id() << ":" << *input->op()
« no previous file with comments | « src/code-stub-assembler.cc ('k') | test/cctest/test-code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698