Reviewers: William Hesse,

Description:
Clean up code for type feedback a bit.

Remove unused functions and parameters and remove the parts of the
code that mention the old GenericBinaryOpStub. It is not used together
with Crankshaft and replaced with TypeRecordingBinaryOpStub.



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

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

Affected files:
  M     src/ast.h
  M     src/ast.cc
  M     src/hydrogen.cc
  M     src/type-info.h
  M     src/type-info.cc


Index: src/ast.cc
===================================================================
--- src/ast.cc  (revision 6128)
+++ src/ast.cc  (working copy)
@@ -649,19 +649,11 @@
 }


-void BinaryOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  TypeInfo left = oracle->BinaryType(this, TypeFeedbackOracle::LEFT);
-  TypeInfo right = oracle->BinaryType(this, TypeFeedbackOracle::RIGHT);
-  is_smi_only_ = left.IsSmi() && right.IsSmi();
-}
-
-
 void CompareOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  TypeInfo left = oracle->CompareType(this, TypeFeedbackOracle::LEFT);
-  TypeInfo right = oracle->CompareType(this, TypeFeedbackOracle::RIGHT);
-  if (left.IsSmi() && right.IsSmi()) {
+  TypeInfo info = oracle->CompareType(this);
+  if (info.IsSmi()) {
     compare_type_ = SMI_ONLY;
-  } else if (left.IsNonPrimitive() && right.IsNonPrimitive()) {
+  } else if (info.IsNonPrimitive()) {
     compare_type_ = OBJECT_ONLY;
   } else {
     ASSERT(compare_type_ == NONE);
Index: src/ast.h
===================================================================
--- src/ast.h   (revision 6128)
+++ src/ast.h   (working copy)
@@ -1392,7 +1392,7 @@
                   Expression* left,
                   Expression* right,
                   int pos)
- : op_(op), left_(left), right_(right), pos_(pos), is_smi_only_(false) {
+      : op_(op), left_(left), right_(right), pos_(pos) {
     ASSERT(Token::IsBinaryOp(op));
     right_id_ = (op == Token::AND || op == Token::OR)
         ? static_cast<int>(GetNextId())
@@ -1413,10 +1413,6 @@
   Expression* right() const { return right_; }
   int position() const { return pos_; }

-  // Type feedback information.
-  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
-  bool IsSmiOnly() const { return is_smi_only_; }
-
   // Bailout support.
   int RightId() const { return right_id_; }

@@ -1425,7 +1421,6 @@
   Expression* left_;
   Expression* right_;
   int pos_;
-  bool is_smi_only_;
   // The short-circuit logical operations have an AST ID for their
   // right-hand subexpression.
   int right_id_;
Index: src/hydrogen.cc
===================================================================
--- src/hydrogen.cc     (revision 6128)
+++ src/hydrogen.cc     (working copy)
@@ -3355,7 +3355,6 @@
   // We have a second position recorded in the FullCodeGenerator to have
   // type feedback for the binary operation.
   BinaryOperation* operation = expr->binary_operation();
-  operation->RecordTypeFeedback(oracle());

   if (var != NULL) {
     if (!var->is_global() && !var->IsStackAllocated()) {
@@ -4714,7 +4713,7 @@
     default:
       UNREACHABLE();
   }
-  TypeInfo info = oracle()->BinaryType(expr, TypeFeedbackOracle::RESULT);
+  TypeInfo info = oracle()->BinaryType(expr);
   // If we hit an uninitialized binary op stub we will get type info
   // for a smi operation. If one of the operands is a constant string
   // do not generate code assuming it is a smi operation.
@@ -4859,7 +4858,7 @@
   HValue* left = Pop();
   Token::Value op = expr->op();

-  TypeInfo info = oracle()->CompareType(expr, TypeFeedbackOracle::RESULT);
+  TypeInfo info = oracle()->CompareType(expr);
   HInstruction* instr = NULL;
   if (op == Token::INSTANCEOF) {
     instr = new HInstanceOf(left, right);
Index: src/type-info.cc
===================================================================
--- src/type-info.cc    (revision 6128)
+++ src/type-info.cc    (working copy)
@@ -132,7 +132,7 @@
 }


-TypeInfo TypeFeedbackOracle::CompareType(CompareOperation* expr, Side side) {
+TypeInfo TypeFeedbackOracle::CompareType(CompareOperation* expr) {
   Handle<Object> object = GetElement(map_, expr->position());
   TypeInfo unknown = TypeInfo::Unknown();
   if (!object->IsCode()) return unknown;
@@ -159,27 +159,12 @@
 }


-TypeInfo TypeFeedbackOracle::BinaryType(BinaryOperation* expr, Side side) {
+TypeInfo TypeFeedbackOracle::BinaryType(BinaryOperation* expr) {
   Handle<Object> object = GetElement(map_, expr->position());
   TypeInfo unknown = TypeInfo::Unknown();
   if (!object->IsCode()) return unknown;
   Handle<Code> code = Handle<Code>::cast(object);
-  if (code->is_binary_op_stub()) {
-    BinaryOpIC::TypeInfo type = static_cast<BinaryOpIC::TypeInfo>(
-        code->binary_op_type());
-    switch (type) {
-      case BinaryOpIC::UNINIT_OR_SMI:
-        return TypeInfo::Smi();
-      case BinaryOpIC::DEFAULT:
-        return (expr->op() == Token::DIV || expr->op() == Token::MUL)
-            ? TypeInfo::Double()
-            : TypeInfo::Integer32();
-      case BinaryOpIC::HEAP_NUMBERS:
-        return TypeInfo::Double();
-      default:
-        return unknown;
-    }
-  } else if (code->is_type_recording_binary_op_stub()) {
+  if (code->is_type_recording_binary_op_stub()) {
     TRBinaryOpIC::TypeInfo type = static_cast<TRBinaryOpIC::TypeInfo>(
         code->type_recording_binary_op_type());
TRBinaryOpIC::TypeInfo result_type = static_cast<TRBinaryOpIC::TypeInfo>(
@@ -291,8 +276,7 @@
     int position = source_positions[i];
     InlineCacheState state = target->ic_state();
     Code::Kind kind = target->kind();
-    if (kind == Code::BINARY_OP_IC ||
-        kind == Code::TYPE_RECORDING_BINARY_OP_IC ||
+    if (kind == Code::TYPE_RECORDING_BINARY_OP_IC ||
         kind == Code::COMPARE_IC) {
       // TODO(kasperl): Avoid having multiple ICs with the same
       // position by making sure that we have position information
@@ -332,19 +316,17 @@
       if (target->is_inline_cache_stub()) {
         InlineCacheState state = target->ic_state();
         Code::Kind kind = target->kind();
-        if (kind == Code::BINARY_OP_IC) {
-          if (target->binary_op_type() == BinaryOpIC::GENERIC) continue;
-        } else if (kind == Code::TYPE_RECORDING_BINARY_OP_IC) {
-          if (target->type_recording_binary_op_type() ==
-              TRBinaryOpIC::GENERIC) {
-            continue;
-          }
-        } else if (kind == Code::COMPARE_IC) {
-          if (target->compare_state() == CompareIC::GENERIC) continue;
-        } else {
-          if (kind == Code::CALL_IC && state == MONOMORPHIC &&
-              target->check_type() != RECEIVER_MAP_CHECK) continue;
-          if (state != MONOMORPHIC && state != MEGAMORPHIC) continue;
+        if (kind == Code::TYPE_RECORDING_BINARY_OP_IC &&
+ target->type_recording_binary_op_type() == TRBinaryOpIC::GENERIC) {
+          continue;
+        } else if (kind == Code::COMPARE_IC &&
+                   target->compare_state() == CompareIC::GENERIC) {
+          continue;
+        } else if (kind == Code::CALL_IC && state == MONOMORPHIC &&
+                   target->check_type() != RECEIVER_MAP_CHECK) {
+          continue;
+        } else if (state != MONOMORPHIC && state != MEGAMORPHIC) {
+          continue;
         }
         code_positions->Add(
             static_cast<int>(info->pc() - code->instruction_start()));
Index: src/type-info.h
===================================================================
--- src/type-info.h     (revision 6128)
+++ src/type-info.h     (working copy)
@@ -230,12 +230,6 @@

 class TypeFeedbackOracle BASE_EMBEDDED {
  public:
-  enum Side {
-    LEFT,
-    RIGHT,
-    RESULT
-  };
-
   explicit TypeFeedbackOracle(Handle<Code> code);

   bool LoadIsMonomorphic(Property* expr);
@@ -253,8 +247,8 @@
   bool LoadIsBuiltin(Property* expr, Builtins::Name id);

   // Get type information for arithmetic operations and compares.
-  TypeInfo BinaryType(BinaryOperation* expr, Side side);
-  TypeInfo CompareType(CompareOperation* expr, Side side);
+  TypeInfo BinaryType(BinaryOperation* expr);
+  TypeInfo CompareType(CompareOperation* expr);
   TypeInfo SwitchType(CaseClause* clause);

  private:


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

Reply via email to