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

Side by Side Diff: src/compiler/js-operator.cc

Issue 769193003: [turbofan] Cache the JSStoreProperty operator(s). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « no previous file | test/unittests/compiler/js-operator-unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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-operator.h" 5 #include "src/compiler/js-operator.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/lazy-instance.h" 9 #include "src/base/lazy-instance.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 struct Name##Operator FINAL : public Operator { \ 252 struct Name##Operator FINAL : public Operator { \
253 Name##Operator() \ 253 Name##Operator() \
254 : Operator(IrOpcode::kJS##Name, properties, "JS" #Name, \ 254 : Operator(IrOpcode::kJS##Name, properties, "JS" #Name, \
255 value_input_count, Operator::ZeroIfPure(properties), \ 255 value_input_count, Operator::ZeroIfPure(properties), \
256 Operator::ZeroIfPure(properties), value_output_count, \ 256 Operator::ZeroIfPure(properties), value_output_count, \
257 Operator::ZeroIfPure(properties), 0) {} \ 257 Operator::ZeroIfPure(properties), 0) {} \
258 }; \ 258 }; \
259 Name##Operator k##Name##Operator; 259 Name##Operator k##Name##Operator;
260 CACHED_OP_LIST(CACHED) 260 CACHED_OP_LIST(CACHED)
261 #undef CACHED 261 #undef CACHED
262
263 template <StrictMode kStrictMode>
264 struct StorePropertyOperator FINAL : public Operator1<StrictMode> {
265 StorePropertyOperator()
266 : Operator1<StrictMode>(IrOpcode::kJSStoreProperty,
267 Operator::kNoProperties, "JSStoreProperty", 3,
268 1, 1, 0, 1, 0, kStrictMode) {}
269 };
270 StorePropertyOperator<SLOPPY> kStorePropertySloppyOperator;
271 StorePropertyOperator<STRICT> kStorePropertyStrictOperator;
262 }; 272 };
263 273
264 274
265 static base::LazyInstance<JSOperatorGlobalCache>::type kCache = 275 static base::LazyInstance<JSOperatorGlobalCache>::type kCache =
266 LAZY_INSTANCE_INITIALIZER; 276 LAZY_INSTANCE_INITIALIZER;
267 277
268 278
269 JSOperatorBuilder::JSOperatorBuilder(Zone* zone) 279 JSOperatorBuilder::JSOperatorBuilder(Zone* zone)
270 : cache_(kCache.Get()), zone_(zone) {} 280 : cache_(kCache.Get()), zone_(zone) {}
271 281
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 LoadPropertyParameters parameters(feedback); 338 LoadPropertyParameters parameters(feedback);
329 return new (zone()) Operator1<LoadPropertyParameters>( // -- 339 return new (zone()) Operator1<LoadPropertyParameters>( // --
330 IrOpcode::kJSLoadProperty, Operator::kNoProperties, // opcode 340 IrOpcode::kJSLoadProperty, Operator::kNoProperties, // opcode
331 "JSLoadProperty", // name 341 "JSLoadProperty", // name
332 2, 1, 1, 1, 1, 0, // counts 342 2, 1, 1, 1, 1, 0, // counts
333 parameters); // parameter 343 parameters); // parameter
334 } 344 }
335 345
336 346
337 const Operator* JSOperatorBuilder::StoreProperty(StrictMode strict_mode) { 347 const Operator* JSOperatorBuilder::StoreProperty(StrictMode strict_mode) {
338 return new (zone()) Operator1<StrictMode>( // -- 348 switch (strict_mode) {
339 IrOpcode::kJSStoreProperty, Operator::kNoProperties, // opcode 349 case SLOPPY:
340 "JSStoreProperty", // name 350 return &cache_.kStorePropertySloppyOperator;
341 3, 1, 1, 0, 1, 0, // counts 351 case STRICT:
342 strict_mode); // parameter 352 return &cache_.kStorePropertyStrictOperator;
353 }
354 UNREACHABLE();
355 return nullptr;
343 } 356 }
344 357
345 358
346 const Operator* JSOperatorBuilder::StoreNamed(StrictMode strict_mode, 359 const Operator* JSOperatorBuilder::StoreNamed(StrictMode strict_mode,
347 const Unique<Name>& name) { 360 const Unique<Name>& name) {
348 StoreNamedParameters parameters(strict_mode, name); 361 StoreNamedParameters parameters(strict_mode, name);
349 return new (zone()) Operator1<StoreNamedParameters>( // -- 362 return new (zone()) Operator1<StoreNamedParameters>( // --
350 IrOpcode::kJSStoreNamed, Operator::kNoProperties, // opcode 363 IrOpcode::kJSStoreNamed, Operator::kNoProperties, // opcode
351 "JSStoreNamed", // name 364 "JSStoreNamed", // name
352 2, 1, 1, 0, 1, 0, // counts 365 2, 1, 1, 0, 1, 0, // counts
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 return new (zone()) Operator1<Unique<String>>( // -- 402 return new (zone()) Operator1<Unique<String>>( // --
390 IrOpcode::kJSCreateCatchContext, Operator::kNoProperties, // opcode 403 IrOpcode::kJSCreateCatchContext, Operator::kNoProperties, // opcode
391 "JSCreateCatchContext", // name 404 "JSCreateCatchContext", // name
392 1, 1, 1, 1, 1, 0, // counts 405 1, 1, 1, 1, 1, 0, // counts
393 name); // parameter 406 name); // parameter
394 } 407 }
395 408
396 } // namespace compiler 409 } // namespace compiler
397 } // namespace internal 410 } // namespace internal
398 } // namespace v8 411 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/unittests/compiler/js-operator-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698