Chromium Code Reviews| Index: src/compiler/effect-control-linearizer.h |
| diff --git a/src/compiler/effect-control-linearizer.h b/src/compiler/effect-control-linearizer.h |
| index 3b71e04d165496516d38614bc533c657f77356bd..7dbc7e2e9d4e40de247a3d77e8bbac7fbb57aa9c 100644 |
| --- a/src/compiler/effect-control-linearizer.h |
| +++ b/src/compiler/effect-control-linearizer.h |
| @@ -6,6 +6,7 @@ |
| #define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_ |
| #include "src/compiler/common-operator.h" |
| +#include "src/compiler/graph-assembler.h" |
| #include "src/compiler/node.h" |
| #include "src/compiler/simplified-operator.h" |
| #include "src/globals.h" |
| @@ -38,179 +39,89 @@ class V8_EXPORT_PRIVATE EffectControlLinearizer { |
| void ProcessNode(Node* node, Node** frame_state, Node** effect, |
| Node** control); |
| - struct ValueEffectControl { |
| - Node* value; |
| - Node* effect; |
| - Node* control; |
| - ValueEffectControl(Node* value, Node* effect, Node* control) |
| - : value(value), effect(effect), control(control) {} |
| - }; |
| - |
| bool TryWireInStateEffect(Node* node, Node* frame_state, Node** effect, |
| Node** control); |
| - ValueEffectControl LowerChangeBitToTagged(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeInt31ToTaggedSigned(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeInt32ToTagged(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeUint32ToTagged(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeFloat64ToTagged(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeFloat64ToTaggedPointer(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeTaggedSignedToInt32(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeTaggedToBit(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeTaggedToInt32(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeTaggedToUint32(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckBounds(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckMaps(Node* node, Node* frame_state, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckNumber(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckString(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckIf(Node* node, Node* frame_state, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedInt32Add(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedInt32Sub(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedInt32Div(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedInt32Mod(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedUint32Div(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedUint32Mod(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedInt32Mul(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedInt32ToTaggedSigned(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedUint32ToInt32(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedUint32ToTaggedSigned(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedFloat64ToInt32(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedTaggedSignedToInt32(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedTaggedToInt32(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedTaggedToFloat64(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckedTaggedToTaggedSigned(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedTaggedToTaggedPointer(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerChangeTaggedToFloat64(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerTruncateTaggedToBit(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerTruncateTaggedToFloat64(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerTruncateTaggedToWord32(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckedTruncateTaggedToWord32(Node* node, |
| - Node* frame_state, |
| - Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerObjectIsCallable(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerObjectIsNumber(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerObjectIsReceiver(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerObjectIsSmi(Node* node, Node* effect, Node* control); |
| - ValueEffectControl LowerObjectIsString(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerObjectIsUndetectable(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerNewRestParameterElements(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerNewUnmappedArgumentsElements(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerArrayBufferWasNeutered(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringCharAt(Node* node, Node* effect, Node* control); |
| - ValueEffectControl LowerStringCharCodeAt(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringFromCharCode(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringFromCodePoint(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringEqual(Node* node, Node* effect, Node* control); |
| - ValueEffectControl LowerStringLessThan(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringLessThanOrEqual(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerCheckFloat64Hole(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerCheckTaggedHole(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerConvertTaggedHoleToUndefined(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerPlainPrimitiveToNumber(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerPlainPrimitiveToWord32(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerPlainPrimitiveToFloat64(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerEnsureWritableFastElements(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerMaybeGrowFastElements(Node* node, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl LowerTransitionElementsKind(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerLoadTypedElement(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStoreTypedElement(Node* node, Node* effect, |
| - Node* control); |
| + Node* LowerChangeBitToTagged(Node* node); |
| + Node* LowerChangeInt31ToTaggedSigned(Node* node); |
| + Node* LowerChangeInt32ToTagged(Node* node); |
| + Node* LowerChangeUint32ToTagged(Node* node); |
| + Node* LowerChangeFloat64ToTagged(Node* node); |
| + Node* LowerChangeFloat64ToTaggedPointer(Node* node); |
| + Node* LowerChangeTaggedSignedToInt32(Node* node); |
| + Node* LowerChangeTaggedToBit(Node* node); |
| + Node* LowerChangeTaggedToInt32(Node* node); |
| + Node* LowerChangeTaggedToUint32(Node* node); |
| + Node* LowerCheckBounds(Node* node, Node* frame_state); |
| + Node* LowerCheckMaps(Node* node, Node* frame_state); |
| + Node* LowerCheckNumber(Node* node, Node* frame_state); |
| + Node* LowerCheckString(Node* node, Node* frame_state); |
| + Node* LowerCheckIf(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32Add(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32Sub(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32Div(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32Mod(Node* node, Node* frame_state); |
| + Node* LowerCheckedUint32Div(Node* node, Node* frame_state); |
| + Node* LowerCheckedUint32Mod(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32Mul(Node* node, Node* frame_state); |
| + Node* LowerCheckedInt32ToTaggedSigned(Node* node, Node* frame_state); |
| + Node* LowerCheckedUint32ToInt32(Node* node, Node* frame_state); |
| + Node* LowerCheckedUint32ToTaggedSigned(Node* node, Node* frame_state); |
| + Node* LowerCheckedFloat64ToInt32(Node* node, Node* frame_state); |
| + Node* LowerCheckedTaggedSignedToInt32(Node* node, Node* frame_state); |
| + Node* LowerCheckedTaggedToInt32(Node* node, Node* frame_state); |
| + Node* LowerCheckedTaggedToFloat64(Node* node, Node* frame_state); |
| + Node* LowerCheckedTaggedToTaggedSigned(Node* node, Node* frame_state); |
| + Node* LowerCheckedTaggedToTaggedPointer(Node* node, Node* frame_state); |
| + Node* LowerChangeTaggedToFloat64(Node* node); |
| + Node* LowerTruncateTaggedToBit(Node* node); |
| + Node* LowerTruncateTaggedToFloat64(Node* node); |
| + Node* LowerTruncateTaggedToWord32(Node* node); |
| + Node* LowerCheckedTruncateTaggedToWord32(Node* node, Node* frame_state); |
| + Node* LowerObjectIsCallable(Node* node); |
| + Node* LowerObjectIsNumber(Node* node); |
| + Node* LowerObjectIsReceiver(Node* node); |
| + Node* LowerObjectIsSmi(Node* node); |
| + Node* LowerObjectIsString(Node* node); |
| + Node* LowerObjectIsUndetectable(Node* node); |
| + Node* LowerNewRestParameterElements(Node* node); |
| + Node* LowerNewUnmappedArgumentsElements(Node* node); |
| + Node* LowerArrayBufferWasNeutered(Node* node); |
| + Node* LowerStringCharAt(Node* node); |
| + Node* LowerStringCharCodeAt(Node* node); |
| + Node* LowerStringFromCharCode(Node* node); |
| + Node* LowerStringFromCodePoint(Node* node); |
| + Node* LowerStringEqual(Node* node); |
| + Node* LowerStringLessThan(Node* node); |
| + Node* LowerStringLessThanOrEqual(Node* node); |
| + Node* LowerCheckFloat64Hole(Node* node, Node* frame_state); |
| + Node* LowerCheckTaggedHole(Node* node, Node* frame_state); |
| + Node* LowerConvertTaggedHoleToUndefined(Node* node); |
| + Node* LowerPlainPrimitiveToNumber(Node* node); |
| + Node* LowerPlainPrimitiveToWord32(Node* node); |
| + Node* LowerPlainPrimitiveToFloat64(Node* node); |
| + Node* LowerEnsureWritableFastElements(Node* node); |
| + Node* LowerMaybeGrowFastElements(Node* node, Node* frame_state); |
| + void LowerTransitionElementsKind(Node* node); |
| + Node* LowerLoadTypedElement(Node* node); |
| + void LowerStoreTypedElement(Node* node); |
| // Lowering of optional operators. |
| - ValueEffectControl LowerFloat64RoundUp(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerFloat64RoundDown(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerFloat64RoundTiesEven(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerFloat64RoundTruncate(Node* node, Node* effect, |
| - Node* control); |
| - |
| - ValueEffectControl AllocateHeapNumberWithValue(Node* node, Node* effect, |
| - Node* control); |
| - ValueEffectControl BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode, |
| - Node* value, Node* frame_state, |
| - Node* effect, Node* control); |
| - ValueEffectControl BuildCheckedHeapNumberOrOddballToFloat64( |
| - CheckTaggedInputMode mode, Node* value, Node* frame_state, Node* effect, |
| - Node* control); |
| - ValueEffectControl BuildFloat64RoundDown(Node* value, Node* effect, |
| - Node* control); |
| - ValueEffectControl LowerStringComparison(Callable const& callable, Node* node, |
| - Node* effect, Node* control); |
| + Maybe<Node*> LowerFloat64RoundUp(Node* node); |
| + Maybe<Node*> LowerFloat64RoundDown(Node* node); |
| + Maybe<Node*> LowerFloat64RoundTiesEven(Node* node); |
| + Maybe<Node*> LowerFloat64RoundTruncate(Node* node); |
| + |
| + Node* AllocateHeapNumberWithValue(Node* node); |
| + Node* BuildCheckedFloat64ToInt32(CheckForMinusZeroMode mode, Node* value, |
| + Node* frame_state); |
| + Node* BuildCheckedHeapNumberOrOddballToFloat64(CheckTaggedInputMode mode, |
| + Node* value, |
| + Node* frame_state); |
| + Node* BuildFloat64RoundDown(Node* value); |
| + Node* LowerStringComparison(Callable const& callable, Node* node); |
| Node* ChangeInt32ToSmi(Node* value); |
|
Igor Sheludko
2017/01/02 13:23:26
I think these helper methods should live in the Gr
Jarin
2017/01/03 09:27:55
Acknowledged.
|
| Node* ChangeUint32ToSmi(Node* value); |
| - Node* ChangeInt32ToFloat64(Node* value); |
| - Node* ChangeUint32ToFloat64(Node* value); |
| Node* ChangeSmiToInt32(Node* value); |
| Node* ObjectIsSmi(Node* value); |
| @@ -227,15 +138,14 @@ class V8_EXPORT_PRIVATE EffectControlLinearizer { |
| SimplifiedOperatorBuilder* simplified() const; |
| MachineOperatorBuilder* machine() const; |
| - Operator const* ToNumberOperator(); |
| + GraphAssembler* gasm() { return &graph_assembler_; } |
| JSGraph* js_graph_; |
| Schedule* schedule_; |
| Zone* temp_zone_; |
| RegionObservability region_observability_ = RegionObservability::kObservable; |
| SourcePositionTable* source_positions_; |
| - |
| - SetOncePointer<Operator const> to_number_operator_; |
| + GraphAssembler graph_assembler_; |
| }; |
| } // namespace compiler |