Chromium Code Reviews| Index: src/compiler.cc |
| diff --git a/src/compiler.cc b/src/compiler.cc |
| index b9e13c166172595b298ae227348f5a40a35dca20..163276997526034cecc34357200c7793814d075d 100644 |
| --- a/src/compiler.cc |
| +++ b/src/compiler.cc |
| @@ -35,6 +35,7 @@ |
| #include "cpu-profiler.h" |
| #include "debug.h" |
| #include "deoptimizer.h" |
| +#include "feedbackslots.h" |
| #include "full-codegen.h" |
| #include "gdb-jit.h" |
| #include "typing.h" |
| @@ -60,6 +61,7 @@ CompilationInfo::CompilationInfo(Handle<Script> script, |
| script_(script), |
| osr_ast_id_(BailoutId::None()), |
| parameter_count_(0), |
| + feedback_slots_(-1), |
|
danno
2014/01/28 08:27:17
Don't you want to use kInvalidFeedbackSlot here an
|
| this_has_uses_(true) { |
| Initialize(script->GetIsolate(), BASE, zone); |
| } |
| @@ -72,6 +74,7 @@ CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, |
| script_(Handle<Script>(Script::cast(shared_info->script()))), |
| osr_ast_id_(BailoutId::None()), |
| parameter_count_(0), |
| + feedback_slots_(-1), |
| this_has_uses_(true) { |
| Initialize(script_->GetIsolate(), BASE, zone); |
| } |
| @@ -86,6 +89,7 @@ CompilationInfo::CompilationInfo(Handle<JSFunction> closure, |
| context_(closure->context()), |
| osr_ast_id_(BailoutId::None()), |
| parameter_count_(0), |
| + feedback_slots_(-1), |
| this_has_uses_(true) { |
| Initialize(script_->GetIsolate(), BASE, zone); |
| } |
| @@ -98,6 +102,7 @@ CompilationInfo::CompilationInfo(HydrogenCodeStub* stub, |
| IsLazy::encode(true)), |
| osr_ast_id_(BailoutId::None()), |
| parameter_count_(0), |
| + feedback_slots_(0), // Hydrogen code stubs don't have feedback slots |
| this_has_uses_(true) { |
| Initialize(isolate, STUB, zone); |
| code_stub_ = stub; |
| @@ -365,6 +370,7 @@ OptimizedCompileJob::Status OptimizedCompileJob::CreateGraph() { |
| unoptimized.SetFunction(info()->function()); |
| unoptimized.SetScope(info()->scope()); |
| unoptimized.SetContext(info()->context()); |
| + FeedbackSlotAllocator::Run(&unoptimized); |
| if (should_recompile) unoptimized.EnableDeoptimizationSupport(); |
| bool succeeded = FullCodeGenerator::MakeCode(&unoptimized); |
| if (should_recompile) { |
| @@ -613,6 +619,8 @@ static bool CompileUnoptimizedCode(CompilationInfo* info) { |
| if (!Rewriter::Rewrite(info)) return false; |
| if (!Scope::Analyze(info)) return false; |
| ASSERT(info->scope() != NULL); |
| + if (!FeedbackSlotAllocator::Run(info)) return false; |
| + ASSERT(info->feedback_slots() >= 0); |
| if (!FullCodeGenerator::MakeCode(info)) { |
| Isolate* isolate = info->isolate(); |
| @@ -1007,7 +1015,8 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
| Handle<Code> code = isolate->builtins()->CompileUnoptimized(); |
| info.SetCode(code); |
| scope_info = Handle<ScopeInfo>(ScopeInfo::Empty(isolate)); |
| - } else if (FullCodeGenerator::MakeCode(&info)) { |
| + } else if (FeedbackSlotAllocator::Run(&info) && |
| + FullCodeGenerator::MakeCode(&info)) { |
| ASSERT(!info.code().is_null()); |
| scope_info = ScopeInfo::Create(info.scope(), info.zone()); |
| } else { |
| @@ -1084,6 +1093,8 @@ static bool CompileOptimizedPrologue(CompilationInfo* info) { |
| if (!Rewriter::Rewrite(info)) return false; |
| if (!Scope::Analyze(info)) return false; |
| ASSERT(info->scope() != NULL); |
| + if (!FeedbackSlotAllocator::Run(info)) return false; |
| + ASSERT(info->feedback_slots() >= 0); |
| return true; |
| } |