From e5cc31e444992fb2be8a9026f595f596314d0c6b Mon Sep 17 00:00:00 2001 From: "fschneider@chromium.org" Date: Wed, 15 Jun 2011 09:20:24 +0000 Subject: [PATCH] Generate better branch code for instanceof-predicates. Review URL: http://codereview.chromium.org/7168013 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8290 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen-instructions.cc | 15 +++++++++++++++ src/hydrogen-instructions.h | 10 ++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index ce21756911..18e3b4532d 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -1579,6 +1579,21 @@ HType HUnaryPredicate::CalculateInferredType() { } +HType HInstanceOf::CalculateInferredType() { + return HType::Boolean(); +} + + +HType HDeleteProperty::CalculateInferredType() { + return HType::Boolean(); +} + + +HType HInstanceOfKnownGlobal::CalculateInferredType() { + return HType::Boolean(); +} + + HType HBitwiseBinaryOperation::CalculateInferredType() { return HType::TaggedNumber(); } diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index 21994839d1..00e9bd63ef 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -2789,14 +2789,12 @@ class HInstanceOf: public HTemplateInstruction<3> { HValue* left() { return OperandAt(1); } HValue* right() { return OperandAt(2); } - virtual bool EmitAtUses() { - return !HasSideEffects() && !HasMultipleUses(); - } - virtual Representation RequiredInputRepresentation(int index) const { return Representation::Tagged(); } + virtual HType CalculateInferredType(); + virtual void PrintDataTo(StringStream* stream); DECLARE_CONCRETE_INSTRUCTION(InstanceOf) @@ -2817,6 +2815,8 @@ class HInstanceOfKnownGlobal: public HUnaryOperation { return Representation::Tagged(); } + virtual HType CalculateInferredType(); + DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal) private: @@ -4005,6 +4005,8 @@ class HDeleteProperty: public HBinaryOperation { return Representation::Tagged(); } + virtual HType CalculateInferredType(); + DECLARE_CONCRETE_INSTRUCTION(DeleteProperty) HValue* object() { return left(); }