| Index: src/compiler/type-hint-analyzer.cc
|
| diff --git a/src/compiler/type-hint-analyzer.cc b/src/compiler/type-hint-analyzer.cc
|
| deleted file mode 100644
|
| index 6b66374a11ed92cbb893cfe5b8096b5ac579599e..0000000000000000000000000000000000000000
|
| --- a/src/compiler/type-hint-analyzer.cc
|
| +++ /dev/null
|
| @@ -1,129 +0,0 @@
|
| -// Copyright 2015 the V8 project authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "src/compiler/type-hint-analyzer.h"
|
| -
|
| -#include "src/assembler.h"
|
| -#include "src/code-stubs.h"
|
| -#include "src/ic/ic-state.h"
|
| -#include "src/type-hints.h"
|
| -
|
| -namespace v8 {
|
| -namespace internal {
|
| -namespace compiler {
|
| -
|
| -namespace {
|
| -
|
| -BinaryOperationHint ToBinaryOperationHint(Token::Value op,
|
| - BinaryOpICState::Kind kind) {
|
| - switch (kind) {
|
| - case BinaryOpICState::NONE:
|
| - return BinaryOperationHint::kNone;
|
| - case BinaryOpICState::SMI:
|
| - return BinaryOperationHint::kSignedSmall;
|
| - case BinaryOpICState::INT32:
|
| - return (Token::IsTruncatingBinaryOp(op) && SmiValuesAre31Bits())
|
| - ? BinaryOperationHint::kNumberOrOddball
|
| - : BinaryOperationHint::kSigned32;
|
| - case BinaryOpICState::NUMBER:
|
| - return BinaryOperationHint::kNumberOrOddball;
|
| - case BinaryOpICState::STRING:
|
| - return BinaryOperationHint::kString;
|
| - case BinaryOpICState::GENERIC:
|
| - return BinaryOperationHint::kAny;
|
| - }
|
| - UNREACHABLE();
|
| - return BinaryOperationHint::kNone;
|
| -}
|
| -
|
| -CompareOperationHint ToCompareOperationHint(Token::Value op,
|
| - CompareICState::State state) {
|
| - switch (state) {
|
| - case CompareICState::UNINITIALIZED:
|
| - return CompareOperationHint::kNone;
|
| - case CompareICState::SMI:
|
| - return CompareOperationHint::kSignedSmall;
|
| - case CompareICState::NUMBER:
|
| - return Token::IsOrderedRelationalCompareOp(op)
|
| - ? CompareOperationHint::kNumberOrOddball
|
| - : CompareOperationHint::kNumber;
|
| - case CompareICState::STRING:
|
| - case CompareICState::INTERNALIZED_STRING:
|
| - return CompareOperationHint::kString;
|
| - case CompareICState::UNIQUE_NAME:
|
| - case CompareICState::RECEIVER:
|
| - case CompareICState::KNOWN_RECEIVER:
|
| - case CompareICState::BOOLEAN:
|
| - case CompareICState::GENERIC:
|
| - return CompareOperationHint::kAny;
|
| - }
|
| - UNREACHABLE();
|
| - return CompareOperationHint::kNone;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool TypeHintAnalysis::GetBinaryOperationHint(TypeFeedbackId id,
|
| - BinaryOperationHint* hint) const {
|
| - auto i = infos_.find(id);
|
| - if (i == infos_.end()) return false;
|
| - Handle<Code> code = i->second;
|
| - DCHECK_EQ(Code::BINARY_OP_IC, code->kind());
|
| - BinaryOpICState state(code->GetIsolate(), code->extra_ic_state());
|
| - *hint = ToBinaryOperationHint(state.op(), state.kind());
|
| - return true;
|
| -}
|
| -
|
| -bool TypeHintAnalysis::GetCompareOperationHint(
|
| - TypeFeedbackId id, CompareOperationHint* hint) const {
|
| - auto i = infos_.find(id);
|
| - if (i == infos_.end()) return false;
|
| - Handle<Code> code = i->second;
|
| - DCHECK_EQ(Code::COMPARE_IC, code->kind());
|
| - CompareICStub stub(code->stub_key(), code->GetIsolate());
|
| - *hint = ToCompareOperationHint(stub.op(), stub.state());
|
| - return true;
|
| -}
|
| -
|
| -bool TypeHintAnalysis::GetToBooleanHints(TypeFeedbackId id,
|
| - ToBooleanHints* hints) const {
|
| - auto i = infos_.find(id);
|
| - if (i == infos_.end()) return false;
|
| - Handle<Code> code = i->second;
|
| - DCHECK_EQ(Code::TO_BOOLEAN_IC, code->kind());
|
| - ToBooleanICStub stub(code->GetIsolate(), code->extra_ic_state());
|
| - *hints = stub.hints();
|
| - return true;
|
| -}
|
| -
|
| -TypeHintAnalysis* TypeHintAnalyzer::Analyze(Handle<Code> code) {
|
| - DisallowHeapAllocation no_gc;
|
| - TypeHintAnalysis::Infos infos(zone());
|
| - Isolate* const isolate = code->GetIsolate();
|
| - int const mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET_WITH_ID);
|
| - for (RelocIterator it(*code, mask); !it.done(); it.next()) {
|
| - RelocInfo* rinfo = it.rinfo();
|
| - Address target_address = rinfo->target_address();
|
| - Code* target = Code::GetCodeFromTargetAddress(target_address);
|
| - switch (target->kind()) {
|
| - case Code::BINARY_OP_IC:
|
| - case Code::COMPARE_IC:
|
| - case Code::TO_BOOLEAN_IC: {
|
| - // Add this feedback to the {infos}.
|
| - TypeFeedbackId id(static_cast<unsigned>(rinfo->data()));
|
| - infos.insert(std::make_pair(id, handle(target, isolate)));
|
| - break;
|
| - }
|
| - default:
|
| - // Ignore the remaining code objects.
|
| - break;
|
| - }
|
| - }
|
| - return new (zone()) TypeHintAnalysis(infos, zone());
|
| -}
|
| -
|
| -
|
| -} // namespace compiler
|
| -} // namespace internal
|
| -} // namespace v8
|
|
|