Reviewers: Jakob,

Description:
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.

Please review this at http://codereview.chromium.org/9104042/

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/lithium.h


Index: src/lithium.h
===================================================================
--- src/lithium.h       (revision 10570)
+++ src/lithium.h       (working copy)
@@ -453,7 +453,7 @@
         parameter_count_(parameter_count),
         pc_offset_(-1),
         values_(value_count),
-        representations_(value_count),
+        is_tagged_(value_count),
         spilled_registers_(NULL),
         spilled_double_registers_(NULL),
         outer_(outer) {
@@ -475,11 +475,13 @@

   void AddValue(LOperand* operand, Representation representation) {
     values_.Add(operand);
-    representations_.Add(representation);
+    if (representation.IsTagged()) {
+      is_tagged_.Add(values_.length() - 1);
+    }
   }

   bool HasTaggedValueAt(int index) const {
-    return representations_[index].IsTagged();
+    return is_tagged_.Contains(index);
   }

   void Register(int deoptimization_index,
@@ -514,7 +516,7 @@
   int parameter_count_;
   int pc_offset_;
   ZoneList<LOperand*> values_;
-  ZoneList<Representation> representations_;
+  BitVector is_tagged_;

   // Allocation index indexed arrays of spill slot operands for registers
   // that are also in spill slots at an OSR entry.  NULL for environments


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to