Added -no_dump_ptr flag for AST dump options in 'read_verilog'
authorUdi Finkelstein <github@udifink.com>
Thu, 23 Aug 2018 12:19:46 +0000 (15:19 +0300)
committerUdi Finkelstein <github@udifink.com>
Thu, 23 Aug 2018 12:26:02 +0000 (15:26 +0300)
This option disables the memory pointer display.
This is useful when diff'ing different dumps because otherwise the node pointers
makes every diff line different when the AST content is the same.

frontends/ast/ast.cc
frontends/ast/ast.h
frontends/verilog/verilog_frontend.cc

index 7c72a50d9cd6bc73f81bcce25601346cc12ce553..e79be953accce78c9871acf8c0f8fb0736a393b3 100644 (file)
@@ -44,7 +44,7 @@ namespace AST {
 
 // instanciate global variables (private API)
 namespace AST_INTERNAL {
-       bool flag_dump_ast1, flag_dump_ast2, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit;
+       bool flag_dump_ast1, flag_dump_ast2, flag_no_dump_ptr, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit;
        bool flag_nomem2reg, flag_mem2reg, flag_lib, flag_noopt, flag_icells, flag_autowire;
        AstNode *current_ast, *current_ast_mod;
        std::map<std::string, AstNode*> current_scope;
@@ -267,10 +267,12 @@ void AstNode::dumpAst(FILE *f, std::string indent) const
        std::string type_name = type2str(type);
        fprintf(f, "%s%s <%s:%d>", indent.c_str(), type_name.c_str(), filename.c_str(), linenum);
 
-       if (id2ast)
-               fprintf(f, " [%p -> %p]", this, id2ast);
-       else
-               fprintf(f, " [%p]", this);
+       if (!flag_no_dump_ptr) {
+               if (id2ast)
+                       fprintf(f, " [%p -> %p]", this, id2ast);
+               else
+                       fprintf(f, " [%p]", this);
+       }
 
        if (!str.empty())
                fprintf(f, " str='%s'", str.c_str());
@@ -1008,12 +1010,13 @@ static AstModule* process_module(AstNode *ast, bool defer)
 }
 
 // create AstModule instances for all modules in the AST tree and add them to 'design'
-void AST::process(RTLIL::Design *design, AstNode *ast, bool dump_ast1, bool dump_ast2, bool dump_vlog, bool dump_rtlil,
+void AST::process(RTLIL::Design *design, AstNode *ast, bool dump_ast1, bool dump_ast2, bool no_dump_ptr, bool dump_vlog, bool dump_rtlil,
                bool nolatches, bool nomeminit, bool nomem2reg, bool mem2reg, bool lib, bool noopt, bool icells, bool nooverwrite, bool overwrite, bool defer, bool autowire)
 {
        current_ast = ast;
        flag_dump_ast1 = dump_ast1;
        flag_dump_ast2 = dump_ast2;
+       flag_no_dump_ptr = no_dump_ptr;
        flag_dump_vlog = dump_vlog;
        flag_dump_rtlil = dump_rtlil;
        flag_nolatches = nolatches;
index d94199643ccb37ddb93bc7cb99d3f3464a35adfa..7e97bdb3bdb3ebf1b23cb4344a6460d3c1c0bfe0 100644 (file)
@@ -274,7 +274,7 @@ namespace AST
        };
 
        // process an AST tree (ast must point to an AST_DESIGN node) and generate RTLIL code
-       void process(RTLIL::Design *design, AstNode *ast, bool dump_ast1, bool dump_ast2, bool dump_vlog, bool dump_rtlil, bool nolatches, bool nomeminit,
+       void process(RTLIL::Design *design, AstNode *ast, bool dump_ast1, bool dump_ast2, bool no_dump_ptr, bool dump_vlog, bool dump_rtlil, bool nolatches, bool nomeminit,
                        bool nomem2reg, bool mem2reg, bool lib, bool noopt, bool icells, bool nooverwrite, bool overwrite, bool defer, bool autowire);
 
        // parametric modules are supported directly by the AST library
@@ -305,7 +305,7 @@ namespace AST
 namespace AST_INTERNAL
 {
        // internal state variables
-       extern bool flag_dump_ast1, flag_dump_ast2, flag_dump_rtlil, flag_nolatches, flag_nomeminit;
+       extern bool flag_dump_ast1, flag_dump_ast2, flag_no_dump_ptr, flag_dump_rtlil, flag_nolatches, flag_nomeminit;
        extern bool flag_nomem2reg, flag_mem2reg, flag_lib, flag_noopt, flag_icells, flag_autowire;
        extern AST::AstNode *current_ast, *current_ast_mod;
        extern std::map<std::string, AST::AstNode*> current_scope;
index 911e36112fa165fd3b1294b86214480a8690dcbf..8dcc7c5aa0fb5e07800df852a3e6d22c791ed132 100644 (file)
@@ -78,6 +78,9 @@ struct VerilogFrontend : public Frontend {
                log("    -dump_ast2\n");
                log("        dump abstract syntax tree (after simplification)\n");
                log("\n");
+               log("    -no_dump_ptr\n");
+               log("        do not include hex memory addresses in dump (easier to diff dumps)\n");
+               log("\n");
                log("    -dump_vlog\n");
                log("        dump ast as Verilog code (after simplification)\n");
                log("\n");
@@ -184,6 +187,7 @@ struct VerilogFrontend : public Frontend {
        {
                bool flag_dump_ast1 = false;
                bool flag_dump_ast2 = false;
+               bool flag_no_dump_ptr = false;
                bool flag_dump_vlog = false;
                bool flag_dump_rtlil = false;
                bool flag_nolatches = false;
@@ -241,6 +245,10 @@ struct VerilogFrontend : public Frontend {
                                flag_dump_ast2 = true;
                                continue;
                        }
+                       if (arg == "-no_dump_ptr") {
+                               flag_no_dump_ptr = true;
+                               continue;
+                       }
                        if (arg == "-dump_vlog") {
                                flag_dump_vlog = true;
                                continue;
@@ -381,7 +389,7 @@ struct VerilogFrontend : public Frontend {
                if (flag_nodpi)
                        error_on_dpi_function(current_ast);
 
-               AST::process(design, current_ast, flag_dump_ast1, flag_dump_ast2, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit, flag_nomem2reg, flag_mem2reg, lib_mode, flag_noopt, flag_icells, flag_nooverwrite, flag_overwrite, flag_defer, default_nettype_wire);
+               AST::process(design, current_ast, flag_dump_ast1, flag_dump_ast2, flag_no_dump_ptr, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit, flag_nomem2reg, flag_mem2reg, lib_mode, flag_noopt, flag_icells, flag_nooverwrite, flag_overwrite, flag_defer, default_nettype_wire);
 
                if (!flag_nopp)
                        delete lexin;