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

Side by Side Diff: src/hydrogen.cc

Issue 141533003: Minor bugfix in building inlined Array: bad argument to JSArrayBuilder. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2686 matching lines...) Expand 10 before | Expand all | Expand 10 after
2697 2697
2698 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder, 2698 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder,
2699 ElementsKind kind, 2699 ElementsKind kind,
2700 HValue* allocation_site_payload, 2700 HValue* allocation_site_payload,
2701 HValue* constructor_function, 2701 HValue* constructor_function,
2702 AllocationSiteOverrideMode override_mode) : 2702 AllocationSiteOverrideMode override_mode) :
2703 builder_(builder), 2703 builder_(builder),
2704 kind_(kind), 2704 kind_(kind),
2705 allocation_site_payload_(allocation_site_payload), 2705 allocation_site_payload_(allocation_site_payload),
2706 constructor_function_(constructor_function) { 2706 constructor_function_(constructor_function) {
2707 ASSERT(!allocation_site_payload->IsConstant() ||
2708 HConstant::cast(allocation_site_payload)->handle(
2709 builder_->isolate())->IsAllocationSite());
2707 mode_ = override_mode == DISABLE_ALLOCATION_SITES 2710 mode_ = override_mode == DISABLE_ALLOCATION_SITES
2708 ? DONT_TRACK_ALLOCATION_SITE 2711 ? DONT_TRACK_ALLOCATION_SITE
2709 : AllocationSite::GetMode(kind); 2712 : AllocationSite::GetMode(kind);
2710 } 2713 }
2711 2714
2712 2715
2713 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder, 2716 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder,
2714 ElementsKind kind, 2717 ElementsKind kind,
2715 HValue* constructor_function) : 2718 HValue* constructor_function) :
2716 builder_(builder), 2719 builder_(builder),
(...skipping 5220 matching lines...) Expand 10 before | Expand all | Expand 10 after
7937 NoObservableSideEffectsScope no_effects(this); 7940 NoObservableSideEffectsScope no_effects(this);
7938 7941
7939 int argument_count = expr->arguments()->length(); 7942 int argument_count = expr->arguments()->length();
7940 // We should at least have the constructor on the expression stack. 7943 // We should at least have the constructor on the expression stack.
7941 HValue* constructor = environment()->ExpressionStackAt(argument_count); 7944 HValue* constructor = environment()->ExpressionStackAt(argument_count);
7942 7945
7943 ElementsKind kind = expr->elements_kind(); 7946 ElementsKind kind = expr->elements_kind();
7944 Handle<Cell> cell = expr->allocation_info_cell(); 7947 Handle<Cell> cell = expr->allocation_info_cell();
7945 Handle<AllocationSite> site(AllocationSite::cast(cell->value())); 7948 Handle<AllocationSite> site(AllocationSite::cast(cell->value()));
7946 7949
7947 // Register on the site for deoptimization if the cell value changes. 7950 // Register on the site for deoptimization if the transition feedback changes.
7948 AllocationSite::AddDependentCompilationInfo( 7951 AllocationSite::AddDependentCompilationInfo(
7949 site, AllocationSite::TRANSITIONS, top_info()); 7952 site, AllocationSite::TRANSITIONS, top_info());
7950 HInstruction* cell_instruction = Add<HConstant>(cell); 7953 HInstruction* site_instruction = Add<HConstant>(site);
7951 7954
7952 // In the single constant argument case, we may have to adjust elements kind 7955 // In the single constant argument case, we may have to adjust elements kind
7953 // to avoid creating a packed non-empty array. 7956 // to avoid creating a packed non-empty array.
7954 if (argument_count == 1 && !IsHoleyElementsKind(kind)) { 7957 if (argument_count == 1 && !IsHoleyElementsKind(kind)) {
7955 HValue* argument = environment()->Top(); 7958 HValue* argument = environment()->Top();
7956 if (argument->IsConstant()) { 7959 if (argument->IsConstant()) {
7957 HConstant* constant_argument = HConstant::cast(argument); 7960 HConstant* constant_argument = HConstant::cast(argument);
7958 ASSERT(constant_argument->HasSmiValue()); 7961 ASSERT(constant_argument->HasSmiValue());
7959 int constant_array_size = constant_argument->Integer32Value(); 7962 int constant_array_size = constant_argument->Integer32Value();
7960 if (constant_array_size != 0) { 7963 if (constant_array_size != 0) {
7961 kind = GetHoleyElementsKind(kind); 7964 kind = GetHoleyElementsKind(kind);
7962 } 7965 }
7963 } 7966 }
7964 } 7967 }
7965 7968
7966 // Build the array. 7969 // Build the array.
7967 JSArrayBuilder array_builder(this, 7970 JSArrayBuilder array_builder(this,
7968 kind, 7971 kind,
7969 cell_instruction, 7972 site_instruction,
7970 constructor, 7973 constructor,
7971 DISABLE_ALLOCATION_SITES); 7974 DISABLE_ALLOCATION_SITES);
7972 HValue* new_object; 7975 HValue* new_object;
7973 if (argument_count == 0) { 7976 if (argument_count == 0) {
7974 new_object = array_builder.AllocateEmptyArray(); 7977 new_object = array_builder.AllocateEmptyArray();
7975 } else if (argument_count == 1) { 7978 } else if (argument_count == 1) {
7976 HValue* argument = environment()->Top(); 7979 HValue* argument = environment()->Top();
7977 new_object = BuildAllocateArrayFromLength(&array_builder, argument); 7980 new_object = BuildAllocateArrayFromLength(&array_builder, argument);
7978 } else { 7981 } else {
7979 HValue* length = Add<HConstant>(argument_count); 7982 HValue* length = Add<HConstant>(argument_count);
(...skipping 3023 matching lines...) Expand 10 before | Expand all | Expand 10 after
11003 if (ShouldProduceTraceOutput()) { 11006 if (ShouldProduceTraceOutput()) {
11004 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 11007 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
11005 } 11008 }
11006 11009
11007 #ifdef DEBUG 11010 #ifdef DEBUG
11008 graph_->Verify(false); // No full verify. 11011 graph_->Verify(false); // No full verify.
11009 #endif 11012 #endif
11010 } 11013 }
11011 11014
11012 } } // namespace v8::internal 11015 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698