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

Unified Diff: src/compiler/simplified-lowering.cc

Issue 2290583002: [turbofan] Remove dead opcode handlers from simplified lowering. (Closed)
Patch Set: Fix comment Created 4 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/simplified-lowering.cc
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
index d886cf02a702a9b69e4c2c573e6b08be62f6e597..aca3cddf0ca8889afcc7cbdcf4422ab38b9b4c9c 100644
--- a/src/compiler/simplified-lowering.cc
+++ b/src/compiler/simplified-lowering.cc
@@ -1201,8 +1201,6 @@ class RepresentationSelector {
// tho Start doesn't really produce a value, we have to say Tagged
// here, otherwise the input conversion will fail.
return VisitLeaf(node, MachineRepresentation::kTagged);
- case IrOpcode::kDead:
- return VisitLeaf(node, MachineRepresentation::kNone);
case IrOpcode::kParameter: {
// TODO(titzer): use representation from linkage.
ProcessInput(node, 0, UseInfo::None());
@@ -1213,8 +1211,6 @@ class RepresentationSelector {
return VisitLeaf(node, MachineRepresentation::kWord32);
case IrOpcode::kInt64Constant:
return VisitLeaf(node, MachineRepresentation::kWord64);
- case IrOpcode::kFloat32Constant:
- return VisitLeaf(node, MachineRepresentation::kFloat32);
case IrOpcode::kFloat64Constant:
return VisitLeaf(node, MachineRepresentation::kFloat64);
case IrOpcode::kExternalConstant:
@@ -1224,12 +1220,6 @@ class RepresentationSelector {
case IrOpcode::kHeapConstant:
return VisitLeaf(node, MachineRepresentation::kTagged);
- case IrOpcode::kDeoptimizeIf:
- case IrOpcode::kDeoptimizeUnless:
- ProcessInput(node, 0, UseInfo::Bool());
- ProcessInput(node, 1, UseInfo::AnyTagged());
- ProcessRemainingInputs(node, 2);
- return;
case IrOpcode::kBranch:
ProcessInput(node, 0, UseInfo::Bool());
EnqueueInput(node, NodeProperties::FirstControlIndex(node));
@@ -1580,15 +1570,7 @@ class RepresentationSelector {
}
}
// Number x Number => Float64Div
- if (BothInputsAre(node, Type::NumberOrUndefined())) {
- VisitFloat64Binop(node);
- if (lower()) ChangeToPureOp(node, Float64Op(node));
- return;
- }
- // Checked float64 x float64 => float64
- DCHECK_EQ(IrOpcode::kSpeculativeNumberDivide, node->opcode());
- VisitBinop(node, UseInfo::CheckedNumberOrOddballAsFloat64(),
- MachineRepresentation::kFloat64, Type::Number());
+ VisitFloat64Binop(node);
if (lower()) ChangeToPureOp(node, Float64Op(node));
return;
}
@@ -2409,158 +2391,11 @@ class RepresentationSelector {
return;
}
- //------------------------------------------------------------------
- // Machine-level operators.
- //------------------------------------------------------------------
- case IrOpcode::kLoad: {
- // TODO(jarin) Eventually, we should get rid of all machine stores
- // from the high-level phases, then this becomes UNREACHABLE.
- LoadRepresentation rep = LoadRepresentationOf(node->op());
- ProcessInput(node, 0, UseInfo::AnyTagged()); // tagged pointer
- ProcessInput(node, 1, UseInfo::PointerInt()); // index
- ProcessRemainingInputs(node, 2);
- return SetOutput(node, rep.representation());
- }
- case IrOpcode::kStore: {
- // TODO(jarin) Eventually, we should get rid of all machine stores
- // from the high-level phases, then this becomes UNREACHABLE.
- StoreRepresentation rep = StoreRepresentationOf(node->op());
- ProcessInput(node, 0, UseInfo::AnyTagged()); // tagged pointer
- ProcessInput(node, 1, UseInfo::PointerInt()); // index
- ProcessInput(node, 2,
- TruncatingUseInfoFromRepresentation(rep.representation()));
- ProcessRemainingInputs(node, 3);
- return SetOutput(node, MachineRepresentation::kNone);
- }
- case IrOpcode::kWord32Shr:
- // We output unsigned int32 for shift right because JavaScript.
- return VisitBinop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kWord32);
- case IrOpcode::kWord32And:
- case IrOpcode::kWord32Or:
- case IrOpcode::kWord32Xor:
- case IrOpcode::kWord32Shl:
- case IrOpcode::kWord32Sar:
- // We use signed int32 as the output type for these word32 operations,
- // though the machine bits are the same for either signed or unsigned,
- // because JavaScript considers the result from these operations signed.
- return VisitBinop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kWord32);
- case IrOpcode::kWord32Equal:
- return VisitBinop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kBit);
-
- case IrOpcode::kWord32Clz:
- return VisitUnop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kWord32);
-
- case IrOpcode::kInt32Add:
- case IrOpcode::kInt32Sub:
- case IrOpcode::kInt32Mul:
- case IrOpcode::kInt32MulHigh:
- case IrOpcode::kInt32Div:
- case IrOpcode::kInt32Mod:
- return VisitInt32Binop(node);
- case IrOpcode::kUint32Div:
- case IrOpcode::kUint32Mod:
- case IrOpcode::kUint32MulHigh:
- return VisitUint32Binop(node);
- case IrOpcode::kInt32LessThan:
- case IrOpcode::kInt32LessThanOrEqual:
- return VisitInt32Cmp(node);
-
- case IrOpcode::kUint32LessThan:
- case IrOpcode::kUint32LessThanOrEqual:
- return VisitUint32Cmp(node);
-
- case IrOpcode::kInt64Add:
- case IrOpcode::kInt64Sub:
- case IrOpcode::kInt64Mul:
- case IrOpcode::kInt64Div:
- case IrOpcode::kInt64Mod:
- return VisitInt64Binop(node);
- case IrOpcode::kInt64LessThan:
- case IrOpcode::kInt64LessThanOrEqual:
- return VisitInt64Cmp(node);
-
- case IrOpcode::kUint64LessThan:
- return VisitUint64Cmp(node);
-
- case IrOpcode::kUint64Div:
- case IrOpcode::kUint64Mod:
- return VisitUint64Binop(node);
-
- case IrOpcode::kWord64And:
- case IrOpcode::kWord64Or:
- case IrOpcode::kWord64Xor:
- case IrOpcode::kWord64Shl:
- case IrOpcode::kWord64Shr:
- case IrOpcode::kWord64Sar:
- return VisitBinop(node, UseInfo::TruncatingWord64(),
- MachineRepresentation::kWord64);
- case IrOpcode::kWord64Equal:
- return VisitBinop(node, UseInfo::TruncatingWord64(),
- MachineRepresentation::kBit);
-
- case IrOpcode::kChangeInt32ToInt64:
- return VisitUnop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kWord64);
- case IrOpcode::kChangeUint32ToUint64:
- return VisitUnop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kWord64);
- case IrOpcode::kTruncateFloat64ToFloat32:
- return VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kFloat32);
- case IrOpcode::kTruncateFloat64ToWord32:
- return VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kWord32);
-
- case IrOpcode::kChangeInt32ToFloat64:
- return VisitUnop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kFloat64);
- case IrOpcode::kChangeUint32ToFloat64:
- return VisitUnop(node, UseInfo::TruncatingWord32(),
- MachineRepresentation::kFloat64);
- case IrOpcode::kFloat64Add:
- case IrOpcode::kFloat64Sub:
- case IrOpcode::kFloat64Mul:
- case IrOpcode::kFloat64Div:
- case IrOpcode::kFloat64Mod:
- case IrOpcode::kFloat64Min:
- return VisitFloat64Binop(node);
- case IrOpcode::kFloat64Abs:
- case IrOpcode::kFloat64Sqrt:
- case IrOpcode::kFloat64RoundDown:
- case IrOpcode::kFloat64RoundTruncate:
- case IrOpcode::kFloat64RoundTiesAway:
- case IrOpcode::kFloat64RoundUp:
- return VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kFloat64);
- case IrOpcode::kFloat64SilenceNaN:
- return VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kFloat64);
- case IrOpcode::kFloat64Equal:
- case IrOpcode::kFloat64LessThan:
- case IrOpcode::kFloat64LessThanOrEqual:
- return VisitFloat64Cmp(node);
- case IrOpcode::kFloat64ExtractLowWord32:
- case IrOpcode::kFloat64ExtractHighWord32:
- return VisitUnop(node, UseInfo::TruncatingFloat64(),
- MachineRepresentation::kWord32);
- case IrOpcode::kFloat64InsertLowWord32:
- case IrOpcode::kFloat64InsertHighWord32:
- return VisitBinop(node, UseInfo::TruncatingFloat64(),
- UseInfo::TruncatingWord32(),
- MachineRepresentation::kFloat64);
case IrOpcode::kNumberSilenceNaN:
VisitUnop(node, UseInfo::TruncatingFloat64(),
MachineRepresentation::kFloat64);
if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
return;
- case IrOpcode::kLoadStackPointer:
- case IrOpcode::kLoadFramePointer:
- case IrOpcode::kLoadParentFramePointer:
- return VisitLeaf(node, MachineType::PointerRepresentation());
case IrOpcode::kStateValues:
return VisitStateValues(node);
case IrOpcode::kTypeGuard: {
@@ -2575,31 +2410,50 @@ class RepresentationSelector {
return;
}
- // The following opcodes are not produced before representation
- // inference runs, so we do not have any real test coverage.
- // Simply fail here.
- case IrOpcode::kChangeFloat64ToInt32:
- case IrOpcode::kChangeFloat64ToUint32:
- case IrOpcode::kTruncateInt64ToInt32:
- case IrOpcode::kChangeFloat32ToFloat64:
- case IrOpcode::kCheckedInt32Add:
- case IrOpcode::kCheckedInt32Sub:
- case IrOpcode::kCheckedUint32ToInt32:
- case IrOpcode::kCheckedFloat64ToInt32:
- case IrOpcode::kCheckedTaggedToInt32:
- case IrOpcode::kCheckedTaggedToFloat64:
- case IrOpcode::kPlainPrimitiveToWord32:
- case IrOpcode::kPlainPrimitiveToFloat64:
- case IrOpcode::kLoopExit:
- case IrOpcode::kLoopExitValue:
- case IrOpcode::kLoopExitEffect:
- FATAL("Representation inference: unsupported opcodes.");
- break;
-
- default:
+ // Operators with all inputs tagged and no or tagged output have uniform
+ // handling.
+ case IrOpcode::kEnd:
+ case IrOpcode::kReturn:
+ case IrOpcode::kIfSuccess:
+ case IrOpcode::kIfException:
+ case IrOpcode::kIfTrue:
+ case IrOpcode::kIfFalse:
+ case IrOpcode::kDeoptimize:
+ case IrOpcode::kEffectPhi:
+ case IrOpcode::kTerminate:
+ case IrOpcode::kFrameState:
+ case IrOpcode::kCheckpoint:
+ case IrOpcode::kLoop:
+ case IrOpcode::kMerge:
+ case IrOpcode::kThrow:
+ case IrOpcode::kBeginRegion:
+ case IrOpcode::kFinishRegion:
+ case IrOpcode::kOsrValue:
+ case IrOpcode::kProjection:
+ case IrOpcode::kObjectState:
+// All JavaScript operators except JSToNumber have uniform handling.
+#define OPCODE_CASE(name) case IrOpcode::k##name:
+ JS_SIMPLE_BINOP_LIST(OPCODE_CASE)
+ JS_OTHER_UNOP_LIST(OPCODE_CASE)
+ JS_OBJECT_OP_LIST(OPCODE_CASE)
+ JS_CONTEXT_OP_LIST(OPCODE_CASE)
+ JS_OTHER_OP_LIST(OPCODE_CASE)
+#undef OPCODE_CASE
+ case IrOpcode::kJSToBoolean:
+ case IrOpcode::kJSToInteger:
+ case IrOpcode::kJSToLength:
+ case IrOpcode::kJSToName:
+ case IrOpcode::kJSToObject:
+ case IrOpcode::kJSToString:
VisitInputs(node);
// Assume the output is tagged.
return SetOutput(node, MachineRepresentation::kTagged);
+
+ default:
+ V8_Fatal(__FILE__, __LINE__,
+ "Representation inference: unsupported opcode %s\n.",
+ node->op()->mnemonic());
+ break;
}
UNREACHABLE();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698