Skip to content

Commit c5ad80a

Browse files
committed
Redundant deepcopy is removed by performance reason
1 parent 26489ac commit c5ad80a

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

pyverilog/controlflow/controlflow_analyzer.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@ def showVersion():
309309
default=False,help="Non graph generation")
310310
optparser.add_option("--nolabel",action="store_true",dest="nolabel",
311311
default=False,help="State Machine Graph without Labels")
312+
optparser.add_option("-I","--include",dest="include",action="append",
313+
default=[],help="Include path")
314+
optparser.add_option("-D",dest="define",action="append",
315+
default=[],help="Macro Definition")
312316
(options, args) = optparser.parse_args()
313317

314318
filelist = args
@@ -321,7 +325,9 @@ def showVersion():
321325
if len(filelist) == 0:
322326
showVersion()
323327

324-
analyzer = VerilogDataflowAnalyzer(filelist, options.topmodule)
328+
analyzer = VerilogDataflowAnalyzer(filelist, options.topmodule,
329+
preprocess_include=options.include,
330+
preprocess_define=options.define)
325331
analyzer.generate()
326332

327333
directives = analyzer.get_directives()

pyverilog/dataflow/dataflow_analyzer.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import subprocess
1313

1414
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) )
15+
sys.setrecursionlimit(16 * 1024)
1516

1617
import pyverilog
1718
import pyverilog.utils
@@ -28,12 +29,16 @@
2829
from bindvisitor import BindVisitor
2930

3031
class VerilogDataflowAnalyzer(VerilogCodeParser):
31-
def __init__(self, filelist, topmodule='TOP', noreorder=False, nobind=False):
32+
def __init__(self, filelist, topmodule='TOP', noreorder=False, nobind=False,
33+
preprocess_include=None,
34+
preprocess_define=None):
3235
self.topmodule = topmodule
3336
self.terms = {}
3437
self.binddict = {}
3538
self.frametable = None
36-
VerilogCodeParser.__init__(self, filelist)
39+
VerilogCodeParser.__init__(self, filelist,
40+
preprocess_include=preprocess_include,
41+
preprocess_define=preprocess_define)
3742
self.noreorder = noreorder
3843
self.nobind = nobind
3944

@@ -106,6 +111,10 @@ def showVersion():
106111
default=False,help="No binding traversal, Default=False")
107112
optparser.add_option("--noreorder",action="store_true",dest="noreorder",
108113
default=False,help="No reordering of binding dataflow, Default=False")
114+
optparser.add_option("-I","--include",dest="include",action="append",
115+
default=[],help="Include path")
116+
optparser.add_option("-D",dest="define",action="append",
117+
default=[],help="Macro Definition")
109118
(options, args) = optparser.parse_args()
110119

111120
filelist = args
@@ -119,8 +128,10 @@ def showVersion():
119128
showVersion()
120129

121130
verilogdataflowanalyzer = VerilogDataflowAnalyzer(filelist, options.topmodule,
122-
noreorder=options.noreorder,
123-
nobind=options.nobind)
131+
noreorder=options.noreorder,
132+
nobind=options.nobind,
133+
preprocess_include=options.include,
134+
preprocess_define=options.define)
124135
verilogdataflowanalyzer.generate()
125136

126137
directives = verilogdataflowanalyzer.get_directives()

pyverilog/dataflow/visit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -354,14 +354,14 @@ def getModuleName(self):
354354
############################################################################
355355
def setBlockingAssign(self, dst, bind):
356356
if not dst in self.blockingassign:
357-
self.blockingassign[dst] = (copy.deepcopy(bind),)
357+
self.blockingassign[dst] = (bind,)
358358
return
359359
current = self.blockingassign[dst]
360360
for c_i, c in enumerate(current):
361361
if c.msb == bind.msb and c.msb == bind.msb and c.ptr == bind.ptr:
362-
self.blockingassign[dst][c_i].tree = copy.deepcopy(bind.tree)
362+
self.blockingassign[dst][c_i].tree = bind.tree
363363
return
364-
self.blockingassign[dst] = current + (copy.deepcopy(bind),)
364+
self.blockingassign[dst] = current + (bind,)
365365

366366
def getBlockingAssign(self, dst):
367367
if dst in self.blockingassign: return self.blockingassign[dst]

pyverilog/vparser/parser.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1730,7 +1730,9 @@ def showVersion():
17301730
if len(filelist) == 0:
17311731
showVersion()
17321732

1733-
codeparser = VerilogCodeParser(filelist, preprocess_include=options.include, preprocess_define=options.define)
1733+
codeparser = VerilogCodeParser(filelist,
1734+
preprocess_include=options.include,
1735+
preprocess_define=options.define)
17341736
ast = codeparser.parse()
17351737
directives = codeparser.get_directives()
17361738

0 commit comments

Comments
 (0)