Save zone memory in LEnvironment by using a bit vector.

We don't need to store the full representation for each value. Instead
a bit to indicate tagged/untagged is enough.
Review URL: http://codereview.chromium.org/9104042

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10572 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
fschneider@chromium.org 2012-01-31 17:19:19 +00:00
parent 86a0e828dc
commit b2ead52688

View File

@ -453,7 +453,7 @@ class LEnvironment: public ZoneObject {
parameter_count_(parameter_count), parameter_count_(parameter_count),
pc_offset_(-1), pc_offset_(-1),
values_(value_count), values_(value_count),
representations_(value_count), is_tagged_(value_count),
spilled_registers_(NULL), spilled_registers_(NULL),
spilled_double_registers_(NULL), spilled_double_registers_(NULL),
outer_(outer) { outer_(outer) {
@ -475,11 +475,13 @@ class LEnvironment: public ZoneObject {
void AddValue(LOperand* operand, Representation representation) { void AddValue(LOperand* operand, Representation representation) {
values_.Add(operand); values_.Add(operand);
representations_.Add(representation); if (representation.IsTagged()) {
is_tagged_.Add(values_.length() - 1);
}
} }
bool HasTaggedValueAt(int index) const { bool HasTaggedValueAt(int index) const {
return representations_[index].IsTagged(); return is_tagged_.Contains(index);
} }
void Register(int deoptimization_index, void Register(int deoptimization_index,
@ -514,7 +516,7 @@ class LEnvironment: public ZoneObject {
int parameter_count_; int parameter_count_;
int pc_offset_; int pc_offset_;
ZoneList<LOperand*> values_; ZoneList<LOperand*> values_;
ZoneList<Representation> representations_; BitVector is_tagged_;
// Allocation index indexed arrays of spill slot operands for registers // Allocation index indexed arrays of spill slot operands for registers
// that are also in spill slots at an OSR entry. NULL for environments // that are also in spill slots at an OSR entry. NULL for environments