Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions src/hotspot/share/oops/trainingData.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@ class TrainingData : public Metadata {
_lock_mode = need_data() ? +1 : -1; // if -1, we go lock-free
#endif
}
static void assert_locked_or_snapshotted() {
assert(safely_locked() || _snapshot, "use under TrainingDataLocker or after snapshot");
}
static void assert_locked() {
assert(safely_locked(), "use under TrainingDataLocker");
}
Expand Down Expand Up @@ -338,20 +341,24 @@ class TrainingData : public Metadata {
}

int length() const {
TrainingDataLocker::assert_locked_or_snapshotted();
return (_deps_dyn != nullptr ? _deps_dyn->length()
: _deps != nullptr ? _deps->length()
: 0);
}
E* adr_at(int i) const {
TrainingDataLocker::assert_locked_or_snapshotted();
return (_deps_dyn != nullptr ? _deps_dyn->adr_at(i)
: _deps != nullptr ? _deps->adr_at(i)
: nullptr);
}
E at(int i) const {
TrainingDataLocker::assert_locked_or_snapshotted();
assert(i >= 0 && i < length(), "oob");
return *adr_at(i);
}
bool append_if_missing(E dep) {
TrainingDataLocker::assert_can_add();
if (_deps_dyn == nullptr) {
_deps_dyn = new GrowableArrayCHeap<E, mtCompiler>(10);
_deps_dyn->append(dep);
Expand All @@ -361,23 +368,27 @@ class TrainingData : public Metadata {
}
}
bool remove_if_existing(E dep) {
TrainingDataLocker::assert_can_add();
if (_deps_dyn != nullptr) {
return _deps_dyn->remove_if_existing(dep);
}
return false;
}
void clear() {
TrainingDataLocker::assert_can_add();
if (_deps_dyn != nullptr) {
_deps_dyn->clear();
}
}
void append(E dep) {
TrainingDataLocker::assert_can_add();
if (_deps_dyn == nullptr) {
_deps_dyn = new GrowableArrayCHeap<E, mtCompiler>(10);
}
_deps_dyn->append(dep);
}
bool contains(E dep) {
TrainingDataLocker::assert_locked();
for (int i = 0; i < length(); i++) {
if (dep == at(i)) {
return true; // found
Expand Down Expand Up @@ -591,6 +602,7 @@ class CompileTrainingData : public TrainingData {
DepList<Record> _data;
public:
OptionalReturnType find(const Args&... args) {
TrainingDataLocker l;
ArgumentsType a(args...);
for (int i = 0; i < _data.length(); i++) {
if (_data.at(i).arguments() == a) {
Expand All @@ -599,8 +611,11 @@ class CompileTrainingData : public TrainingData {
}
return OptionalReturnType(false, ReturnType());
}
bool append_if_missing(const ReturnType& result, const Args&... args) {
return _data.append_if_missing(Record(result, ArgumentsType(args...)));
void append_if_missing(const ReturnType& result, const Args&... args) {
TrainingDataLocker l;
if (l.can_add()) {
_data.append_if_missing(Record(result, ArgumentsType(args...)));
}
}
#if INCLUDE_CDS
void remove_unshareable_info() { _data.remove_unshareable_info(); }
Expand Down