Exemplo n.º 1
0
def optimize_bridge(metainterp_sd, old_loop_tokens, bridge):
    cpu = metainterp_sd.cpu    
    metainterp_sd.logger_noopt.log_loop(bridge.inputargs, bridge.operations)
    finder = BridgeSpecializationFinder(cpu)
    finder.find_nodes_bridge(bridge)
    for old_loop_token in old_loop_tokens:
        if finder.bridge_matches(old_loop_token.specnodes):
            bridge.operations[-1].descr = old_loop_token   # patch jump target
            optimize_bridge_1(metainterp_sd, bridge)
            return old_loop_token
    return None
Exemplo n.º 2
0
def _optimize_bridge(metainterp_sd, old_loop_tokens, bridge):
    cpu = metainterp_sd.cpu    
    metainterp_sd.logger_noopt.log_loop(bridge.inputargs, bridge.operations)
    finder = BridgeSpecializationFinder(cpu)
    finder.find_nodes_bridge(bridge)
    for old_loop_token in old_loop_tokens:
        if finder.bridge_matches(old_loop_token.specnodes):
            bridge.operations[-1].descr = old_loop_token   # patch jump target
            optimize_bridge_1(metainterp_sd, bridge)
            return old_loop_token
    return None
Exemplo n.º 3
0
 def find_bridge(self, ops, inputspectext, outputspectext, boxkinds=None,
                 mismatch=False):
     assert boxkinds is None or isinstance(boxkinds, dict)
     inputspecnodes = self.unpack_specnodes(inputspectext)
     outputspecnodes = self.unpack_specnodes(outputspectext)
     bridge = self.parse(ops, boxkinds=boxkinds)
     bridge_specialization_finder = BridgeSpecializationFinder(self.cpu)
     bridge_specialization_finder.find_nodes_bridge(bridge, inputspecnodes)
     matches = bridge_specialization_finder.bridge_matches(outputspecnodes)
     if mismatch:
         assert not matches
     else:
         assert matches