namespace internal {
namespace compiler {
-JSIntrinsicLowering::JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph)
+JSIntrinsicLowering::JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph,
+ DeoptimizationMode mode)
: AdvancedReducer(editor),
jsgraph_(jsgraph),
+ mode_(mode),
simplified_(jsgraph->zone()) {}
Reduction JSIntrinsicLowering::ReduceDeoptimizeNow(Node* node) {
- // TODO(jarin): This should not depend on the global flag.
- if (!FLAG_turbo_deoptimization) return NoChange();
-
+ if (mode() != kDeoptimizationEnabled) return NoChange();
Node* frame_state = NodeProperties::GetFrameStateInput(node, 0);
DCHECK_EQ(frame_state->opcode(), IrOpcode::kFrameState);
// Lowers certain JS-level runtime calls.
class JSIntrinsicLowering final : public AdvancedReducer {
public:
- JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph);
+ enum DeoptimizationMode { kDeoptimizationEnabled, kDeoptimizationDisabled };
+
+ JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph,
+ DeoptimizationMode mode);
~JSIntrinsicLowering() final {}
Reduction Reduce(Node* node) final;
JSGraph* jsgraph() const { return jsgraph_; }
CommonOperatorBuilder* common() const;
MachineOperatorBuilder* machine() const;
+ DeoptimizationMode mode() const { return mode_; }
SimplifiedOperatorBuilder* simplified() { return &simplified_; }
- JSGraph* jsgraph_;
+ JSGraph* const jsgraph_;
+ DeoptimizationMode const mode_;
SimplifiedOperatorBuilder simplified_;
};
LoadElimination load_elimination;
JSBuiltinReducer builtin_reducer(data->jsgraph());
JSTypedLowering typed_lowering(&graph_reducer, data->jsgraph(), temp_zone);
- JSIntrinsicLowering intrinsic_lowering(&graph_reducer, data->jsgraph());
+ JSIntrinsicLowering intrinsic_lowering(
+ &graph_reducer, data->jsgraph(),
+ data->info()->is_deoptimization_enabled()
+ ? JSIntrinsicLowering::kDeoptimizationEnabled
+ : JSIntrinsicLowering::kDeoptimizationDisabled);
SimplifiedOperatorReducer simple_reducer(data->jsgraph());
CommonOperatorReducer common_reducer(data->jsgraph());
AddReducer(data, &graph_reducer, &builtin_reducer);
JSGraph jsgraph(isolate(), graph(), common(), javascript(), &machine);
// TODO(titzer): mock the GraphReducer here for better unit testing.
GraphReducer graph_reducer(graph(), zone());
- JSIntrinsicLowering reducer(&graph_reducer, &jsgraph);
+ JSIntrinsicLowering reducer(&graph_reducer, &jsgraph,
+ JSIntrinsicLowering::kDeoptimizationEnabled);
return reducer.Reduce(node);
}