Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index f34c3e016636571587632a00a64467def73a818e..9d16211f767a8f10b3e253526f273c7dce6e225e 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -410,24 +410,17 @@ Deoptimizer::Deoptimizer(Isolate* isolate, |
reinterpret_cast<intptr_t>(from), |
fp_to_sp_delta - (2 * kPointerSize)); |
} |
- // For COMPILED_STUBs called from builtins, the function pointer |
- // is a SMI indicating an internal frame. |
- if (function->IsSmi()) { |
- function = NULL; |
- } |
- if (function != NULL && function->IsOptimized()) { |
- function->shared()->increment_deopt_count(); |
- } |
+ function->shared()->increment_deopt_count(); |
// Find the optimized code. |
if (type == EAGER) { |
ASSERT(from == NULL); |
- compiled_code_ = function_->code(); |
+ optimized_code_ = function_->code(); |
if (FLAG_trace_deopt && FLAG_code_comments) { |
// Print instruction associated with this bailout. |
const char* last_comment = NULL; |
int mask = RelocInfo::ModeMask(RelocInfo::COMMENT) |
| RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY); |
- for (RelocIterator it(compiled_code_, mask); !it.done(); it.next()) { |
+ for (RelocIterator it(optimized_code_, mask); !it.done(); it.next()) { |
RelocInfo* info = it.rinfo(); |
if (info->rmode() == RelocInfo::COMMENT) { |
last_comment = reinterpret_cast<const char*>(info->data()); |
@@ -443,22 +436,18 @@ Deoptimizer::Deoptimizer(Isolate* isolate, |
} |
} |
} else if (type == LAZY) { |
- compiled_code_ = FindDeoptimizingCodeFromAddress(from); |
- if (compiled_code_ == NULL) { |
- compiled_code_ = |
- static_cast<Code*>(isolate->heap()->FindCodeObject(from)); |
- } |
- ASSERT(compiled_code_ != NULL); |
+ optimized_code_ = FindDeoptimizingCodeFromAddress(from); |
+ ASSERT(optimized_code_ != NULL); |
} else if (type == OSR) { |
// The function has already been optimized and we're transitioning |
// from the unoptimized shared version to the optimized one in the |
// function. The return address (from) points to unoptimized code. |
- compiled_code_ = function_->code(); |
- ASSERT(compiled_code_->kind() == Code::OPTIMIZED_FUNCTION); |
- ASSERT(!compiled_code_->contains(from)); |
+ optimized_code_ = function_->code(); |
+ ASSERT(optimized_code_->kind() == Code::OPTIMIZED_FUNCTION); |
+ ASSERT(!optimized_code_->contains(from)); |
} else if (type == DEBUGGER) { |
- compiled_code_ = optimized_code; |
- ASSERT(compiled_code_->contains(from)); |
+ optimized_code_ = optimized_code; |
+ ASSERT(optimized_code_->contains(from)); |
} |
ASSERT(HEAP->allow_allocation(false)); |
unsigned size = ComputeInputFrameSize(); |
@@ -584,7 +573,7 @@ void Deoptimizer::DoComputeOutputFrames() { |
// Determine basic deoptimization information. The optimized frame is |
// described by the input data. |
DeoptimizationInputData* input_data = |
- DeoptimizationInputData::cast(compiled_code_->deoptimization_data()); |
+ DeoptimizationInputData::cast(optimized_code_->deoptimization_data()); |
BailoutId node_id = input_data->AstId(bailout_id_); |
ByteArray* translations = input_data->TranslationByteArray(); |
unsigned translation_index = |
@@ -629,9 +618,6 @@ void Deoptimizer::DoComputeOutputFrames() { |
case Translation::SETTER_STUB_FRAME: |
DoComputeAccessorStubFrame(&iterator, i, true); |
break; |
- case Translation::COMPILED_STUB_FRAME: |
- DoCompiledStubFrame(&iterator, i); |
- break; |
case Translation::BEGIN: |
case Translation::REGISTER: |
case Translation::INT32_REGISTER: |
@@ -644,7 +630,6 @@ void Deoptimizer::DoComputeOutputFrames() { |
case Translation::LITERAL: |
case Translation::ARGUMENTS_OBJECT: |
case Translation::DUPLICATE: |
- default: |
UNREACHABLE(); |
break; |
} |
@@ -824,7 +809,6 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator, |
case Translation::CONSTRUCT_STUB_FRAME: |
case Translation::GETTER_STUB_FRAME: |
case Translation::SETTER_STUB_FRAME: |
- case Translation::COMPILED_STUB_FRAME: |
case Translation::DUPLICATE: |
UNREACHABLE(); |
return; |
@@ -1133,7 +1117,6 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, |
case Translation::CONSTRUCT_STUB_FRAME: |
case Translation::GETTER_STUB_FRAME: |
case Translation::SETTER_STUB_FRAME: |
- case Translation::COMPILED_STUB_FRAME: |
case Translation::DUPLICATE: |
UNREACHABLE(); // Malformed input. |
return false; |
@@ -1354,9 +1337,8 @@ unsigned Deoptimizer::ComputeInputFrameSize() const { |
// environment at the OSR entry. The code for that his built into |
// the DoComputeOsrOutputFrame function for now. |
} else { |
- unsigned stack_slots = compiled_code_->stack_slots(); |
- unsigned outgoing_size = compiled_code_->kind() == Code::COMPILED_STUB |
- ? 0 : ComputeOutgoingArgumentSize(); |
+ unsigned stack_slots = optimized_code_->stack_slots(); |
+ unsigned outgoing_size = ComputeOutgoingArgumentSize(); |
ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); |
} |
#endif |
@@ -1375,10 +1357,6 @@ unsigned Deoptimizer::ComputeFixedSize(JSFunction* function) const { |
unsigned Deoptimizer::ComputeIncomingArgumentSize(JSFunction* function) const { |
// The incoming arguments is the values for formal parameters and |
// the receiver. Every slot contains a pointer. |
- if (function->IsSmi()) { |
- ASSERT(Smi::cast(function) == Smi::FromInt(StackFrame::STUB)); |
- return 0; |
- } |
unsigned arguments = function->shared()->formal_parameter_count() + 1; |
return arguments * kPointerSize; |
} |
@@ -1386,7 +1364,7 @@ unsigned Deoptimizer::ComputeIncomingArgumentSize(JSFunction* function) const { |
unsigned Deoptimizer::ComputeOutgoingArgumentSize() const { |
DeoptimizationInputData* data = DeoptimizationInputData::cast( |
- compiled_code_->deoptimization_data()); |
+ optimized_code_->deoptimization_data()); |
unsigned height = data->ArgumentsStackHeight(bailout_id_)->value(); |
return height * kPointerSize; |
} |
@@ -1394,7 +1372,7 @@ unsigned Deoptimizer::ComputeOutgoingArgumentSize() const { |
Object* Deoptimizer::ComputeLiteral(int index) const { |
DeoptimizationInputData* data = DeoptimizationInputData::cast( |
- compiled_code_->deoptimization_data()); |
+ optimized_code_->deoptimization_data()); |
FixedArray* literals = data->LiteralArray(); |
return literals->get(index); |
} |
@@ -1425,6 +1403,8 @@ void Deoptimizer::EnsureCodeForDeoptimizationEntry(BailoutType type, |
// cause us to emit relocation information for the external |
// references. This is fine because the deoptimizer's code section |
// isn't meant to be serialized at all. |
+ ASSERT(!Serializer::enabled()); |
+ |
ASSERT(type == EAGER || type == LAZY); |
DeoptimizerData* data = Isolate::Current()->deoptimizer_data(); |
int entry_count = (type == EAGER) |
@@ -1439,6 +1419,7 @@ void Deoptimizer::EnsureCodeForDeoptimizationEntry(BailoutType type, |
GenerateDeoptimizationEntries(&masm, entry_count, type); |
CodeDesc desc; |
masm.GetCode(&desc); |
+ ASSERT(desc.reloc_size == 0); |
VirtualMemory* memory = type == EAGER |
? data->eager_deoptimization_entry_code_ |
@@ -1700,11 +1681,6 @@ void Translation::BeginJSFrame(BailoutId node_id, |
} |
-void Translation::BeginCompiledStubFrame() { |
- buffer_->Add(COMPILED_STUB_FRAME, zone()); |
-} |
- |
- |
void Translation::StoreRegister(Register reg) { |
buffer_->Add(REGISTER, zone()); |
buffer_->Add(reg.code(), zone()); |
@@ -1786,7 +1762,6 @@ int Translation::NumberOfOperandsFor(Opcode opcode) { |
case UINT32_STACK_SLOT: |
case DOUBLE_STACK_SLOT: |
case LITERAL: |
- case COMPILED_STUB_FRAME: |
return 1; |
case BEGIN: |
case ARGUMENTS_ADAPTOR_FRAME: |
@@ -1817,8 +1792,6 @@ const char* Translation::StringFor(Opcode opcode) { |
return "GETTER_STUB_FRAME"; |
case SETTER_STUB_FRAME: |
return "SETTER_STUB_FRAME"; |
- case COMPILED_STUB_FRAME: |
- return "COMPILED_STUB_FRAME"; |
case REGISTER: |
return "REGISTER"; |
case INT32_REGISTER: |
@@ -1926,10 +1899,6 @@ SlotRef SlotRef::ComputeSlotForNextArgument(TranslationIterator* iterator, |
int literal_index = iterator->Next(); |
return SlotRef(data->LiteralArray()->get(literal_index)); |
} |
- |
- case Translation::COMPILED_STUB_FRAME: |
- UNREACHABLE(); |
- break; |
} |
UNREACHABLE(); |