]> granicus.if.org Git - re2c/commitdiff
Added debug for tag optimizations (CFG and interference table).
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 12 Apr 2017 10:26:18 +0000 (11:26 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 12 Apr 2017 10:26:18 +0000 (11:26 +0100)
re2c/Makefile.am
re2c/src/dfa/cfg/cfg.h
re2c/src/dfa/cfg/dump.cc

index f5a2506443a0ae269935fe8170487fbe1da18e5f..5fb65d94fcfede64a1ca52a05fb116d6ab6d4ac1 100644 (file)
@@ -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 \
index 7c314b99d576bb08fe9fe5dac0d41bc14daa8315..65b15d1878dae22dc583b283003dfc17a5a3923a 100644 (file)
@@ -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_
index 0db9f340d2418cd8d6f7e630aac228005908d185..0368868efefbc6b20778535d209f7243f0b96748 100644 (file)
@@ -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