From eaefa16b3383a739829865e302c0d593e7eb0dca Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Tue, 18 Jul 2017 13:54:46 +0100 Subject: [PATCH] Apply tag version compaction even with '--no-optimize-tags'. Otherwize RE2C emits too many unused tag variables and bloats the generated code. --- re2c/src/compile.cc | 2 +- re2c/src/dfa/cfg/optimize.cc | 4 ++-- re2c/src/dfa/dfa.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/re2c/src/compile.cc b/re2c/src/compile.cc index c31bf4a0..1056ef29 100644 --- a/re2c/src/compile.cc +++ b/re2c/src/compile.cc @@ -70,7 +70,7 @@ static smart_ptr ast_to_dfa(const spec_t &spec, Output &output) insert_fallback_tags(dfa); // try to minimize the number of tag variables - if (opts->optimize_tags) optimize_tags(dfa); + compact_and_optimize_tags(dfa, opts->optimize_tags); if (opts->dump_dfa_tagopt) dump_dfa(dfa); freeze_tags(dfa); diff --git a/re2c/src/dfa/cfg/optimize.cc b/re2c/src/dfa/cfg/optimize.cc index f27820c0..f1fc7827 100644 --- a/re2c/src/dfa/cfg/optimize.cc +++ b/re2c/src/dfa/cfg/optimize.cc @@ -4,7 +4,7 @@ namespace re2c { -void optimize_tags(dfa_t &dfa) +void compact_and_optimize_tags(dfa_t &dfa, bool optimize) { tagver_t maxver = dfa.maxtagver; if (maxver > 0) { @@ -16,7 +16,7 @@ void optimize_tags(dfa_t &dfa) maxver = cfg_t::compact(cfg, ver2new); cfg_t::renaming(cfg, ver2new, maxver); - if (maxver > 0) { + if (optimize && maxver > 0) { nver = static_cast(maxver) + 1; bool *live = new bool[cfg.nbbfin * nver]; bool *interf = new bool[nver * nver]; diff --git a/re2c/src/dfa/dfa.h b/re2c/src/dfa/dfa.h index e511c398..6654a038 100644 --- a/re2c/src/dfa/dfa.h +++ b/re2c/src/dfa/dfa.h @@ -78,7 +78,7 @@ void minimization(dfa_t &dfa, dfa_minimization_t type); void fillpoints(const dfa_t &dfa, std::vector &fill); void cutoff_dead_rules(dfa_t &dfa, size_t defrule, const std::string &cond, Warn &warn); void insert_fallback_tags(dfa_t &dfa); -void optimize_tags(dfa_t &dfa); +void compact_and_optimize_tags(dfa_t &dfa, bool optimize); void freeze_tags(dfa_t &dfa); } // namespace re2c -- 2.50.1