From e210d8325ffc9cc84dbeb1354d46cf5d0fa61ffa Mon Sep 17 00:00:00 2001 From: "titzer@chromium.org" Date: Thu, 18 Apr 2013 11:22:29 +0000 Subject: [PATCH] Inline isUint32() method from HConstant, which was only used in one place. Add utility method for checking whether an HValue is a given int32_t constant. BUG= Review URL: https://codereview.chromium.org/14244023 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14329 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen-instructions.cc | 16 ++++++++-------- src/hydrogen-instructions.h | 5 +---- src/hydrogen.cc | 8 +++----- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc index 71158ce..e7060be 100644 --- a/src/hydrogen-instructions.cc +++ b/src/hydrogen-instructions.cc @@ -648,6 +648,11 @@ int32_t HValue::GetInteger32Constant() { } +bool HValue::EqualsInteger32Constant(int32_t value) { + return IsInteger32Constant() && GetInteger32Constant() == value; +} + + void HValue::SetOperandAt(int index, HValue* value) { RegisterUse(index, value); InternalSetOperandAt(index, value); @@ -1393,15 +1398,11 @@ HValue* HBitwise::Canonicalize() { if (!representation().IsInteger32()) return this; // If x is an int32, then x & -1 == x, x | 0 == x and x ^ 0 == x. int32_t nop_constant = (op() == Token::BIT_AND) ? -1 : 0; - if (left()->IsConstant() && - HConstant::cast(left())->HasInteger32Value() && - HConstant::cast(left())->Integer32Value() == nop_constant && + if (left()->EqualsInteger32Constant(nop_constant) && !right()->CheckFlag(kUint32)) { return right(); } - if (right()->IsConstant() && - HConstant::cast(right())->HasInteger32Value() && - HConstant::cast(right())->Integer32Value() == nop_constant && + if (right()->EqualsInteger32Constant(nop_constant) && !left()->CheckFlag(kUint32)) { return left(); } @@ -1432,8 +1433,7 @@ HValue* HArithmeticBinaryOperation::Canonicalize() { static bool IsIdentityOperation(HValue* arg1, HValue* arg2, int32_t identity) { return arg1->representation().IsSpecialization() && - arg2->IsInteger32Constant() && - arg2->GetInteger32Constant() == identity; + arg2->EqualsInteger32Constant(identity); } diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index 54f0672..cfbcc13 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -1001,6 +1001,7 @@ class HValue: public ZoneObject { bool IsInteger32Constant(); int32_t GetInteger32Constant(); + bool EqualsInteger32Constant(int32_t value); bool IsDefinedAfter(HBasicBlock* other) const; @@ -3328,10 +3329,6 @@ class HConstant: public HTemplateInstruction<0> { bool BooleanValue() const { return boolean_value_; } - bool IsUint32() { - return HasInteger32Value() && (Integer32Value() >= 0); - } - virtual intptr_t Hashcode() { if (has_int32_value_) { return static_cast(int32_value_); diff --git a/src/hydrogen.cc b/src/hydrogen.cc index acd2f34..8937933 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -3977,8 +3977,8 @@ bool Uint32Analysis::CheckPhiOperands(HPhi* phi) { HValue* operand = phi->OperandAt(j); if (!operand->CheckFlag(HInstruction::kUint32)) { // Lazyly mark constants that fit into uint32 range with kUint32 flag. - if (operand->IsConstant() && - HConstant::cast(operand)->IsUint32()) { + if (operand->IsInteger32Constant() && + operand->GetInteger32Constant() >= 0) { operand->SetFlag(HInstruction::kUint32); continue; } @@ -8801,9 +8801,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( } else if (exponent == 2.0) { result = HMul::New(zone(), context, left, left); } - } else if (right->IsConstant() && - HConstant::cast(right)->HasInteger32Value() && - HConstant::cast(right)->Integer32Value() == 2) { + } else if (right->EqualsInteger32Constant(2)) { result = HMul::New(zone(), context, left, left); } -- 2.7.4