Revision: 7095
Author: [email protected]
Date: Wed Mar 9 02:02:47 2011
Log: Fix memory leaks on x64
This change uses ZoneObject as base class for our jumptable entry. In
addition this change refactors the JumpTableEntry a bit.
Review URL: http://codereview.chromium.org/6647012
http://code.google.com/p/v8/source/detail?r=7095
Modified:
/branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
/branches/bleeding_edge/src/x64/lithium-codegen-x64.h
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Tue Mar 8
03:21:38 2011
+++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Wed Mar 9
02:02:47 2011
@@ -258,9 +258,9 @@
bool LCodeGen::GenerateJumpTable() {
for (int i = 0; i < jump_table_.length(); i++) {
- JumpTableEntry* info = jump_table_[i];
- __ bind(&(info->label_));
- __ Jump(info->address_, RelocInfo::RUNTIME_ENTRY);
+ JumpTableEntry* info = &jump_table_[i];
+ __ bind(&jump_table_[i].label);
+ __ Jump(info->address, RelocInfo::RUNTIME_ENTRY);
}
return !is_aborted();
}
@@ -538,17 +538,13 @@
if (cc == no_condition) {
__ Jump(entry, RelocInfo::RUNTIME_ENTRY);
} else {
- JumpTableEntry* jump_info = NULL;
// We often have several deopts to the same entry, reuse the last
// jump entry if this is the case.
- if (jump_table_.length() > 0 &&
- jump_table_[jump_table_.length() - 1]->address_ == entry) {
- jump_info = jump_table_[jump_table_.length() - 1];
- } else {
- jump_info = new JumpTableEntry(entry);
- jump_table_.Add(jump_info);
- }
- __ j(cc, &jump_info->label_);
+ if (jump_table_.is_empty() ||
+ jump_table_.last().address != entry) {
+ jump_table_.Add(entry);
+ }
+ __ j(cc, &jump_table_.last().label);
}
}
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.h Tue Mar 8
03:21:38 2011
+++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.h Wed Mar 9
02:02:47 2011
@@ -241,11 +241,11 @@
void EmitPushConstantOperand(LOperand* operand);
struct JumpTableEntry {
- inline JumpTableEntry(Address address)
- : label_(),
- address_(address) { }
- Label label_;
- Address address_;
+ inline JumpTableEntry(Address entry)
+ : label(),
+ address(entry) { }
+ Label label;
+ Address address;
};
LChunk* const chunk_;
@@ -256,7 +256,7 @@
int current_instruction_;
const ZoneList<LInstruction*>* instructions_;
ZoneList<LEnvironment*> deoptimizations_;
- ZoneList<JumpTableEntry*> jump_table_;
+ ZoneList<JumpTableEntry> jump_table_;
ZoneList<Handle<Object> > deoptimization_literals_;
int inlined_function_count_;
Scope* const scope_;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev