| Index: src/compiler/effect-control-linearizer.h
|
| diff --git a/src/compiler/effect-control-linearizer.h b/src/compiler/effect-control-linearizer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..846a6dfd092bb91c731a7dee0cacc6048f3b8d5a
|
| --- /dev/null
|
| +++ b/src/compiler/effect-control-linearizer.h
|
| @@ -0,0 +1,80 @@
|
| +// Copyright 2016 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
|
| +#define V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
|
| +
|
| +#include "src/compiler/common-operator.h"
|
| +#include "src/compiler/node.h"
|
| +#include "src/compiler/simplified-operator.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +
|
| +class Zone;
|
| +
|
| +namespace compiler {
|
| +
|
| +class CommonOperatorBuilder;
|
| +class SimplifiedOperatorBuilder;
|
| +class MachineOperatorBuilder;
|
| +class JSGraph;
|
| +class Graph;
|
| +class Schedule;
|
| +
|
| +class EffectControlLinearizer {
|
| + public:
|
| + EffectControlLinearizer(JSGraph* graph, Schedule* schedule, Zone* temp_zone);
|
| +
|
| + void Run();
|
| +
|
| + private:
|
| + void ProcessNode(Node* node, Node** current_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** 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 AllocateHeapNumberWithValue(Node* node, Node* effect,
|
| + Node* control);
|
| +
|
| + Node* ChangeInt32ToSmi(Node* value);
|
| + Node* ChangeUint32ToSmi(Node* value);
|
| + Node* ChangeInt32ToFloat64(Node* value);
|
| + Node* ChangeUint32ToFloat64(Node* value);
|
| +
|
| + Node* HeapNumberValueIndexConstant();
|
| + Node* SmiMaxValueConstant();
|
| + Node* SmiShiftBitsConstant();
|
| +
|
| + JSGraph* jsgraph() const { return js_graph_; }
|
| + Graph* graph() const;
|
| + Schedule* schedule() const { return schedule_; }
|
| + Zone* temp_zone() const { return temp_zone_; }
|
| + CommonOperatorBuilder* common() const;
|
| + SimplifiedOperatorBuilder* simplified() const;
|
| + MachineOperatorBuilder* machine() const;
|
| +
|
| + JSGraph* js_graph_;
|
| + Schedule* schedule_;
|
| + Zone* temp_zone_;
|
| + SetOncePointer<const Operator> allocate_heap_number_operator_;
|
| +};
|
| +
|
| +} // namespace compiler
|
| +} // namespace internal
|
| +} // namespace v8
|
| +
|
| +#endif // V8_COMPILER_EFFECT_CONTROL_LINEARIZER_H_
|
|
|