Index: runtime/vm/deopt_instructions.cc |
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc |
index fa90ec270e3a57f4b3f0095a4b8e73b4b759ac60..0367a054db17b58a3a11596051ac90b638e29cbd 100644 |
--- a/runtime/vm/deopt_instructions.cc |
+++ b/runtime/vm/deopt_instructions.cc |
@@ -24,7 +24,6 @@ DEFINE_FLAG(bool, |
DECLARE_FLAG(bool, trace_deoptimization); |
DECLARE_FLAG(bool, trace_deoptimization_verbose); |
- |
DeoptContext::DeoptContext(const StackFrame* frame, |
const Code& code, |
DestFrameOptions dest_options, |
@@ -132,7 +131,6 @@ DeoptContext::DeoptContext(const StackFrame* frame, |
} |
} |
- |
DeoptContext::~DeoptContext() { |
// Delete memory for source frame and registers. |
if (source_frame_is_allocated_) { |
@@ -183,7 +181,6 @@ DeoptContext::~DeoptContext() { |
#endif // !PRODUCT |
} |
- |
void DeoptContext::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
visitor->VisitPointer(reinterpret_cast<RawObject**>(&object_pool_)); |
visitor->VisitPointer(reinterpret_cast<RawObject**>(&deopt_info_)); |
@@ -198,7 +195,6 @@ void DeoptContext::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
} |
} |
- |
intptr_t DeoptContext::DestStackAdjustment() const { |
return dest_frame_size_ - kDartFrameFixedSize - num_args_ |
#if !defined(TARGET_ARCH_DBC) |
@@ -207,7 +203,6 @@ intptr_t DeoptContext::DestStackAdjustment() const { |
- kParamEndSlotFromFp; |
} |
- |
intptr_t DeoptContext::GetSourceFp() const { |
#if !defined(TARGET_ARCH_DBC) |
return source_frame_[source_frame_size_ - 1 - num_args_ - |
@@ -218,7 +213,6 @@ intptr_t DeoptContext::GetSourceFp() const { |
#endif |
} |
- |
intptr_t DeoptContext::GetSourcePp() const { |
#if !defined(TARGET_ARCH_DBC) |
return source_frame_[source_frame_size_ - 1 - num_args_ - |
@@ -230,7 +224,6 @@ intptr_t DeoptContext::GetSourcePp() const { |
#endif |
} |
- |
intptr_t DeoptContext::GetSourcePc() const { |
#if !defined(TARGET_ARCH_DBC) |
return source_frame_[source_frame_size_ - num_args_ + kSavedPcSlotFromSp]; |
@@ -240,17 +233,14 @@ intptr_t DeoptContext::GetSourcePc() const { |
#endif |
} |
- |
intptr_t DeoptContext::GetCallerFp() const { |
return caller_fp_; |
} |
- |
void DeoptContext::SetCallerFp(intptr_t caller_fp) { |
caller_fp_ = caller_fp; |
} |
- |
static bool IsObjectInstruction(DeoptInstr::Kind kind) { |
switch (kind) { |
case DeoptInstr::kConstant: |
@@ -284,7 +274,6 @@ static bool IsObjectInstruction(DeoptInstr::Kind kind) { |
return false; |
} |
- |
void DeoptContext::FillDestFrame() { |
const Code& code = Code::Handle(code_); |
const TypedData& deopt_info = TypedData::Handle(deopt_info_); |
@@ -344,7 +333,6 @@ void DeoptContext::FillDestFrame() { |
} |
} |
- |
intptr_t* DeoptContext::CatchEntryState(intptr_t num_vars) { |
const Code& code = Code::Handle(code_); |
const TypedData& deopt_info = TypedData::Handle(deopt_info_); |
@@ -380,7 +368,6 @@ intptr_t* DeoptContext::CatchEntryState(intptr_t num_vars) { |
return state; |
} |
- |
static void FillDeferredSlots(DeoptContext* deopt_context, |
DeferredSlot** slot_list) { |
DeferredSlot* slot = *slot_list; |
@@ -396,7 +383,6 @@ static void FillDeferredSlots(DeoptContext* deopt_context, |
} |
} |
- |
// Materializes all deferred objects. Returns the total number of |
// artificial arguments used during deoptimization. |
intptr_t DeoptContext::MaterializeDeferredObjects() { |
@@ -438,7 +424,6 @@ intptr_t DeoptContext::MaterializeDeferredObjects() { |
return deopt_arg_count; |
} |
- |
RawArray* DeoptContext::DestFrameAsArray() { |
ASSERT(dest_frame_ != NULL && dest_frame_is_allocated_); |
const Array& dest_array = Array::Handle(zone(), Array::New(dest_frame_size_)); |
@@ -450,7 +435,6 @@ RawArray* DeoptContext::DestFrameAsArray() { |
return dest_array.raw(); |
} |
- |
// Deoptimization instruction creating return address using function and |
// deopt-id stored at 'object_table_index'. |
class DeoptRetAddressInstr : public DeoptInstr { |
@@ -499,7 +483,6 @@ class DeoptRetAddressInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptRetAddressInstr); |
}; |
- |
// Deoptimization instruction moving a constant stored at 'object_table_index'. |
class DeoptConstantInstr : public DeoptInstr { |
public: |
@@ -533,7 +516,6 @@ class DeoptConstantInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptConstantInstr); |
}; |
- |
// Deoptimization instruction moving value from optimized frame at |
// 'source_index' to specified slots in the unoptimized frame. |
// 'source_index' represents the slot index of the frame (0 being |
@@ -567,7 +549,6 @@ class DeoptWordInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptWordInstr); |
}; |
- |
class DeoptIntegerInstrBase : public DeoptInstr { |
public: |
DeoptIntegerInstrBase() {} |
@@ -589,7 +570,6 @@ class DeoptIntegerInstrBase : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptIntegerInstrBase); |
}; |
- |
class DeoptMintPairInstr : public DeoptIntegerInstrBase { |
public: |
explicit DeoptMintPairInstr(intptr_t source_index) |
@@ -628,7 +608,6 @@ class DeoptMintPairInstr : public DeoptIntegerInstrBase { |
DISALLOW_COPY_AND_ASSIGN(DeoptMintPairInstr); |
}; |
- |
template <DeoptInstr::Kind K, typename T> |
class DeoptIntInstr : public DeoptIntegerInstrBase { |
public: |
@@ -653,12 +632,10 @@ class DeoptIntInstr : public DeoptIntegerInstrBase { |
DISALLOW_COPY_AND_ASSIGN(DeoptIntInstr); |
}; |
- |
typedef DeoptIntInstr<DeoptInstr::kUint32, uint32_t> DeoptUint32Instr; |
typedef DeoptIntInstr<DeoptInstr::kInt32, int32_t> DeoptInt32Instr; |
typedef DeoptIntInstr<DeoptInstr::kMint, int64_t> DeoptMintInstr; |
- |
template <DeoptInstr::Kind K, typename Type, typename RawObjectType> |
class DeoptFpuInstr : public DeoptInstr { |
public: |
@@ -740,7 +717,6 @@ class DeoptPcMarkerInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptPcMarkerInstr); |
}; |
- |
// Deoptimization instruction creating a pool pointer for the code of |
// function at 'object_table_index'. |
class DeoptPpInstr : public DeoptInstr { |
@@ -770,7 +746,6 @@ class DeoptPpInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptPpInstr); |
}; |
- |
// Deoptimization instruction copying the caller saved FP from optimized frame. |
class DeoptCallerFpInstr : public DeoptInstr { |
public: |
@@ -789,7 +764,6 @@ class DeoptCallerFpInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptCallerFpInstr); |
}; |
- |
// Deoptimization instruction copying the caller saved PP from optimized frame. |
class DeoptCallerPpInstr : public DeoptInstr { |
public: |
@@ -806,7 +780,6 @@ class DeoptCallerPpInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptCallerPpInstr); |
}; |
- |
// Deoptimization instruction copying the caller return address from optimized |
// frame. |
class DeoptCallerPcInstr : public DeoptInstr { |
@@ -824,7 +797,6 @@ class DeoptCallerPcInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptCallerPcInstr); |
}; |
- |
// Write reference to a materialized object with the given index into the |
// stack slot. |
class DeoptMaterializedObjectRefInstr : public DeoptInstr { |
@@ -851,7 +823,6 @@ class DeoptMaterializedObjectRefInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptMaterializedObjectRefInstr); |
}; |
- |
// Materialize object with the given number of fields. |
// Arguments for materialization (class and field-value pairs) are pushed |
// to the expression stack of the bottom-most frame. |
@@ -880,7 +851,6 @@ class DeoptMaterializeObjectInstr : public DeoptInstr { |
DISALLOW_COPY_AND_ASSIGN(DeoptMaterializeObjectInstr); |
}; |
- |
uword DeoptInstr::GetRetAddress(DeoptInstr* instr, |
const ObjectPool& object_table, |
Code* code) { |
@@ -909,7 +879,6 @@ uword DeoptInstr::GetRetAddress(DeoptInstr* instr, |
return res; |
} |
- |
DeoptInstr* DeoptInstr::Create(intptr_t kind_as_int, intptr_t source_index) { |
Kind kind = static_cast<Kind>(kind_as_int); |
switch (kind) { |
@@ -954,7 +923,6 @@ DeoptInstr* DeoptInstr::Create(intptr_t kind_as_int, intptr_t source_index) { |
return NULL; |
} |
- |
const char* DeoptInstr::KindToCString(Kind kind) { |
switch (kind) { |
case kWord: |
@@ -997,7 +965,6 @@ const char* DeoptInstr::KindToCString(Kind kind) { |
return NULL; |
} |
- |
class DeoptInfoBuilder::TrieNode : public ZoneAllocated { |
public: |
// Construct the root node representing the implicit "shared" terminator |
@@ -1029,7 +996,6 @@ class DeoptInfoBuilder::TrieNode : public ZoneAllocated { |
GrowableArray<TrieNode*> children_; |
}; |
- |
DeoptInfoBuilder::DeoptInfoBuilder(Zone* zone, |
const intptr_t num_args, |
Assembler* assembler) |
@@ -1042,12 +1008,10 @@ DeoptInfoBuilder::DeoptInfoBuilder(Zone* zone, |
frame_start_(-1), |
materializations_() {} |
- |
intptr_t DeoptInfoBuilder::FindOrAddObjectInTable(const Object& obj) const { |
return assembler_->object_pool_wrapper().FindObject(obj); |
} |
- |
intptr_t DeoptInfoBuilder::CalculateStackIndex( |
const Location& source_loc) const { |
return source_loc.stack_index() < 0 |
@@ -1055,7 +1019,6 @@ intptr_t DeoptInfoBuilder::CalculateStackIndex( |
: source_loc.stack_index() + num_args_ + kDartFrameFixedSize; |
} |
- |
CpuRegisterSource DeoptInfoBuilder::ToCpuRegisterSource(const Location& loc) { |
if (loc.IsRegister()) { |
return CpuRegisterSource(CpuRegisterSource::kRegister, loc.reg()); |
@@ -1066,7 +1029,6 @@ CpuRegisterSource DeoptInfoBuilder::ToCpuRegisterSource(const Location& loc) { |
} |
} |
- |
FpuRegisterSource DeoptInfoBuilder::ToFpuRegisterSource( |
const Location& loc, |
Location::Kind stack_slot_kind) { |
@@ -1094,7 +1056,6 @@ void DeoptInfoBuilder::AddReturnAddress(const Function& function, |
DeoptRetAddressInstr(object_table_index, deopt_id)); |
} |
- |
void DeoptInfoBuilder::AddPcMarker(const Function& function, |
intptr_t dest_index) { |
intptr_t object_table_index = FindOrAddObjectInTable(function); |
@@ -1102,14 +1063,12 @@ void DeoptInfoBuilder::AddPcMarker(const Function& function, |
instructions_.Add(new (zone()) DeoptPcMarkerInstr(object_table_index)); |
} |
- |
void DeoptInfoBuilder::AddPp(const Function& function, intptr_t dest_index) { |
intptr_t object_table_index = FindOrAddObjectInTable(function); |
ASSERT(dest_index == FrameSize()); |
instructions_.Add(new (zone()) DeoptPpInstr(object_table_index)); |
} |
- |
void DeoptInfoBuilder::AddCopy(Value* value, |
const Location& source_loc, |
const intptr_t dest_index) { |
@@ -1183,32 +1142,27 @@ void DeoptInfoBuilder::AddCopy(Value* value, |
instructions_.Add(deopt_instr); |
} |
- |
void DeoptInfoBuilder::AddCallerFp(intptr_t dest_index) { |
ASSERT(dest_index == FrameSize()); |
instructions_.Add(new (zone()) DeoptCallerFpInstr()); |
} |
- |
void DeoptInfoBuilder::AddCallerPp(intptr_t dest_index) { |
ASSERT(dest_index == FrameSize()); |
instructions_.Add(new (zone()) DeoptCallerPpInstr()); |
} |
- |
void DeoptInfoBuilder::AddCallerPc(intptr_t dest_index) { |
ASSERT(dest_index == FrameSize()); |
instructions_.Add(new (zone()) DeoptCallerPcInstr()); |
} |
- |
void DeoptInfoBuilder::AddConstant(const Object& obj, intptr_t dest_index) { |
ASSERT(dest_index == FrameSize()); |
intptr_t object_table_index = FindOrAddObjectInTable(obj); |
instructions_.Add(new (zone()) DeoptConstantInstr(object_table_index)); |
} |
- |
void DeoptInfoBuilder::AddMaterialization(MaterializeObjectInstr* mat) { |
const intptr_t index = FindMaterialization(mat); |
if (index >= 0) { |
@@ -1237,7 +1191,6 @@ void DeoptInfoBuilder::AddMaterialization(MaterializeObjectInstr* mat) { |
} |
} |
- |
intptr_t DeoptInfoBuilder::EmitMaterializationArguments(intptr_t dest_index) { |
ASSERT(dest_index == kDartFrameFixedSize); |
for (intptr_t i = 0; i < materializations_.length(); i++) { |
@@ -1257,7 +1210,6 @@ intptr_t DeoptInfoBuilder::EmitMaterializationArguments(intptr_t dest_index) { |
return dest_index; |
} |
- |
intptr_t DeoptInfoBuilder::FindMaterialization( |
MaterializeObjectInstr* mat) const { |
for (intptr_t i = 0; i < materializations_.length(); i++) { |
@@ -1268,14 +1220,12 @@ intptr_t DeoptInfoBuilder::FindMaterialization( |
return -1; |
} |
- |
static uint8_t* ZoneReAlloc(uint8_t* ptr, |
intptr_t old_size, |
intptr_t new_size) { |
return Thread::Current()->zone()->Realloc<uint8_t>(ptr, old_size, new_size); |
} |
- |
RawTypedData* DeoptInfoBuilder::CreateDeoptInfo(const Array& deopt_table) { |
intptr_t length = instructions_.length(); |
@@ -1292,7 +1242,6 @@ RawTypedData* DeoptInfoBuilder::CreateDeoptInfo(const Array& deopt_table) { |
} |
} |
- |
// Allocate space for the translation. If the shared suffix is longer |
// than one instruction, we replace it with a single suffix instruction. |
const bool use_suffix = suffix_length > 1; |
@@ -1344,7 +1293,6 @@ RawTypedData* DeoptInfoBuilder::CreateDeoptInfo(const Array& deopt_table) { |
return deopt_info.raw(); |
} |
- |
intptr_t DeoptTable::SizeFor(intptr_t length) { |
return length * kEntrySize; |
} |
@@ -1361,13 +1309,11 @@ void DeoptTable::SetEntry(const Array& table, |
table.SetAt(i + 2, reason); |
} |
- |
intptr_t DeoptTable::GetLength(const Array& table) { |
ASSERT((table.Length() % kEntrySize) == 0); |
return table.Length() / kEntrySize; |
} |
- |
void DeoptTable::GetEntry(const Array& table, |
intptr_t index, |
Smi* offset, |