diff options
Diffstat (limited to 'deps/v8/test/cctest/compiler/test-js-context-specialization.cc')
-rw-r--r-- | deps/v8/test/cctest/compiler/test-js-context-specialization.cc | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/deps/v8/test/cctest/compiler/test-js-context-specialization.cc b/deps/v8/test/cctest/compiler/test-js-context-specialization.cc index 2450e7cf57..328b0aefdd 100644 --- a/deps/v8/test/cctest/compiler/test-js-context-specialization.cc +++ b/deps/v8/test/cctest/compiler/test-js-context-specialization.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "src/compiler/js-context-specialization.h" +#include "src/compiler/js-graph.h" #include "src/compiler/js-operator.h" #include "src/compiler/node-matchers.h" #include "src/compiler/node-properties.h" @@ -22,8 +23,11 @@ class ContextSpecializationTester : public HandleAndZoneScope { javascript_(main_zone()), machine_(main_zone()), simplified_(main_zone()), - jsgraph_(main_isolate(), graph(), common(), &javascript_, &machine_) {} + jsgraph_(main_isolate(), graph(), common(), &javascript_, &machine_), + reducer_(main_zone(), graph()), + spec_(&reducer_, jsgraph(), MaybeHandle<Context>()) {} + JSContextSpecialization* spec() { return &spec_; } Factory* factory() { return main_isolate()->factory(); } CommonOperatorBuilder* common() { return &common_; } JSOperatorBuilder* javascript() { return &javascript_; } @@ -38,6 +42,8 @@ class ContextSpecializationTester : public HandleAndZoneScope { MachineOperatorBuilder machine_; SimplifiedOperatorBuilder simplified_; JSGraph jsgraph_; + GraphReducer reducer_; + JSContextSpecialization spec_; }; @@ -60,13 +66,12 @@ TEST(ReduceJSLoadContext) { Node* const_context = t.jsgraph()->Constant(native); Node* deep_const_context = t.jsgraph()->Constant(subcontext2); Node* param_context = t.graph()->NewNode(t.common()->Parameter(0), start); - JSContextSpecializer spec(t.jsgraph()); { // Mutable slot, constant context, depth = 0 => do nothing. Node* load = t.graph()->NewNode(t.javascript()->LoadContext(0, 0, false), const_context, const_context, start); - Reduction r = spec.ReduceJSLoadContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(!r.Changed()); } @@ -74,7 +79,7 @@ TEST(ReduceJSLoadContext) { // Mutable slot, non-constant context, depth = 0 => do nothing. Node* load = t.graph()->NewNode(t.javascript()->LoadContext(0, 0, false), param_context, param_context, start); - Reduction r = spec.ReduceJSLoadContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(!r.Changed()); } @@ -83,11 +88,11 @@ TEST(ReduceJSLoadContext) { Node* load = t.graph()->NewNode( t.javascript()->LoadContext(2, Context::GLOBAL_EVAL_FUN_INDEX, false), deep_const_context, deep_const_context, start); - Reduction r = spec.ReduceJSLoadContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(r.Changed()); Node* new_context_input = NodeProperties::GetValueInput(r.replacement(), 0); CHECK_EQ(IrOpcode::kHeapConstant, new_context_input->opcode()); - HeapObjectMatcher<Context> match(new_context_input); + HeapObjectMatcher match(new_context_input); CHECK_EQ(*native, *match.Value().handle()); ContextAccess access = OpParameter<ContextAccess>(r.replacement()); CHECK_EQ(Context::GLOBAL_EVAL_FUN_INDEX, static_cast<int>(access.index())); @@ -99,11 +104,11 @@ TEST(ReduceJSLoadContext) { // Immutable slot, constant context, depth = 0 => specialize. Node* load = t.graph()->NewNode(t.javascript()->LoadContext(0, slot, true), const_context, const_context, start); - Reduction r = spec.ReduceJSLoadContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(r.Changed()); CHECK(r.replacement() != load); - HeapObjectMatcher<Object> match(r.replacement()); + HeapObjectMatcher match(r.replacement()); CHECK(match.HasValue()); CHECK_EQ(*expected, *match.Value().handle()); } @@ -132,13 +137,12 @@ TEST(ReduceJSStoreContext) { Node* const_context = t.jsgraph()->Constant(native); Node* deep_const_context = t.jsgraph()->Constant(subcontext2); Node* param_context = t.graph()->NewNode(t.common()->Parameter(0), start); - JSContextSpecializer spec(t.jsgraph()); { // Mutable slot, constant context, depth = 0 => do nothing. Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, 0), const_context, const_context, start); - Reduction r = spec.ReduceJSStoreContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(!r.Changed()); } @@ -146,7 +150,7 @@ TEST(ReduceJSStoreContext) { // Mutable slot, non-constant context, depth = 0 => do nothing. Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, 0), param_context, param_context, start); - Reduction r = spec.ReduceJSStoreContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(!r.Changed()); } @@ -154,7 +158,7 @@ TEST(ReduceJSStoreContext) { // Immutable slot, constant context, depth = 0 => do nothing. Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, slot), const_context, const_context, start); - Reduction r = spec.ReduceJSStoreContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(!r.Changed()); } @@ -163,11 +167,11 @@ TEST(ReduceJSStoreContext) { Node* load = t.graph()->NewNode( t.javascript()->StoreContext(2, Context::GLOBAL_EVAL_FUN_INDEX), deep_const_context, deep_const_context, start); - Reduction r = spec.ReduceJSStoreContext(load); + Reduction r = t.spec()->Reduce(load); CHECK(r.Changed()); Node* new_context_input = NodeProperties::GetValueInput(r.replacement(), 0); CHECK_EQ(IrOpcode::kHeapConstant, new_context_input->opcode()); - HeapObjectMatcher<Context> match(new_context_input); + HeapObjectMatcher match(new_context_input); CHECK_EQ(*native, *match.Value().handle()); ContextAccess access = OpParameter<ContextAccess>(r.replacement()); CHECK_EQ(Context::GLOBAL_EVAL_FUN_INDEX, static_cast<int>(access.index())); @@ -197,7 +201,6 @@ TEST(SpecializeToContext) { Node* const_context = t.jsgraph()->Constant(native); Node* param_context = t.graph()->NewNode(t.common()->Parameter(0), start); - JSContextSpecializer spec(t.jsgraph()); { // Check that specialization replaces values and forwards effects @@ -222,7 +225,7 @@ TEST(SpecializeToContext) { Node* ret = t.graph()->NewNode(t.common()->Return(), add, effect_use, start); - Node* end = t.graph()->NewNode(t.common()->End(), ret); + Node* end = t.graph()->NewNode(t.common()->End(1), ret); USE(end); t.graph()->SetEnd(end); @@ -231,7 +234,9 @@ TEST(SpecializeToContext) { CheckEffectInput(load, effect_use); // Perform the reduction on the entire graph. - GraphReducer graph_reducer(t.graph(), t.main_zone()); + GraphReducer graph_reducer(t.main_zone(), t.graph()); + JSContextSpecialization spec(&graph_reducer, t.jsgraph(), + MaybeHandle<Context>()); graph_reducer.AddReducer(&spec); graph_reducer.ReduceGraph(); @@ -242,7 +247,7 @@ TEST(SpecializeToContext) { CHECK_EQ(other_load, other_use->InputAt(0)); Node* replacement = value_use->InputAt(0); - HeapObjectMatcher<Object> match(replacement); + HeapObjectMatcher match(replacement); CHECK(match.HasValue()); CHECK_EQ(*expected, *match.Value().handle()); } |