blob: 29c22cde9c7776eddedae6b9bbead9c04f33622c [file] [log] [blame]
// Copyright 2019 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.
#ifndef V8_COMPILER_FEEDBACK_SOURCE_H_
#define V8_COMPILER_FEEDBACK_SOURCE_H_
#include "src/compiler/heap-refs.h"
#include "src/objects/feedback-vector.h"
namespace v8 {
namespace internal {
namespace compiler {
struct FeedbackSource {
FeedbackSource() { DCHECK(!IsValid()); }
V8_EXPORT_PRIVATE FeedbackSource(Handle<FeedbackVector> vector_,
FeedbackSlot slot_);
FeedbackSource(FeedbackVectorRef vector_, FeedbackSlot slot_);
bool IsValid() const { return !vector.is_null() && !slot.IsInvalid(); }
int index() const;
Handle<FeedbackVector> vector;
FeedbackSlot slot;
struct Hash {
size_t operator()(FeedbackSource const& source) const {
return base::hash_combine(source.vector.address(), source.slot);
}
};
struct Equal {
bool operator()(FeedbackSource const& lhs,
FeedbackSource const& rhs) const {
return lhs.vector.equals(rhs.vector) && lhs.slot == rhs.slot;
}
};
};
bool operator==(FeedbackSource const&, FeedbackSource const&);
bool operator!=(FeedbackSource const&, FeedbackSource const&);
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
FeedbackSource const&);
} // namespace compiler
} // namespace internal
} // namespace v8
#endif // V8_COMPILER_FEEDBACK_SOURCE_H_