Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Side by Side Diff: test/cctest/compiler/test-js-context-specialization.cc

Issue 1362783004: Revert of [turbofan] Checking of input counts on node creation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-context-specialization.h" 5 #include "src/compiler/js-context-specialization.h"
6 #include "src/compiler/js-graph.h" 6 #include "src/compiler/js-graph.h"
7 #include "src/compiler/js-operator.h" 7 #include "src/compiler/js-operator.h"
8 #include "src/compiler/node-matchers.h" 8 #include "src/compiler/node-matchers.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/source-position.h" 10 #include "src/compiler/source-position.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 Handle<Object> expected = t.factory()->InternalizeUtf8String("gboy!"); 133 Handle<Object> expected = t.factory()->InternalizeUtf8String("gboy!");
134 const int slot = Context::GLOBAL_OBJECT_INDEX; 134 const int slot = Context::GLOBAL_OBJECT_INDEX;
135 native->set(slot, *expected); 135 native->set(slot, *expected);
136 136
137 Node* const_context = t.jsgraph()->Constant(native); 137 Node* const_context = t.jsgraph()->Constant(native);
138 Node* deep_const_context = t.jsgraph()->Constant(subcontext2); 138 Node* deep_const_context = t.jsgraph()->Constant(subcontext2);
139 Node* param_context = t.graph()->NewNode(t.common()->Parameter(0), start); 139 Node* param_context = t.graph()->NewNode(t.common()->Parameter(0), start);
140 140
141 { 141 {
142 // Mutable slot, constant context, depth = 0 => do nothing. 142 // Mutable slot, constant context, depth = 0 => do nothing.
143 Node* load = 143 Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, 0),
144 t.graph()->NewNode(t.javascript()->StoreContext(0, 0), const_context, 144 const_context, const_context, start);
145 const_context, const_context, start, start);
146 Reduction r = t.spec()->Reduce(load); 145 Reduction r = t.spec()->Reduce(load);
147 CHECK(!r.Changed()); 146 CHECK(!r.Changed());
148 } 147 }
149 148
150 { 149 {
151 // Mutable slot, non-constant context, depth = 0 => do nothing. 150 // Mutable slot, non-constant context, depth = 0 => do nothing.
152 Node* load = 151 Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, 0),
153 t.graph()->NewNode(t.javascript()->StoreContext(0, 0), param_context, 152 param_context, param_context, start);
154 param_context, const_context, start, start);
155 Reduction r = t.spec()->Reduce(load); 153 Reduction r = t.spec()->Reduce(load);
156 CHECK(!r.Changed()); 154 CHECK(!r.Changed());
157 } 155 }
158 156
159 { 157 {
160 // Immutable slot, constant context, depth = 0 => do nothing. 158 // Immutable slot, constant context, depth = 0 => do nothing.
161 Node* load = 159 Node* load = t.graph()->NewNode(t.javascript()->StoreContext(0, slot),
162 t.graph()->NewNode(t.javascript()->StoreContext(0, slot), const_context, 160 const_context, const_context, start);
163 const_context, const_context, start, start);
164 Reduction r = t.spec()->Reduce(load); 161 Reduction r = t.spec()->Reduce(load);
165 CHECK(!r.Changed()); 162 CHECK(!r.Changed());
166 } 163 }
167 164
168 { 165 {
169 // Mutable slot, constant context, depth > 0 => fold-in parent context. 166 // Mutable slot, constant context, depth > 0 => fold-in parent context.
170 Node* load = t.graph()->NewNode( 167 Node* load = t.graph()->NewNode(
171 t.javascript()->StoreContext(2, Context::GLOBAL_EVAL_FUN_INDEX), 168 t.javascript()->StoreContext(2, Context::GLOBAL_EVAL_FUN_INDEX),
172 deep_const_context, deep_const_context, const_context, start, start); 169 deep_const_context, deep_const_context, start);
173 Reduction r = t.spec()->Reduce(load); 170 Reduction r = t.spec()->Reduce(load);
174 CHECK(r.Changed()); 171 CHECK(r.Changed());
175 Node* new_context_input = NodeProperties::GetValueInput(r.replacement(), 0); 172 Node* new_context_input = NodeProperties::GetValueInput(r.replacement(), 0);
176 CHECK_EQ(IrOpcode::kHeapConstant, new_context_input->opcode()); 173 CHECK_EQ(IrOpcode::kHeapConstant, new_context_input->opcode());
177 HeapObjectMatcher match(new_context_input); 174 HeapObjectMatcher match(new_context_input);
178 CHECK_EQ(*native, *match.Value()); 175 CHECK_EQ(*native, *match.Value());
179 ContextAccess access = OpParameter<ContextAccess>(r.replacement()); 176 ContextAccess access = OpParameter<ContextAccess>(r.replacement());
180 CHECK_EQ(Context::GLOBAL_EVAL_FUN_INDEX, static_cast<int>(access.index())); 177 CHECK_EQ(Context::GLOBAL_EVAL_FUN_INDEX, static_cast<int>(access.index()));
181 CHECK_EQ(0, static_cast<int>(access.depth())); 178 CHECK_EQ(0, static_cast<int>(access.depth()));
182 CHECK_EQ(false, access.immutable()); 179 CHECK_EQ(false, access.immutable());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 212
216 Node* value_use = 213 Node* value_use =
217 t.graph()->NewNode(t.simplified()->ChangeTaggedToInt32(), load); 214 t.graph()->NewNode(t.simplified()->ChangeTaggedToInt32(), load);
218 Node* other_load = 215 Node* other_load =
219 t.graph()->NewNode(t.javascript()->LoadContext(0, slot, true), 216 t.graph()->NewNode(t.javascript()->LoadContext(0, slot, true),
220 param_context, param_context, load); 217 param_context, param_context, load);
221 Node* effect_use = other_load; 218 Node* effect_use = other_load;
222 Node* other_use = 219 Node* other_use =
223 t.graph()->NewNode(t.simplified()->ChangeTaggedToInt32(), other_load); 220 t.graph()->NewNode(t.simplified()->ChangeTaggedToInt32(), other_load);
224 221
225 Node* add = t.graph()->NewNode( 222 Node* add =
226 t.javascript()->Add(LanguageMode::SLOPPY), value_use, other_use, 223 t.graph()->NewNode(t.javascript()->Add(LanguageMode::SLOPPY), value_use,
227 param_context, t.jsgraph()->EmptyFrameState(), 224 other_use, param_context, other_load, start);
228 t.jsgraph()->EmptyFrameState(), other_load, start);
229 225
230 Node* ret = 226 Node* ret =
231 t.graph()->NewNode(t.common()->Return(), add, effect_use, start); 227 t.graph()->NewNode(t.common()->Return(), add, effect_use, start);
232 Node* end = t.graph()->NewNode(t.common()->End(1), ret); 228 Node* end = t.graph()->NewNode(t.common()->End(1), ret);
233 USE(end); 229 USE(end);
234 t.graph()->SetEnd(end); 230 t.graph()->SetEnd(end);
235 231
236 // Double check the above graph is what we expect, or the test is broken. 232 // Double check the above graph is what we expect, or the test is broken.
237 CheckEffectInput(effect_in, load); 233 CheckEffectInput(effect_in, load);
238 CheckEffectInput(load, effect_use); 234 CheckEffectInput(load, effect_use);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 { 303 {
308 FunctionTester T( 304 FunctionTester T(
309 "(function() { if (false) { var x = 1; } function inc(a)" 305 "(function() { if (false) { var x = 1; } function inc(a)"
310 " { return a + x; } return inc; })()"); // x is undefined! 306 " { return a + x; } return inc; })()"); // x is undefined!
311 307
312 CHECK(T.Call(T.Val(0.0), T.Val(0.0)).ToHandleChecked()->IsNaN()); 308 CHECK(T.Call(T.Val(0.0), T.Val(0.0)).ToHandleChecked()->IsNaN());
313 CHECK(T.Call(T.Val(2.0), T.Val(0.0)).ToHandleChecked()->IsNaN()); 309 CHECK(T.Call(T.Val(2.0), T.Val(0.0)).ToHandleChecked()->IsNaN());
314 CHECK(T.Call(T.Val(-2.1), T.Val(0.0)).ToHandleChecked()->IsNaN()); 310 CHECK(T.Call(T.Val(-2.1), T.Val(0.0)).ToHandleChecked()->IsNaN());
315 } 311 }
316 } 312 }
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-js-constant-cache.cc ('k') | test/cctest/compiler/test-js-typed-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698