From: Ulya Trofimovich Date: Wed, 12 Apr 2017 10:26:18 +0000 (+0100) Subject: Added debug for tag optimizations (CFG and interference table). X-Git-Tag: 1.0~39^2~63 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a31f17aa0431e6407f6f690b3906bb4f087308b;p=re2c Added debug for tag optimizations (CFG and interference table). --- diff --git a/re2c/Makefile.am b/re2c/Makefile.am index f5a25064..5fb65d94 100644 --- a/re2c/Makefile.am +++ b/re2c/Makefile.am @@ -95,6 +95,7 @@ SRC = \ src/dfa/cfg/cfg.cc \ src/dfa/cfg/compact.cc \ src/dfa/cfg/dce.cc \ + src/dfa/cfg/dump.cc \ src/dfa/cfg/interfere.cc \ src/dfa/cfg/liveanal.cc \ src/dfa/cfg/normalize.cc \ diff --git a/re2c/src/dfa/cfg/cfg.h b/re2c/src/dfa/cfg/cfg.h index 7c314b99..65b15d18 100644 --- a/re2c/src/dfa/cfg/cfg.h +++ b/re2c/src/dfa/cfg/cfg.h @@ -40,6 +40,9 @@ struct cfg_t FORBID_COPY(cfg_t); }; +void dump_cfg(const cfg_t &cfg, const bool *live); +void dump_interf(const cfg_t &cfg, const bool *interf); + } // namespace re2c #endif // _RE2C_DFA_CFG_CFG_ diff --git a/re2c/src/dfa/cfg/dump.cc b/re2c/src/dfa/cfg/dump.cc index 0db9f340..0368868e 100644 --- a/re2c/src/dfa/cfg/dump.cc +++ b/re2c/src/dfa/cfg/dump.cc @@ -5,10 +5,9 @@ namespace re2c { -void cfg_t::dump(const cfg_t &cfg, const bool *live) +void dump_cfg(const cfg_t &cfg, const bool *live) { const tagver_t nver = cfg.dfa.maxtagver + 1; - const size_t ntag = cfg.dfa.tags.size(); fprintf(stderr, "digraph CFG {\n" " rankdir=LR\n" @@ -34,27 +33,27 @@ void cfg_t::dump(const cfg_t &cfg, const bool *live) } } fprintf(stderr, "/"); - if (b->use) { - for (size_t t = 0; t < ntag; ++t) { - const tagver_t v = b->use[t]; + if (b->rule) { + for (size_t t = b->rule->ltag; t < b->rule->htag; ++t) { + const tagver_t v = cfg.dfa.finvers[t]; if (v != TAGVER_ZERO) { fprintf(stderr, "%i ", v); } } } -if (i < cfg.nbbfin) { - fprintf(stderr, "\\nneed:"); - for (tagver_t v = 0; v < nver; ++v) { - if (live[v]) { - fprintf(stderr, " %i", v); + if (i < cfg.nbbfin) { + fprintf(stderr, "\\nneed:"); + for (tagver_t v = 0; v < nver; ++v) { + if (live[v]) { + fprintf(stderr, " %i", v); + } } } -} fprintf(stderr, "\"]\n"); - const char *style = b->use ? "dotted" : "solid"; + const char *style = b->rule ? "dotted" : "solid"; for (cfg_ix_t *j = b->succb; j < b->succe; ++j) { fprintf(stderr, " n%u -> n%u [style=%s]\n", i, *j, style); } @@ -63,5 +62,20 @@ if (i < cfg.nbbfin) { fprintf(stderr, "}\n"); } +void dump_interf(const cfg_t &cfg, const bool *interf) +{ + const tagver_t nver = cfg.dfa.maxtagver + 1; + for (tagver_t y = 1; y < nver; ++y) { + fprintf(stderr, "%2d ", y); + } + fprintf(stderr, "\n"); + for (tagver_t x = 1; x < nver; ++x) { + for (tagver_t y = 1; y < nver; ++y) { + fprintf(stderr, "%2c ", interf[x * nver + y] ? '*' : '.'); + } + fprintf(stderr, "\n"); + } +} + } // namespace re2c