def conflict(entry_point_function, tcfg_map, conflict_files, old_ilp, new_ilp, dir_name, sol_file, emit_conflicts=False, do_cplex=False, interactive=False, silent_cplex=False, preempt_limit=None, default_phantom_preempt=False): if preempt_limit == None: preempt_limit = 5 if default_phantom_preempt: conflict_files.append( convert_loop_bounds.phantomPreemptsAnnoFileName(dir_name)) #initialise graph_to_graph so we get immFunc #load the loop_counts print 'conflict.conflict: sol_file %s' % sol_file bench.bench(dir_name, entry_point_function, False, True, False, parse_only=True) #we need the loop data immFunc().process() global bbAddr bbAddr = immFunc().bbAddr read_tcfg_map(tcfg_map) if interactive: assert False, 'Halt' if emit_conflicts: print 'new_ilp:%s' % new_ilp print_constraints(conflict_files, old_ilp, new_ilp, sol_file, preempt_limit) if do_cplex: cplex_ret = cplex.cplexSolve(new_ilp, silent=silent_cplex, sol_file=sol_file) print 'cplex_ret: %s' % cplex_ret return cplex_ret
def conflict(entry_point_function, tcfg_map, conflict_files, old_ilp, new_ilp, dir_name, sol_file, emit_conflicts=False, do_cplex=False, interactive=False, silent_cplex=False, preempt_limit= None, default_phantom_preempt=False): if preempt_limit == None: preempt_limit = 5 if default_phantom_preempt: conflict_files.append(convert_loop_bounds.phantomPreemptsAnnoFileName(dir_name)) #initialise graph_to_graph so we get immFunc #load the loop_counts print 'conflict.conflict: sol_file %s' % sol_file bench.bench(dir_name, [entry_point_function],False,True,False,parse_only=True ) #we need the loop data immFunc().process() global bbAddr bbAddr = immFunc().bbAddr read_tcfg_map(tcfg_map) if interactive: assert False, 'Halt' if emit_conflicts: print 'new_ilp:%s' % new_ilp print_constraints(conflict_files, old_ilp, new_ilp, sol_file, preempt_limit) if do_cplex: cplex_ret = cplex.cplexSolve(new_ilp,silent=silent_cplex,sol_file=sol_file) print 'cplex_ret: %s' % cplex_ret return cplex_ret
results_f.write(' this took %f seconds\n' % (c2-c1)) if not new_refutes: print 'At case %d, trace_refute cannot find any more refutations' % case_i results_f.write('terminated normally: trace_refute cannot find any more refutations\n') break #cp the auto_refutes_file to keep a copy p = Popen(['cp', auto_refutes_file, results_dir+'/refutes_%d.txt'% case_i]) p.communicate() assert not p.returncode case_i += 1 results_f.close() if __name__ == '__main__': if len(sys.argv) != 5: print 'Usage: python auto_infea.py <dir_name> <entry point function> <results directory> <initial i>' print 'results direcotry should already exists and be empty' print 'initial i determine which iterations to start at, use 0 for fresh runs' print len(sys.argv) sys.exit(0) dir_name = sys.argv[1] entry_point_function = sys.argv[2] from convert_loop_bounds import phantomPreemptsAnnoFileName preempt_conflicts_file = phantomPreemptsAnnoFileName(dir_name) results_dir = sys.argv[3] initial_i = int(sys.argv[4]) auto_infea(dir_name, entry_point_function,preempt_conflicts_file, results_dir, initial_i, preemption_limit = 5)