verilog: significant block scoping improvements
[yosys.git] / frontends / ast / ast.h
index 46864a4e1b6a0c4c674536bc4d4d420edc18f02f..6f173ca22f2f11c9bae6cbdf50f0b06040adfe74 100644 (file)
@@ -76,6 +76,7 @@ namespace AST
                AST_TO_SIGNED,
                AST_TO_UNSIGNED,
                AST_SELFSZ,
+               AST_CAST_SIZE,
                AST_CONCAT,
                AST_REPLICATE,
                AST_BIT_NOT,
@@ -201,6 +202,7 @@ namespace AST
 
                // if this is a multirange memory then this vector contains offset and length of each dimension
                std::vector<int> multirange_dimensions;
+               std::vector<bool> multirange_swapped; // true if range is swapped, not used for structs
 
                // this is set by simplify and used during RTLIL generation
                AstNode *id2ast;
@@ -248,9 +250,10 @@ namespace AST
                // simplify() creates a simpler AST by unrolling for-loops, expanding generate blocks, etc.
                // it also sets the id2ast pointers so that identifier lookups are fast in genRTLIL()
                bool simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage, int width_hint, bool sign_hint, bool in_param);
+               void replace_result_wire_name_in_function(const std::string &from, const std::string &to);
                AstNode *readmem(bool is_readmemh, std::string mem_filename, AstNode *memory, int start_addr, int finish_addr, bool unconditional_init);
-               void expand_genblock(std::string index_var, std::string prefix, std::map<std::string, std::string> &name_map);
-               void replace_ids(const std::string &prefix, const std::map<std::string, std::string> &rules);
+               void expand_genblock(const std::string &prefix);
+               void label_genblks(std::set<std::string>& existing, int &counter);
                void mem2reg_as_needed_pass1(dict<AstNode*, pool<std::string>> &mem2reg_places,
                                dict<AstNode*, uint32_t> &mem2reg_flags, dict<AstNode*, uint32_t> &proc_flags, uint32_t &status_flags);
                bool mem2reg_as_needed_pass2(pool<AstNode*> &mem2reg_set, AstNode *mod, AstNode *block, AstNode *&async_block);
@@ -262,6 +265,7 @@ namespace AST
                // additional functionality for evaluating constant functions
                struct varinfo_t { RTLIL::Const val; int offset; bool is_signed; };
                bool has_const_only_constructs(bool &recommend_const_eval);
+               bool has_const_only_constructs(std::set<std::string>& visited, bool &recommend_const_eval);
                void replace_variables(std::map<std::string, varinfo_t> &variables, AstNode *fcall);
                AstNode *eval_const_function(AstNode *fcall);
                bool is_simple_const_expr();