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

Side by Side Diff: src/code-stubs-hydrogen.cc

Issue 1469833005: [runtime] Pass closure to %CreateArrayLiteral and %CreateObjectLiteral. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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 | src/compiler/ast-graph-builder.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include "src/bailout-reason.h" 7 #include "src/bailout-reason.h"
8 #include "src/crankshaft/hydrogen.h" 8 #include "src/crankshaft/hydrogen.h"
9 #include "src/crankshaft/lithium.h" 9 #include "src/crankshaft/lithium.h"
10 #include "src/field-index.h" 10 #include "src/field-index.h"
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 431
432 Handle<Code> TypeofStub::GenerateCode() { return DoGenerateCode(this); } 432 Handle<Code> TypeofStub::GenerateCode() { return DoGenerateCode(this); }
433 433
434 434
435 template <> 435 template <>
436 HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() { 436 HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() {
437 Factory* factory = isolate()->factory(); 437 Factory* factory = isolate()->factory();
438 HValue* undefined = graph()->GetConstantUndefined(); 438 HValue* undefined = graph()->GetConstantUndefined();
439 AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode(); 439 AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode();
440 HValue* closure = GetParameter(0);
441 HValue* literal_index = GetParameter(1);
440 442
441 // This stub is very performance sensitive, the generated code must be tuned 443 // This stub is very performance sensitive, the generated code must be tuned
442 // so that it doesn't build and eager frame. 444 // so that it doesn't build and eager frame.
443 info()->MarkMustNotHaveEagerFrame(); 445 info()->MarkMustNotHaveEagerFrame();
444 446
447 HValue* literals_array = Add<HLoadNamedField>(
448 closure, nullptr, HObjectAccess::ForLiteralsPointer());
449
445 HInstruction* allocation_site = Add<HLoadKeyed>( 450 HInstruction* allocation_site = Add<HLoadKeyed>(
446 GetParameter(0), GetParameter(1), nullptr, FAST_ELEMENTS, 451 literals_array, literal_index, nullptr, FAST_ELEMENTS, NEVER_RETURN_HOLE,
447 NEVER_RETURN_HOLE, LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag); 452 LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag);
448 IfBuilder checker(this); 453 IfBuilder checker(this);
449 checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site, 454 checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site,
450 undefined); 455 undefined);
451 checker.Then(); 456 checker.Then();
452 457
453 HObjectAccess access = HObjectAccess::ForAllocationSiteOffset( 458 HObjectAccess access = HObjectAccess::ForAllocationSiteOffset(
454 AllocationSite::kTransitionInfoOffset); 459 AllocationSite::kTransitionInfoOffset);
455 HInstruction* boilerplate = 460 HInstruction* boilerplate =
456 Add<HLoadNamedField>(allocation_site, nullptr, access); 461 Add<HLoadNamedField>(allocation_site, nullptr, access);
457 HValue* elements = AddLoadElements(boilerplate); 462 HValue* elements = AddLoadElements(boilerplate);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 502
498 503
499 Handle<Code> FastCloneShallowArrayStub::GenerateCode() { 504 Handle<Code> FastCloneShallowArrayStub::GenerateCode() {
500 return DoGenerateCode(this); 505 return DoGenerateCode(this);
501 } 506 }
502 507
503 508
504 template <> 509 template <>
505 HValue* CodeStubGraphBuilder<FastCloneShallowObjectStub>::BuildCodeStub() { 510 HValue* CodeStubGraphBuilder<FastCloneShallowObjectStub>::BuildCodeStub() {
506 HValue* undefined = graph()->GetConstantUndefined(); 511 HValue* undefined = graph()->GetConstantUndefined();
512 HValue* closure = GetParameter(0);
513 HValue* literal_index = GetParameter(1);
514
515 HValue* literals_array = Add<HLoadNamedField>(
516 closure, nullptr, HObjectAccess::ForLiteralsPointer());
507 517
508 HInstruction* allocation_site = Add<HLoadKeyed>( 518 HInstruction* allocation_site = Add<HLoadKeyed>(
509 GetParameter(0), GetParameter(1), nullptr, FAST_ELEMENTS, 519 literals_array, literal_index, nullptr, FAST_ELEMENTS, NEVER_RETURN_HOLE,
510 NEVER_RETURN_HOLE, LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag); 520 LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag);
511 521
512 IfBuilder checker(this); 522 IfBuilder checker(this);
513 checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site, 523 checker.IfNot<HCompareObjectEqAndBranch, HValue*>(allocation_site,
514 undefined); 524 undefined);
515 checker.And(); 525 checker.And();
516 526
517 HObjectAccess access = HObjectAccess::ForAllocationSiteOffset( 527 HObjectAccess access = HObjectAccess::ForAllocationSiteOffset(
518 AllocationSite::kTransitionInfoOffset); 528 AllocationSite::kTransitionInfoOffset);
519 HInstruction* boilerplate = 529 HInstruction* boilerplate =
520 Add<HLoadNamedField>(allocation_site, nullptr, access); 530 Add<HLoadNamedField>(allocation_site, nullptr, access);
(...skipping 1858 matching lines...) Expand 10 before | Expand all | Expand 10 after
2379 return Pop(); 2389 return Pop();
2380 } 2390 }
2381 2391
2382 2392
2383 Handle<Code> KeyedLoadGenericStub::GenerateCode() { 2393 Handle<Code> KeyedLoadGenericStub::GenerateCode() {
2384 return DoGenerateCode(this); 2394 return DoGenerateCode(this);
2385 } 2395 }
2386 2396
2387 } // namespace internal 2397 } // namespace internal
2388 } // namespace v8 2398 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/ast-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698