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

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

Issue 1366753003: [turbofan] Make Node::set_op safer via wrapper. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 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
« no previous file with comments | « src/compiler/select-lowering.cc ('k') | src/compiler/simplified-operator-reducer.cc » ('j') | 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 4e89d88c48253dbd187ba63a6fd7c1dde0411ee6..ecfba7f5fa264e6842815ed65b9a4584085c3fc5 100644
--- a/src/compiler/simplified-lowering.cc
+++ b/src/compiler/simplified-lowering.cc
@@ -368,7 +368,8 @@ class RepresentationSelector {
SelectParameters p = SelectParametersOf(node->op());
MachineType type = static_cast<MachineType>(output_type);
if (type != p.type()) {
- node->set_op(lowering->common()->Select(type, p.hint()));
+ NodeProperties::ChangeOp(node,
+ lowering->common()->Select(type, p.hint()));
}
// Convert inputs to the output representation of this select.
@@ -399,7 +400,7 @@ class RepresentationSelector {
// Update the phi operator.
MachineType type = static_cast<MachineType>(output_type);
if (type != OpParameter<MachineType>(node)) {
- node->set_op(lowering->common()->Phi(type, values));
+ NodeProperties::ChangeOp(node, lowering->common()->Phi(type, values));
}
// Convert inputs to the output representation of this phi.
@@ -453,7 +454,8 @@ class RepresentationSelector {
MachineTypeUnion input_type = GetInfo(node->InputAt(i))->output;
(*types)[i] = static_cast<MachineType>(input_type);
}
- node->set_op(jsgraph_->common()->TypedStateValues(types));
+ NodeProperties::ChangeOp(node,
+ jsgraph_->common()->TypedStateValues(types));
}
SetOutput(node, kMachAnyTagged);
}
@@ -583,12 +585,12 @@ class RepresentationSelector {
MachineTypeUnion input = GetInfo(node->InputAt(0))->output;
if (input & kRepBit) {
// BooleanNot(x: kRepBit) => Word32Equal(x, #0)
- node->set_op(lowering->machine()->Word32Equal());
node->AppendInput(jsgraph_->zone(), jsgraph_->Int32Constant(0));
+ NodeProperties::ChangeOp(node, lowering->machine()->Word32Equal());
} else {
// BooleanNot(x: kRepTagged) => WordEqual(x, #false)
- node->set_op(lowering->machine()->WordEqual());
node->AppendInput(jsgraph_->zone(), jsgraph_->FalseConstant());
+ NodeProperties::ChangeOp(node, lowering->machine()->WordEqual());
}
} else {
// No input representation requirement; adapt during lowering.
@@ -605,8 +607,8 @@ class RepresentationSelector {
DeferReplacement(node, node->InputAt(0));
} else {
// BooleanToNumber(x: kRepTagged) => WordEqual(x, #true)
- node->set_op(lowering->machine()->WordEqual());
node->AppendInput(jsgraph_->zone(), jsgraph_->TrueConstant());
+ NodeProperties::ChangeOp(node, lowering->machine()->WordEqual());
}
} else {
// No input representation requirement; adapt during lowering.
@@ -622,15 +624,15 @@ class RepresentationSelector {
if (BothInputsAre(node, Type::Signed32())) {
// => signed Int32Cmp
VisitInt32Cmp(node);
- if (lower()) node->set_op(Int32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Int32Op(node));
} else if (BothInputsAre(node, Type::Unsigned32())) {
// => unsigned Int32Cmp
VisitUint32Cmp(node);
- if (lower()) node->set_op(Uint32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node));
} else {
// => Float64Cmp
VisitFloat64Cmp(node);
- if (lower()) node->set_op(Float64Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
}
break;
}
@@ -641,27 +643,27 @@ class RepresentationSelector {
if (CanLowerToInt32Binop(node, use)) {
// => signed Int32Add/Sub
VisitInt32Binop(node);
- if (lower()) node->set_op(Int32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Int32Op(node));
} else if (CanLowerToInt32AdditiveBinop(node, use)) {
// => signed Int32Add/Sub, truncating inputs
ProcessTruncateWord32Input(node, 0, kTypeInt32);
ProcessTruncateWord32Input(node, 1, kTypeInt32);
SetOutput(node, kMachInt32);
- if (lower()) node->set_op(Int32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Int32Op(node));
} else if (CanLowerToUint32Binop(node, use)) {
// => unsigned Int32Add/Sub
VisitUint32Binop(node);
- if (lower()) node->set_op(Uint32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node));
} else if (CanLowerToUint32AdditiveBinop(node, use)) {
// => signed Int32Add/Sub, truncating inputs
ProcessTruncateWord32Input(node, 0, kTypeUint32);
ProcessTruncateWord32Input(node, 1, kTypeUint32);
SetOutput(node, kMachUint32);
- if (lower()) node->set_op(Uint32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node));
} else {
// => Float64Add/Sub
VisitFloat64Binop(node);
- if (lower()) node->set_op(Float64Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
}
break;
}
@@ -671,13 +673,13 @@ class RepresentationSelector {
if (CanLowerToInt32Binop(node, use)) {
// => signed Int32Mul
VisitInt32Binop(node);
- if (lower()) node->set_op(Int32Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Int32Op(node));
break;
}
}
// => Float64Mul
VisitFloat64Binop(node);
- if (lower()) node->set_op(Float64Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
break;
}
case IrOpcode::kNumberDivide: {
@@ -695,7 +697,7 @@ class RepresentationSelector {
}
// => Float64Div
VisitFloat64Binop(node);
- if (lower()) node->set_op(Float64Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
break;
}
case IrOpcode::kNumberModulus: {
@@ -713,7 +715,7 @@ class RepresentationSelector {
}
// => Float64Mod
VisitFloat64Binop(node);
- if (lower()) node->set_op(Float64Op(node));
+ if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
break;
}
case IrOpcode::kNumberShiftLeft: {
@@ -755,8 +757,9 @@ class RepresentationSelector {
// TODO(turbofan): avoid a truncation with a smi check.
VisitUnop(node, kTypeInt32 | kRepFloat64, kTypeInt32 | kRepWord32);
if (lower()) {
- node->set_op(lowering->machine()->TruncateFloat64ToInt32(
- TruncationMode::kJavaScript));
+ NodeProperties::ChangeOp(
+ node, lowering->machine()->TruncateFloat64ToInt32(
+ TruncationMode::kJavaScript));
}
}
break;
@@ -785,8 +788,9 @@ class RepresentationSelector {
// TODO(turbofan): avoid a truncation with a smi check.
VisitUnop(node, kTypeUint32 | kRepFloat64, kTypeUint32 | kRepWord32);
if (lower()) {
- node->set_op(lowering->machine()->TruncateFloat64ToInt32(
- TruncationMode::kJavaScript));
+ NodeProperties::ChangeOp(
+ node, lowering->machine()->TruncateFloat64ToInt32(
+ TruncationMode::kJavaScript));
}
}
break;
@@ -801,16 +805,18 @@ class RepresentationSelector {
CallDescriptor* desc = Linkage::GetStubCallDescriptor(
jsgraph_->isolate(), jsgraph_->zone(), callable.descriptor(), 0,
flags, properties);
- node->set_op(jsgraph_->common()->Call(desc));
node->InsertInput(jsgraph_->zone(), 0,
jsgraph_->HeapConstant(callable.code()));
node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
+ NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
}
break;
}
case IrOpcode::kReferenceEqual: {
VisitBinop(node, kMachAnyTagged, kRepBit);
- if (lower()) node->set_op(lowering->machine()->WordEqual());
+ if (lower()) {
+ NodeProperties::ChangeOp(node, lowering->machine()->WordEqual());
+ }
break;
}
case IrOpcode::kStringEqual: {
@@ -1210,7 +1216,6 @@ void SimplifiedLowering::DoAllocate(Node* node) {
Runtime::FunctionId f = Runtime::kAllocateInTargetSpace;
Operator::Properties props = node->op()->properties();
CallDescriptor* desc = Linkage::GetRuntimeCallDescriptor(zone(), f, 2, props);
- node->set_op(common()->Call(desc));
ExternalReference ref(f, jsgraph()->isolate());
int32_t flags = AllocateTargetSpace::encode(space);
node->InsertInput(graph()->zone(), 0, jsgraph()->CEntryStubConstant(1));
@@ -1218,14 +1223,15 @@ void SimplifiedLowering::DoAllocate(Node* node) {
node->InsertInput(graph()->zone(), 3, jsgraph()->ExternalConstant(ref));
node->InsertInput(graph()->zone(), 4, jsgraph()->Int32Constant(2));
node->InsertInput(graph()->zone(), 5, jsgraph()->NoContextConstant());
+ NodeProperties::ChangeOp(node, common()->Call(desc));
}
void SimplifiedLowering::DoLoadField(Node* node) {
const FieldAccess& access = FieldAccessOf(node->op());
- node->set_op(machine()->Load(access.machine_type));
Node* offset = jsgraph()->IntPtrConstant(access.offset - access.tag());
node->InsertInput(graph()->zone(), 1, offset);
+ NodeProperties::ChangeOp(node, machine()->Load(access.machine_type));
}
@@ -1234,10 +1240,10 @@ void SimplifiedLowering::DoStoreField(Node* node) {
Type* type = NodeProperties::GetType(node->InputAt(1));
WriteBarrierKind kind =
ComputeWriteBarrierKind(access.base_is_tagged, access.machine_type, type);
- node->set_op(
- machine()->Store(StoreRepresentation(access.machine_type, kind)));
Node* offset = jsgraph()->IntPtrConstant(access.offset - access.tag());
node->InsertInput(graph()->zone(), 1, offset);
+ NodeProperties::ChangeOp(
+ node, machine()->Store(StoreRepresentation(access.machine_type, kind)));
}
@@ -1311,13 +1317,13 @@ void SimplifiedLowering::DoLoadBuffer(Node* node, MachineType output_type,
NodeProperties::ReplaceUses(node, node, ephi);
// Turn the {node} into a Phi.
- node->set_op(common()->Phi(output_type, 2));
node->ReplaceInput(0, vtrue);
node->ReplaceInput(1, vfalse);
node->ReplaceInput(2, merge);
node->TrimInputCount(3);
+ NodeProperties::ChangeOp(node, common()->Phi(output_type, 2));
} else {
- node->set_op(machine()->CheckedLoad(type));
+ NodeProperties::ChangeOp(node, machine()->CheckedLoad(type));
}
}
@@ -1325,25 +1331,26 @@ void SimplifiedLowering::DoLoadBuffer(Node* node, MachineType output_type,
void SimplifiedLowering::DoStoreBuffer(Node* node) {
DCHECK_EQ(IrOpcode::kStoreBuffer, node->opcode());
MachineType const type = BufferAccessOf(node->op()).machine_type();
- node->set_op(machine()->CheckedStore(type));
+ NodeProperties::ChangeOp(node, machine()->CheckedStore(type));
}
void SimplifiedLowering::DoLoadElement(Node* node) {
const ElementAccess& access = ElementAccessOf(node->op());
- node->set_op(machine()->Load(access.machine_type));
node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1)));
+ NodeProperties::ChangeOp(node, machine()->Load(access.machine_type));
}
void SimplifiedLowering::DoStoreElement(Node* node) {
const ElementAccess& access = ElementAccessOf(node->op());
Type* type = NodeProperties::GetType(node->InputAt(2));
- node->set_op(machine()->Store(
- StoreRepresentation(access.machine_type,
- ComputeWriteBarrierKind(access.base_is_tagged,
- access.machine_type, type))));
node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1)));
+ NodeProperties::ChangeOp(
+ node, machine()->Store(StoreRepresentation(
+ access.machine_type,
+ ComputeWriteBarrierKind(access.base_is_tagged,
+ access.machine_type, type))));
}
@@ -1610,34 +1617,34 @@ Node* SimplifiedLowering::Uint32Mod(Node* const node) {
void SimplifiedLowering::DoShift(Node* node, Operator const* op) {
- node->set_op(op);
Node* const rhs = NodeProperties::GetValueInput(node, 1);
Type* const rhs_type = NodeProperties::GetType(rhs);
if (!rhs_type->Is(zero_thirtyone_range_)) {
node->ReplaceInput(1, graph()->NewNode(machine()->Word32And(), rhs,
jsgraph()->Int32Constant(0x1f)));
}
+ NodeProperties::ChangeOp(node, op);
}
void SimplifiedLowering::DoStringEqual(Node* node) {
- node->set_op(machine()->WordEqual());
node->ReplaceInput(0, StringComparison(node));
node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
+ NodeProperties::ChangeOp(node, machine()->WordEqual());
}
void SimplifiedLowering::DoStringLessThan(Node* node) {
- node->set_op(machine()->IntLessThan());
node->ReplaceInput(0, StringComparison(node));
node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
+ NodeProperties::ChangeOp(node, machine()->IntLessThan());
}
void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) {
- node->set_op(machine()->IntLessThanOrEqual());
node->ReplaceInput(0, StringComparison(node));
node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
+ NodeProperties::ChangeOp(node, machine()->IntLessThanOrEqual());
}
} // namespace compiler
« no previous file with comments | « src/compiler/select-lowering.cc ('k') | src/compiler/simplified-operator-reducer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698