]> granicus.if.org Git - re2c/commitdiff
Apply tag version compaction even with '--no-optimize-tags'.
authorUlya Trofimovich <skvadrik@gmail.com>
Tue, 18 Jul 2017 12:54:46 +0000 (13:54 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Tue, 18 Jul 2017 12:54:46 +0000 (13:54 +0100)
Otherwize RE2C emits too many unused tag variables and bloats the generated code.

re2c/src/compile.cc
re2c/src/dfa/cfg/optimize.cc
re2c/src/dfa/dfa.h

index c31bf4a051ddca7c8b3f01939d497089deb5e4ab..1056ef29f9b1df3e4343262015aa0d27a2e23e91 100644 (file)
@@ -70,7 +70,7 @@ static smart_ptr<DFA> 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);
index f27820c04c0a9b9e58f0ef0e6442984b10e5da23..f1fc7827fd092932583155ce77c6e634a3733801 100644 (file)
@@ -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<size_t>(maxver) + 1;
                        bool *live = new bool[cfg.nbbfin * nver];
                        bool *interf = new bool[nver * nver];
index e511c3983d3c19849f57d62f8303d544edd6055c..6654a038da2ec1e7787e78553a6cdfd7a6a92879 100644 (file)
@@ -78,7 +78,7 @@ void minimization(dfa_t &dfa, dfa_minimization_t type);
 void fillpoints(const dfa_t &dfa, std::vector<size_t> &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