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

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

Issue 1722193002: [compiler] Drop the CompareNilIC. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE Created 4 years, 9 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
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.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 <sstream> 7 #include <sstream>
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/compiler/code-stub-assembler.h" 10 #include "src/compiler/code-stub-assembler.h"
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 DCHECK(*known_map_ != NULL); 445 DCHECK(*known_map_ != NULL);
446 GenerateKnownReceivers(masm); 446 GenerateKnownReceivers(masm);
447 break; 447 break;
448 case CompareICState::GENERIC: 448 case CompareICState::GENERIC:
449 GenerateGeneric(masm); 449 GenerateGeneric(masm);
450 break; 450 break;
451 } 451 }
452 } 452 }
453 453
454 454
455 void CompareNilICStub::UpdateStatus(Handle<Object> object) {
456 State state = this->state();
457 DCHECK(!state.Contains(GENERIC));
458 State old_state = state;
459 if (object->IsNull()) {
460 state.Add(NULL_TYPE);
461 } else if (object->IsUndefined()) {
462 state.Add(UNDEFINED);
463 } else if (object->IsUndetectableObject() || object->IsSmi()) {
464 state.RemoveAll();
465 state.Add(GENERIC);
466 } else if (IsMonomorphic()) {
467 state.RemoveAll();
468 state.Add(GENERIC);
469 } else {
470 state.Add(MONOMORPHIC_MAP);
471 }
472 TraceTransition(old_state, state);
473 set_sub_minor_key(TypesBits::update(sub_minor_key(), state.ToIntegral()));
474 }
475
476
477 Handle<Code> TurboFanCodeStub::GenerateCode() { 455 Handle<Code> TurboFanCodeStub::GenerateCode() {
478 const char* name = CodeStub::MajorName(MajorKey()); 456 const char* name = CodeStub::MajorName(MajorKey());
479 Zone zone; 457 Zone zone;
480 CallInterfaceDescriptor descriptor(GetCallInterfaceDescriptor()); 458 CallInterfaceDescriptor descriptor(GetCallInterfaceDescriptor());
481 compiler::CodeStubAssembler assembler(isolate(), &zone, descriptor, 459 compiler::CodeStubAssembler assembler(isolate(), &zone, descriptor,
482 GetCodeFlags(), name); 460 GetCodeFlags(), name);
483 GenerateAssembly(&assembler); 461 GenerateAssembly(&assembler);
484 return assembler.GenerateCode(); 462 return assembler.GenerateCode();
485 } 463 }
486 464
(...skipping 15 matching lines...) Expand all
502 // bug somewhere in our state transition machinery. 480 // bug somewhere in our state transition machinery.
503 DCHECK(from != to); 481 DCHECK(from != to);
504 if (!FLAG_trace_ic) return; 482 if (!FLAG_trace_ic) return;
505 OFStream os(stdout); 483 OFStream os(stdout);
506 os << "["; 484 os << "[";
507 PrintBaseName(os); 485 PrintBaseName(os);
508 os << ": " << from << "=>" << to << "]" << std::endl; 486 os << ": " << from << "=>" << to << "]" << std::endl;
509 } 487 }
510 488
511 489
512 void CompareNilICStub::PrintBaseName(std::ostream& os) const { // NOLINT
513 CodeStub::PrintBaseName(os);
514 os << ((nil_value() == kNullValue) ? "(NullValue)" : "(UndefinedValue)");
515 }
516
517
518 void CompareNilICStub::PrintState(std::ostream& os) const { // NOLINT
519 os << state();
520 }
521
522
523 // TODO(svenpanne) Make this a real infix_ostream_iterator. 490 // TODO(svenpanne) Make this a real infix_ostream_iterator.
524 class SimpleListPrinter { 491 class SimpleListPrinter {
525 public: 492 public:
526 explicit SimpleListPrinter(std::ostream& os) : os_(os), first_(true) {} 493 explicit SimpleListPrinter(std::ostream& os) : os_(os), first_(true) {}
527 494
528 void Add(const char* s) { 495 void Add(const char* s) {
529 if (first_) { 496 if (first_) {
530 first_ = false; 497 first_ = false;
531 } else { 498 } else {
532 os_ << ","; 499 os_ << ",";
533 } 500 }
534 os_ << s; 501 os_ << s;
535 } 502 }
536 503
537 private: 504 private:
538 std::ostream& os_; 505 std::ostream& os_;
539 bool first_; 506 bool first_;
540 }; 507 };
541 508
542 509
543 std::ostream& operator<<(std::ostream& os, const CompareNilICStub::State& s) {
544 os << "(";
545 SimpleListPrinter p(os);
546 if (s.IsEmpty()) p.Add("None");
547 if (s.Contains(CompareNilICStub::UNDEFINED)) p.Add("Undefined");
548 if (s.Contains(CompareNilICStub::NULL_TYPE)) p.Add("Null");
549 if (s.Contains(CompareNilICStub::MONOMORPHIC_MAP)) p.Add("MonomorphicMap");
550 if (s.Contains(CompareNilICStub::GENERIC)) p.Add("Generic");
551 return os << ")";
552 }
553
554
555 Type* CompareNilICStub::GetType(Zone* zone, Handle<Map> map) {
556 State state = this->state();
557 if (state.Contains(CompareNilICStub::GENERIC)) return Type::Any();
558
559 Type* result = Type::None();
560 if (state.Contains(CompareNilICStub::UNDEFINED)) {
561 result = Type::Union(result, Type::Undefined(), zone);
562 }
563 if (state.Contains(CompareNilICStub::NULL_TYPE)) {
564 result = Type::Union(result, Type::Null(), zone);
565 }
566 if (state.Contains(CompareNilICStub::MONOMORPHIC_MAP)) {
567 Type* type = map.is_null() ? Type::Detectable() : Type::Class(map, zone);
568 result = Type::Union(result, type, zone);
569 }
570
571 return result;
572 }
573
574
575 Type* CompareNilICStub::GetInputType(Zone* zone, Handle<Map> map) {
576 Type* output_type = GetType(zone, map);
577 Type* nil_type = nil_value() == kNullValue ? Type::Null() : Type::Undefined();
578 return Type::Union(output_type, nil_type, zone);
579 }
580
581
582 void CallICStub::PrintState(std::ostream& os) const { // NOLINT 510 void CallICStub::PrintState(std::ostream& os) const { // NOLINT
583 os << state(); 511 os << state();
584 } 512 }
585 513
586 514
587 void JSEntryStub::FinishCode(Handle<Code> code) { 515 void JSEntryStub::FinishCode(Handle<Code> code) {
588 Handle<FixedArray> handler_table = 516 Handle<FixedArray> handler_table =
589 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); 517 code->GetIsolate()->factory()->NewFixedArray(1, TENURED);
590 handler_table->set(0, Smi::FromInt(handler_offset_)); 518 handler_table->set(0, Smi::FromInt(handler_offset_));
591 code->set_handler_table(*handler_table); 519 code->set_handler_table(*handler_table);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 descriptor->Initialize(); 661 descriptor->Initialize();
734 } 662 }
735 663
736 664
737 void AllocateInNewSpaceStub::InitializeDescriptor( 665 void AllocateInNewSpaceStub::InitializeDescriptor(
738 CodeStubDescriptor* descriptor) { 666 CodeStubDescriptor* descriptor) {
739 descriptor->Initialize(); 667 descriptor->Initialize();
740 } 668 }
741 669
742 670
743 void CompareNilICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
744 descriptor->Initialize(FUNCTION_ADDR(Runtime_CompareNilIC_Miss));
745 descriptor->SetMissHandler(ExternalReference(
746 Runtime::FunctionForId(Runtime::kCompareNilIC_Miss), isolate()));
747 }
748
749
750 void ToBooleanStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 671 void ToBooleanStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
751 descriptor->Initialize(FUNCTION_ADDR(Runtime_ToBooleanIC_Miss)); 672 descriptor->Initialize(FUNCTION_ADDR(Runtime_ToBooleanIC_Miss));
752 descriptor->SetMissHandler(ExternalReference( 673 descriptor->SetMissHandler(ExternalReference(
753 Runtime::FunctionForId(Runtime::kToBooleanIC_Miss), isolate())); 674 Runtime::FunctionForId(Runtime::kToBooleanIC_Miss), isolate()));
754 } 675 }
755 676
756 677
757 void BinaryOpICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 678 void BinaryOpICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
758 descriptor->Initialize(FUNCTION_ADDR(Runtime_BinaryOpIC_Miss)); 679 descriptor->Initialize(FUNCTION_ADDR(Runtime_BinaryOpIC_Miss));
759 descriptor->SetMissHandler(ExternalReference( 680 descriptor->SetMissHandler(ExternalReference(
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 if (type->Is(Type::UntaggedPointer())) { 908 if (type->Is(Type::UntaggedPointer())) {
988 return Representation::External(); 909 return Representation::External();
989 } 910 }
990 911
991 DCHECK(!type->Is(Type::Untagged())); 912 DCHECK(!type->Is(Type::Untagged()));
992 return Representation::Tagged(); 913 return Representation::Tagged();
993 } 914 }
994 915
995 } // namespace internal 916 } // namespace internal
996 } // namespace v8 917 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698