| Index: src/full-codegen.cc
|
| diff --git a/src/full-codegen.cc b/src/full-codegen.cc
|
| index 61a6eac6349a73896b88b5676b8660552affb151..bf41935dc8e3e8bd90ea591e304acbcd3458b322 100644
|
| --- a/src/full-codegen.cc
|
| +++ b/src/full-codegen.cc
|
| @@ -333,7 +333,7 @@ bool FullCodeGenerator::MakeCode(CompilationInfo* info) {
|
| !info->function()->dont_optimize() &&
|
| info->function()->scope()->AllowsLazyCompilation());
|
| cgen.PopulateDeoptimizationData(code);
|
| - cgen.PopulateTypeFeedbackInfo(code);
|
| + cgen.PopulateTypeFeedbackInfo(code, info->feedback_vector());
|
| code->set_has_deoptimization_support(info->HasDeoptimizationSupport());
|
| code->set_handler_table(*cgen.handler_table());
|
| code->set_compiled_optimizable(info->IsOptimizable());
|
| @@ -367,11 +367,22 @@ unsigned FullCodeGenerator::EmitBackEdgeTable() {
|
|
|
| void FullCodeGenerator::EnsureSlotContainsAllocationSite(
|
| FeedbackVectorSlot slot) {
|
| - Handle<FixedArray> vector = FeedbackVector();
|
| - if (!vector->get(slot.ToInt())->IsAllocationSite()) {
|
| + Handle<TypeFeedbackVector> vector = FeedbackVector();
|
| + if (!vector->Get(slot)->IsAllocationSite()) {
|
| Handle<AllocationSite> allocation_site =
|
| isolate()->factory()->NewAllocationSite();
|
| - vector->set(slot.ToInt(), *allocation_site);
|
| + vector->Set(slot, *allocation_site);
|
| + }
|
| +}
|
| +
|
| +
|
| +void FullCodeGenerator::EnsureSlotContainsAllocationSite(
|
| + FeedbackVectorICSlot slot) {
|
| + Handle<TypeFeedbackVector> vector = FeedbackVector();
|
| + if (!vector->Get(slot)->IsAllocationSite()) {
|
| + Handle<AllocationSite> allocation_site =
|
| + isolate()->factory()->NewAllocationSite();
|
| + vector->Set(slot, *allocation_site);
|
| }
|
| }
|
|
|
| @@ -391,8 +402,10 @@ void FullCodeGenerator::PopulateDeoptimizationData(Handle<Code> code) {
|
| }
|
|
|
|
|
| -void FullCodeGenerator::PopulateTypeFeedbackInfo(Handle<Code> code) {
|
| - Handle<TypeFeedbackInfo> info = isolate()->factory()->NewTypeFeedbackInfo();
|
| +void FullCodeGenerator::PopulateTypeFeedbackInfo(
|
| + Handle<Code> code, Handle<TypeFeedbackVector> vector) {
|
| + Handle<TypeFeedbackInfo> info =
|
| + isolate()->factory()->NewTypeFeedbackInfo(vector);
|
| info->set_ic_total_count(ic_total_count_);
|
| DCHECK(!isolate()->heap()->InNewSpace(*info));
|
| code->set_type_feedback_info(*info);
|
|
|