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
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
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