Exemple #1
0
 def visit__PipelineVariable(self, node):
     # standard
     if node.src_data is not None and not node.ops:
         if node.stage_id is None:
             self._add_node(node, label=str(node.data), shape='box', style='dashed')
         else:
             self._add_node(node, label=''.join([str(node.stage_id), ':', str(node.data)]), shape='box')
         self.visit(node.src_data)
         self._add_edge(node.src_data, node)
     # accumulator
     if node.src_data is not None and node.ops:
         label = [ str(node.stage_id) ]
         label.append(':')
         label.append( str(node.data) )
         if node.oplabel is not None:
             label.append(' ')
             label.append(node.oplabel)
         else:
             for op in node.ops:
                 if isinstance(op, type):
                     label.append(' ')
                     label.append(vtypes.op2mark(op.__name__))
                 else:
                     label.append(' C')
         label.append('=')
         self._add_node(node, label=''.join(label), shape='box', style='rounded')
         self.visit(node.src_data)
         self._add_edge(node.src_data, node)
         if node.resetcond:
             self.visit(node.resetcond)
             self._add_edge(node.resetcond, node, label='RST', style='dashed')
     if isinstance(node.dst_data, _PipelineInterface):
         self.visit(node.dst_data)
         self._add_edge(node, node.dst_data)
Exemple #2
0
 def visit__BinaryOperator(self, node):
     mark = vtypes.op2mark(node.__class__.__name__)
     self._add_node(node, label=mark, shape='ellipse')
     maxid = self._max_stage_id(node.left, node.right)
     left = node.left
     right = node.right
     if hasattr(left, '_get_preg'):
         left = left._get_preg(maxid)
     if hasattr(right, '_get_preg'):
         right = right._get_preg(maxid)
     self.visit(left)
     self.visit(right)
     self._add_edge(left, node, label='L')
     self._add_edge(right, node, label='R')
Exemple #3
0
 def visit__UnaryOperator(self, node):
     mark = vtypes.op2mark(node.__class__.__name__)
     self._add_node(node, label=mark, shape='ellipse')
     self.visit(node.right)
     self._add_edge(node.right, node)