Made the expansion order of hierarchy deterministic
authorMarcus Comstedt <marcus@mc.pp.se>
Sun, 22 May 2016 14:37:47 +0000 (16:37 +0200)
committerMarcus Comstedt <marcus@mc.pp.se>
Sun, 22 May 2016 14:41:26 +0000 (16:41 +0200)
passes/hierarchy/hierarchy.cc

index 460b3c69307a922354c47e8b2ddae465a708d82d..94b93de5d9e9096210b977beefa0bb06faea270f 100644 (file)
@@ -261,7 +261,7 @@ bool expand_module(RTLIL::Design *design, RTLIL::Module *module, bool flag_check
        return did_something;
 }
 
-void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*> &used, RTLIL::Module *mod, int indent)
+void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*, IdString::compare_ptr_by_name<Module>> &used, RTLIL::Module *mod, int indent)
 {
        if (used.count(mod) > 0)
                return;
@@ -287,7 +287,7 @@ void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*> &used, RTL
 
 void hierarchy_clean(RTLIL::Design *design, RTLIL::Module *top, bool purge_lib)
 {
-       std::set<RTLIL::Module*> used;
+       std::set<RTLIL::Module*, IdString::compare_ptr_by_name<Module>> used;
        hierarchy_worker(design, used, top, 0);
 
        std::vector<RTLIL::Module*> del_modules;
@@ -523,7 +523,7 @@ struct HierarchyPass : public Pass {
                {
                        did_something = false;
 
-                       std::set<RTLIL::Module*> used_modules;
+                       std::set<RTLIL::Module*, IdString::compare_ptr_by_name<Module>> used_modules;
                        if (top_mod != NULL) {
                                log_header(design, "Analyzing design hierarchy..\n");
                                hierarchy_worker(design, used_modules, top_mod, 0);