rose: build fragments directly

This commit is contained in:
Justin Viiret 2017-02-14 09:14:58 +11:00 committed by Matthew Barr
parent 79512bd5c3
commit ea8d0bcb1c

View File

@ -4722,31 +4722,18 @@ void buildLiteralPrograms(RoseBuildImpl &build, build_context &bc) {
frag_to_final_map[m.second].insert(m.first); frag_to_final_map[m.second].insert(m.first);
} }
const u32 num_fragments = verify_u32(frag_to_final_map.size()); DEBUG_PRINTF("%zu fragments\n", build.fragments.size());
DEBUG_PRINTF("%u fragments\n", num_fragments);
auto lit_edge_map = findEdgesByLiteral(build); auto lit_edge_map = findEdgesByLiteral(build);
vector<u32> litPrograms(num_fragments); for (auto &frag : build.fragments) {
vector<u32> delayRebuildPrograms(num_fragments); const auto &final_ids = frag_to_final_map[frag.fragment_id];
DEBUG_PRINTF("frag_id=%u, final_ids=[%s]\n", frag.fragment_id,
for (u32 frag_id = 0; frag_id != num_fragments; ++frag_id) {
const auto &final_ids = frag_to_final_map[frag_id];
DEBUG_PRINTF("frag_id=%u, final_ids=[%s]\n", frag_id,
as_string_list(final_ids).c_str()); as_string_list(final_ids).c_str());
frag.lit_program_offset =
litPrograms[frag_id] =
writeLiteralProgram(build, bc, final_ids, lit_edge_map); writeLiteralProgram(build, bc, final_ids, lit_edge_map);
delayRebuildPrograms[frag_id] = frag.delay_program_offset =
buildDelayRebuildProgram(build, bc, final_ids); buildDelayRebuildProgram(build, bc, final_ids);
} }
// Update LitFragment entries.
for (const auto &fragment_id : build.final_to_frag_map | map_values) {
auto &frag = build.fragments.at(fragment_id);
frag.lit_program_offset = litPrograms[frag.fragment_id];
frag.delay_program_offset = delayRebuildPrograms[frag.fragment_id];
}
} }
static static