report_manager: store report -> program mapping

This commit is contained in:
Justin Viiret 2016-04-18 14:20:45 +10:00 committed by Matthew Barr
parent fd7f30a5b5
commit f40aa6bd40
3 changed files with 26 additions and 2 deletions

View File

@ -3771,6 +3771,7 @@ u32 buildReportPrograms(RoseBuildImpl &build, build_context &bc) {
program = flattenProgram({program});
applyFinalSpecialisation(program);
programs[id] = writeProgram(bc, program);
build.rm.setProgramOffset(id, programs[id]);
DEBUG_PRINTF("program for report %u @ %u (%zu instructions)\n", id,
programs.back(), program.size());
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Intel Corporation
* Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@ -217,6 +217,18 @@ Report ReportManager::getBasicInternalReport(const NGWrapper &g, s32 adj) {
return makeECallback(g.reportId, adj, ekey);
}
void ReportManager::setProgramOffset(ReportID id, u32 programOffset) {
assert(id < reportIds.size());
assert(!contains(reportIdToProgramOffset, id));
reportIdToProgramOffset.emplace(id, programOffset);
}
u32 ReportManager::getProgramOffset(ReportID id) const {
assert(id < reportIds.size());
assert(contains(reportIdToProgramOffset, id));
return reportIdToProgramOffset.at(id);
}
static
void ekeysUnion(std::set<u32> *ekeys, u32 more) {
if (!ekeys->empty()) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Intel Corporation
* Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@ -113,6 +113,14 @@ public:
* ~0U if no dkey is needed. */
u32 getDkey(const Report &r) const;
/** \brief Register a Rose program offset with the given report. */
void setProgramOffset(ReportID id, u32 programOffset);
/** \brief Fetch the program offset for a given report. It is a fatal error
* for this to be called with a report for which no program offset has been
* set. */
u32 getProgramOffset(ReportID id) const;
private:
/** \brief Grey box ref, for checking resource limits. */
const Grey &grey;
@ -127,6 +135,9 @@ private:
/** \brief Mapping from ReportID to dedupe key. */
std::map<ReportID, u32> reportIdToDedupeKey;
/** \brief Mapping from ReportID to Rose program offset in bytecode. */
std::map<ReportID, u32> reportIdToProgramOffset;
/** \brief Mapping from external match ids to information about that
* id. */
std::map<ReportID, external_report_info> externalIdMap;