def inline_reachable_unmatched(p, inline_tag, compare_tag, force_inline=None, skip_underspec=False): funs = [ pair.funs[inline_tag] for n in p.nodes if p.nodes[n].kind == 'Call' if p.node_tags[n][0] == compare_tag for pair in pairings.get(p.nodes[n].fname, []) if inline_tag in pair.tags ] rep = mk_graph_slice( p, consider_inline(funs, inline_tag, force_inline, skip_underspec)) opts = vc_double_range(3, 3) while True: try: heads = problem.loop_heads_including_inner(p) limits = [(n, opts) for n in heads] for n in p.nodes.keys(): try: r = rep.get_node_pc_env((n, limits)) except rep.TooGeneral: pass rep.get_node_pc_env(('Ret', limits), inline_tag) rep.get_node_pc_env(('Err', limits), inline_tag) break except rep_graph.InlineEvent: continue
def inline_reachable_unmatched (p, inline_tag, compare_tag, force_inline = None, skip_underspec = False): funs = [pair.funs['C'] for n in p.nodes if p.nodes[n].kind == 'Call' if p.node_tags[n][0] == compare_tag for pair in pairings.get (p.nodes[n].fname, []) if 'C' in pair.tags] rep = mk_graph_slice (p, consider_inline_c (funs, inline_tag, force_inline, skip_underspec)) opts = vc_double_range (3, 3) while True: try: limits = [(n, opts) for n in p.loop_heads ()] for n in p.nodes.keys (): try: r = rep.get_node_pc_env ((n, limits)) except rep.TooGeneral: pass rep.get_node_pc_env (('Ret', limits), inline_tag) rep.get_node_pc_env (('Err', limits), inline_tag) break except rep_graph.InlineEvent: continue
def split_r_err_pc_hyp(p, split, restrs, tags=None): (_, r_details, _, n, loop_r_max) = split (r_split, (r_seq_start, r_step), r_eqs) = r_details nc = n * r_step vc = vc_double_range(r_seq_start + nc, loop_r_max + 2) restrs = restr_others(p, ((r_split, vc), ) + restrs, 2) if tags == None: tags = p.pairing.tags return non_r_err_pc_hyp(tags, restrs)
def split_r_err_pc_hyp (p, split, restrs, tags = None): (_, r_details, _, n, loop_r_max) = split (r_split, (r_seq_start, r_step), r_eqs) = r_details nc = n * r_step vc = vc_double_range (r_seq_start + nc, loop_r_max + 2) restrs = restr_others (p, ((r_split, vc), ) + restrs, 2) if tags == None: tags = p.pairing.tags return non_r_err_pc_hyp (tags, restrs)
def restr_others_both (p, restrs, n, m): extras = [(sp, vc_double_range (n, m)) for sp in loops_to_split (p, restrs)] return restrs + tuple (extras)