Index: src/compiler/simplified-lowering.cc |
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
index 75f23b2d89b1cb36290b3483f88f842ec8044f3c..72c2d372e8e3888314805c5156ff3babe4e0bb8c 100644 |
--- a/src/compiler/simplified-lowering.cc |
+++ b/src/compiler/simplified-lowering.cc |
@@ -726,10 +726,6 @@ void SimplifiedLowering::LowerAllNodes() { |
graph()->zone()->isolate()); |
RepresentationSelector selector(jsgraph(), zone(), &changer); |
selector.Run(this); |
- |
- GraphReducer graph_reducer(graph()); |
- graph_reducer.AddReducer(this); |
- graph_reducer.ReduceGraph(); |
} |
@@ -752,157 +748,6 @@ Node* SimplifiedLowering::OffsetMinusTagConstant(int32_t offset) { |
} |
-static void UpdateControlSuccessors(Node* before, Node* node) { |
- DCHECK(IrOpcode::IsControlOpcode(before->opcode())); |
- UseIter iter = before->uses().begin(); |
- while (iter != before->uses().end()) { |
- if (IrOpcode::IsControlOpcode((*iter)->opcode()) && |
- NodeProperties::IsControlEdge(iter.edge())) { |
- iter = iter.UpdateToAndIncrement(node); |
- continue; |
- } |
- ++iter; |
- } |
-} |
- |
- |
-void SimplifiedLowering::DoChangeTaggedToUI32(Node* node, Node* effect, |
- Node* control, bool is_signed) { |
- // if (IsTagged(val)) |
- // ConvertFloat64To(Int32|Uint32)(Load[kMachFloat64](input, #value_offset)) |
- // else Untag(val) |
- Node* val = node->InputAt(0); |
- Node* branch = graph()->NewNode(common()->Branch(), IsTagged(val), control); |
- |
- // true branch. |
- Node* tbranch = graph()->NewNode(common()->IfTrue(), branch); |
- Node* loaded = graph()->NewNode( |
- machine()->Load(kMachFloat64), val, |
- OffsetMinusTagConstant(HeapNumber::kValueOffset), effect); |
- Operator* op = is_signed ? machine()->ChangeFloat64ToInt32() |
- : machine()->ChangeFloat64ToUint32(); |
- Node* converted = graph()->NewNode(op, loaded); |
- |
- // false branch. |
- Node* fbranch = graph()->NewNode(common()->IfFalse(), branch); |
- Node* untagged = Untag(val); |
- |
- // merge. |
- Node* merge = graph()->NewNode(common()->Merge(2), tbranch, fbranch); |
- Node* phi = graph()->NewNode(common()->Phi(2), converted, untagged, merge); |
- UpdateControlSuccessors(control, merge); |
- branch->ReplaceInput(1, control); |
- node->ReplaceUses(phi); |
-} |
- |
- |
-void SimplifiedLowering::DoChangeTaggedToFloat64(Node* node, Node* effect, |
- Node* control) { |
- // if (IsTagged(input)) Load[kMachFloat64](input, #value_offset) |
- // else ConvertFloat64(Untag(input)) |
- Node* val = node->InputAt(0); |
- Node* branch = graph()->NewNode(common()->Branch(), IsTagged(val), control); |
- |
- // true branch. |
- Node* tbranch = graph()->NewNode(common()->IfTrue(), branch); |
- Node* loaded = graph()->NewNode( |
- machine()->Load(kMachFloat64), val, |
- OffsetMinusTagConstant(HeapNumber::kValueOffset), effect); |
- |
- // false branch. |
- Node* fbranch = graph()->NewNode(common()->IfFalse(), branch); |
- Node* untagged = Untag(val); |
- Node* converted = |
- graph()->NewNode(machine()->ChangeInt32ToFloat64(), untagged); |
- |
- // merge. |
- Node* merge = graph()->NewNode(common()->Merge(2), tbranch, fbranch); |
- Node* phi = graph()->NewNode(common()->Phi(2), loaded, converted, merge); |
- UpdateControlSuccessors(control, merge); |
- branch->ReplaceInput(1, control); |
- node->ReplaceUses(phi); |
-} |
- |
- |
-void SimplifiedLowering::DoChangeUI32ToTagged(Node* node, Node* effect, |
- Node* control, bool is_signed) { |
- Node* val = node->InputAt(0); |
- Node* is_smi = NULL; |
- if (is_signed) { |
- if (SmiValuesAre32Bits()) { |
- // All int32s fit in this case. |
- DCHECK(kPointerSize == 8); |
- return node->ReplaceUses(SmiTag(val)); |
- } else { |
- // TODO(turbofan): use an Int32AddWithOverflow to tag and check here. |
- Node* lt = graph()->NewNode(machine()->Int32LessThanOrEqual(), val, |
- jsgraph()->Int32Constant(Smi::kMaxValue)); |
- Node* gt = |
- graph()->NewNode(machine()->Int32LessThanOrEqual(), |
- jsgraph()->Int32Constant(Smi::kMinValue), val); |
- is_smi = graph()->NewNode(machine()->Word32And(), lt, gt); |
- } |
- } else { |
- // Check if Uint32 value is in the smi range. |
- is_smi = graph()->NewNode(machine()->Uint32LessThanOrEqual(), val, |
- jsgraph()->Int32Constant(Smi::kMaxValue)); |
- } |
- |
- // TODO(turbofan): fold smi test branch eagerly. |
- // if (IsSmi(input)) SmiTag(input); |
- // else InlineAllocAndInitHeapNumber(ConvertToFloat64(input))) |
- Node* branch = graph()->NewNode(common()->Branch(), is_smi, control); |
- |
- // true branch. |
- Node* tbranch = graph()->NewNode(common()->IfTrue(), branch); |
- Node* smi_tagged = SmiTag(val); |
- |
- // false branch. |
- Node* fbranch = graph()->NewNode(common()->IfFalse(), branch); |
- Node* heap_num = jsgraph()->Constant(0.0); // TODO(titzer): alloc and init |
- |
- // merge. |
- Node* merge = graph()->NewNode(common()->Merge(2), tbranch, fbranch); |
- Node* phi = graph()->NewNode(common()->Phi(2), smi_tagged, heap_num, merge); |
- UpdateControlSuccessors(control, merge); |
- branch->ReplaceInput(1, control); |
- node->ReplaceUses(phi); |
-} |
- |
- |
-void SimplifiedLowering::DoChangeFloat64ToTagged(Node* node, Node* effect, |
- Node* control) { |
- return; // TODO(titzer): need to call runtime to allocate in one branch |
-} |
- |
- |
-void SimplifiedLowering::DoChangeBoolToBit(Node* node, Node* effect, |
- Node* control) { |
- Node* cmp = graph()->NewNode(machine()->WordEqual(), node->InputAt(0), |
- jsgraph()->TrueConstant()); |
- node->ReplaceUses(cmp); |
-} |
- |
- |
-void SimplifiedLowering::DoChangeBitToBool(Node* node, Node* effect, |
- Node* control) { |
- Node* val = node->InputAt(0); |
- Node* branch = graph()->NewNode(common()->Branch(), val, control); |
- |
- // true branch. |
- Node* tbranch = graph()->NewNode(common()->IfTrue(), branch); |
- // false branch. |
- Node* fbranch = graph()->NewNode(common()->IfFalse(), branch); |
- // merge. |
- Node* merge = graph()->NewNode(common()->Merge(2), tbranch, fbranch); |
- Node* phi = graph()->NewNode(common()->Phi(2), jsgraph()->TrueConstant(), |
- jsgraph()->FalseConstant(), merge); |
- UpdateControlSuccessors(control, merge); |
- branch->ReplaceInput(1, control); |
- node->ReplaceUses(phi); |
-} |
- |
- |
static WriteBarrierKind ComputeWriteBarrierKind(BaseTaggedness base_is_tagged, |
MachineType representation, |
Type* type) { |
@@ -964,41 +809,6 @@ void SimplifiedLowering::DoStoreElement(Node* node) { |
} |
-Reduction SimplifiedLowering::Reduce(Node* node) { return NoChange(); } |
- |
- |
-void SimplifiedLowering::LowerChange(Node* node, Node* effect, Node* control) { |
- switch (node->opcode()) { |
- case IrOpcode::kChangeTaggedToInt32: |
- DoChangeTaggedToUI32(node, effect, control, true); |
- break; |
- case IrOpcode::kChangeTaggedToUint32: |
- DoChangeTaggedToUI32(node, effect, control, false); |
- break; |
- case IrOpcode::kChangeTaggedToFloat64: |
- DoChangeTaggedToFloat64(node, effect, control); |
- break; |
- case IrOpcode::kChangeInt32ToTagged: |
- DoChangeUI32ToTagged(node, effect, control, true); |
- break; |
- case IrOpcode::kChangeUint32ToTagged: |
- DoChangeUI32ToTagged(node, effect, control, false); |
- break; |
- case IrOpcode::kChangeFloat64ToTagged: |
- DoChangeFloat64ToTagged(node, effect, control); |
- break; |
- case IrOpcode::kChangeBoolToBit: |
- DoChangeBoolToBit(node, effect, control); |
- break; |
- case IrOpcode::kChangeBitToBool: |
- DoChangeBitToBool(node, effect, control); |
- break; |
- default: |
- UNREACHABLE(); |
- break; |
- } |
-} |
- |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |