Revision: 7047
Author: [email protected]
Date: Thu Mar  3 05:50:16 2011
Log: Mark HChange that convert to int32 with truncation with the appropiate flag.

Before we would compute the flag by iterating over all uses. The truncating
flag is always determined at construction time since we already computed
the flag for all other instructions before inserting HChange instructions.


Review URL: http://codereview.chromium.org/6615012
http://code.google.com/p/v8/source/detail?r=7047

Modified:
 /branches/bleeding_edge/src/hydrogen-instructions.h
 /branches/bleeding_edge/src/hydrogen.cc
 /branches/bleeding_edge/src/hydrogen.h

=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.h Wed Feb 23 03:19:50 2011 +++ /branches/bleeding_edge/src/hydrogen-instructions.h Thu Mar 3 05:50:16 2011
@@ -940,13 +940,14 @@
  public:
   HChange(HValue* value,
           Representation from,
-          Representation to)
+          Representation to,
+          bool is_truncating)
       : HUnaryOperation(value), from_(from), to_(to) {
     ASSERT(!from.IsNone() && !to.IsNone());
     ASSERT(!from.Equals(to));
     set_representation(to);
     SetFlag(kUseGVN);
-
+    if (is_truncating) SetFlag(kTruncatingToInt32);
     if (from.IsInteger32() && to.IsTagged() && value->range() != NULL &&
         value->range()->IsInSmiRange()) {
       set_type(HType::Smi());
@@ -961,12 +962,7 @@
     return from_;
   }

-  bool CanTruncateToInt32() const {
-    for (int i = 0; i < uses()->length(); ++i) {
- if (!uses()->at(i)->CheckFlag(HValue::kTruncatingToInt32)) return false;
-    }
-    return true;
-  }
+  bool CanTruncateToInt32() const { return CheckFlag(kTruncatingToInt32); }

   virtual void PrintDataTo(StringStream* stream);

@@ -978,8 +974,7 @@
     if (!other->IsChange()) return false;
     HChange* change = HChange::cast(other);
     return value() == change->value()
-        && to().Equals(change->to())
-        && CanTruncateToInt32() == change->CanTruncateToInt32();
+        && to().Equals(change->to());
   }

  private:
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc     Thu Mar  3 05:02:56 2011
+++ /branches/bleeding_edge/src/hydrogen.cc     Thu Mar  3 05:50:16 2011
@@ -1663,8 +1663,7 @@

 void HGraph::InsertRepresentationChangeForUse(HValue* value,
                                               HValue* use,
-                                              Representation to,
-                                              bool is_truncating) {
+                                              Representation to) {
   // Insert the representation change right before its use. For phi-uses we
   // insert at the end of the corresponding predecessor.
   HInstruction* next = NULL;
@@ -1681,6 +1680,7 @@
   // information we treat constants like normal instructions and insert the
   // change instructions for them.
   HInstruction* new_value = NULL;
+  bool is_truncating = use->CheckFlag(HValue::kTruncatingToInt32);
   if (value->IsConstant()) {
     HConstant* constant = HConstant::cast(value);
// Try to create a new copy of the constant with the new representation.
@@ -1690,7 +1690,7 @@
   }

   if (new_value == NULL) {
-    new_value = new HChange(value, value->representation(), to);
+ new_value = new HChange(value, value->representation(), to, is_truncating);
   }

   new_value->InsertBefore(next);
@@ -1765,8 +1765,7 @@
   for (int i = 0; i < to_convert.length(); ++i) {
     HValue* use = to_convert[i];
     Representation r_to = to_convert_reps[i];
-    bool is_truncating = use->CheckFlag(HValue::kTruncatingToInt32);
-    InsertRepresentationChangeForUse(current, use, r_to, is_truncating);
+    InsertRepresentationChangeForUse(current, use, r_to);
   }

   if (current->uses()->is_empty()) {
=======================================
--- /branches/bleeding_edge/src/hydrogen.h      Wed Mar  2 06:09:59 2011
+++ /branches/bleeding_edge/src/hydrogen.h      Thu Mar  3 05:50:16 2011
@@ -302,8 +302,7 @@
   void PropagateMinusZeroChecks(HValue* value, BitVector* visited);
   void InsertRepresentationChangeForUse(HValue* value,
                                         HValue* use,
-                                        Representation to,
-                                        bool truncating);
+                                        Representation to);
   void InsertRepresentationChanges(HValue* current);
   void InferTypes(ZoneList<HValue*>* worklist);
   void InitializeInferredTypes(int from_inclusive, int to_inclusive);

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

Reply via email to