From 704559294744c7cec761d7c7585724a6da63169e Mon Sep 17 00:00:00 2001 From: "neis@chromium.org" Date: Tue, 30 Sep 2014 10:34:54 +0000 Subject: [PATCH] Get rid of code duplication by computing int Lub using range Lub. R=rossberg@chromium.org BUG= Review URL: https://codereview.chromium.org/616563002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24320 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/types.cc | 32 ++------------------------------ src/types.h | 9 ++++----- 2 files changed, 6 insertions(+), 35 deletions(-) diff --git a/src/types.cc b/src/types.cc index 88e8d22..307dc91 100644 --- a/src/types.cc +++ b/src/types.cc @@ -274,37 +274,11 @@ TypeImpl::BitsetType::Lub(double value) { DisallowHeapAllocation no_allocation; if (i::IsMinusZero(value)) return kMinusZero; if (std::isnan(value)) return kNaN; - if (IsUint32Double(value)) return Lub(FastD2UI(value)); - if (IsInt32Double(value)) return Lub(FastD2I(value)); + if (IsUint32Double(value) || IsInt32Double(value)) return Lub(value, value); return kOtherNumber; } -template -typename TypeImpl::bitset -TypeImpl::BitsetType::Lub(int32_t value) { - DisallowHeapAllocation no_allocation; - if (value >= 0x40000000) { - return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall; - } - if (value >= 0) return kUnsignedSmall; - if (value >= -0x40000000) return kOtherSignedSmall; - return i::SmiValuesAre31Bits() ? kOtherSigned32 : kOtherSignedSmall; -} - - -template -typename TypeImpl::bitset -TypeImpl::BitsetType::Lub(uint32_t value) { - DisallowHeapAllocation no_allocation; - if (value >= 0x80000000u) return kOtherUnsigned32; - if (value >= 0x40000000u) { - return i::SmiValuesAre31Bits() ? kOtherUnsigned31 : kUnsignedSmall; - } - return kUnsignedSmall; -} - - // Minimum values of regular numeric bitsets when SmiValuesAre31Bits. template const typename TypeImpl::BitsetType::BitsetMin @@ -334,10 +308,8 @@ TypeImpl::BitsetType::BitsetMins32[] = { template typename TypeImpl::bitset -TypeImpl::BitsetType::Lub(Limits lim) { +TypeImpl::BitsetType::Lub(double min, double max) { DisallowHeapAllocation no_allocation; - double min = lim.min->Number(); - double max = lim.max->Number(); int lub = kNone; const BitsetMin* mins = BitsetMins(); diff --git a/src/types.h b/src/types.h index 57ed2e2..b349b6b 100644 --- a/src/types.h +++ b/src/types.h @@ -598,12 +598,10 @@ class TypeImpl::BitsetType : public TypeImpl { static bitset Glb(TypeImpl* type); // greatest lower bound that's a bitset static bitset Lub(TypeImpl* type); // least upper bound that's a bitset + static bitset Lub(i::Map* map); static bitset Lub(i::Object* value); static bitset Lub(double value); - static bitset Lub(int32_t value); - static bitset Lub(uint32_t value); - static bitset Lub(i::Map* map); - static bitset Lub(Limits lim); + static bitset Lub(double min, double max); static const char* Name(bitset); static void Print(std::ostream& os, bitset); // NOLINT @@ -781,7 +779,8 @@ class TypeImpl::RangeType : public StructuralType { DCHECK(min->Number() <= max->Number()); RangeHandle type = Config::template cast( StructuralType::New(StructuralType::kRangeTag, 3, region)); - type->Set(0, BitsetType::New(BitsetType::Lub(Limits(min, max)), region)); + type->Set(0, BitsetType::New( + BitsetType::Lub(min->Number(), max->Number()), region)); type->SetValue(1, min); type->SetValue(2, max); return type; -- 2.7.4