From ca22edc9d36298dc83edc70720be1b15a05367a7 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Tue, 21 Mar 2017 17:19:56 +1100 Subject: [PATCH] ng_region: don't realloc exits --- src/nfagraph/ng_region.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/nfagraph/ng_region.cpp b/src/nfagraph/ng_region.cpp index 39a8a504..2391082a 100644 --- a/src/nfagraph/ng_region.cpp +++ b/src/nfagraph/ng_region.cpp @@ -104,15 +104,12 @@ void checkAndAddExitCandidate(const AcyclicGraph &g, } static -vector findExits(const AcyclicGraph &g, - const ue2::unordered_set &r) { - vector exits; - +void findExits(const AcyclicGraph &g, const ue2::unordered_set &r, + vector &exits) { + exits.clear(); for (auto v : r) { checkAndAddExitCandidate(g, r, v, exits); } - - return exits; } static @@ -179,26 +176,26 @@ void buildInitialCandidate(const AcyclicGraph &g, ue2::unordered_set *candidate, /* in exits of prev region; * out exits from candidate */ - vector *exits, + vector &exits, flat_set *open_jumps) { if (it == ite) { candidate->clear(); - exits->clear(); + exits.clear(); return; } - if (exits->empty()) { + if (exits.empty()) { DEBUG_PRINTF("odd\n"); candidate->clear(); DEBUG_PRINTF("adding %zu to initial\n", g[*it].index); candidate->insert(*it); open_jumps->erase(*it); - checkAndAddExitCandidate(g, *candidate, *it, *exits); + checkAndAddExitCandidate(g, *candidate, *it, exits); ++it; return; } - auto enters = (*exits)[0].open; // copy + auto enters = exits.front().open; // copy candidate->clear(); for (; it != ite; ++it) { @@ -218,7 +215,7 @@ void buildInitialCandidate(const AcyclicGraph &g, open_jumps->clear(); } - *exits = findExits(g, *candidate); + findExits(g, *candidate, exits); } static @@ -237,7 +234,8 @@ void findDagLeaders(const NGHolder &h, const AcyclicGraph &g, assert(t_it != topo.rend()); candidate.insert(*t_it++); - auto exits = findExits(g, candidate); + vector exits; + findExits(g, candidate, exits); while (t_it != topo.rend()) { assert(!candidate.empty()); @@ -253,7 +251,7 @@ void findDagLeaders(const NGHolder &h, const AcyclicGraph &g, DEBUG_PRINTF("setting region %u\n", curr_id); } setRegion(candidate, curr_id++, regions); - buildInitialCandidate(g, t_it, topo.rend(), &candidate, &exits, + buildInitialCandidate(g, t_it, topo.rend(), &candidate, exits, &open_jumps); } else { NFAVertex curr = *t_it;