From 6022d14b0241ed85f8245a5730c08ba28b5a898e Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner <nbjorner@microsoft.com> Date: Tue, 5 Feb 2013 15:03:45 -0800 Subject: [PATCH] remove incorrect code for double loop with widening Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> --- src/muz_qe/dl_compiler.cpp | 68 +++++++------------------------------- 1 file changed, 12 insertions(+), 56 deletions(-) diff --git a/src/muz_qe/dl_compiler.cpp b/src/muz_qe/dl_compiler.cpp index d403b5b5c..44a449779 100644 --- a/src/muz_qe/dl_compiler.cpp +++ b/src/muz_qe/dl_compiler.cpp @@ -87,12 +87,12 @@ namespace datalog { acc.push_back(instruction::mk_clone(src, result)); } - void compiler::make_union(reg_idx src, reg_idx tgt, reg_idx delta, bool widening, + void compiler::make_union(reg_idx src, reg_idx tgt, reg_idx delta, bool use_widening, instruction_block & acc) { SASSERT(m_reg_signatures[src]==m_reg_signatures[tgt]); SASSERT(delta==execution_context::void_register || m_reg_signatures[src]==m_reg_signatures[delta]); - if(widening) { + if (use_widening) { acc.push_back(instruction::mk_widen(src, tgt, delta)); } else { @@ -129,8 +129,7 @@ namespace datalog { func_decl_set::iterator pend = preds.end(); for(; pit!=pend; ++pit) { func_decl * pred = *pit; - reg_idx reg; - TRUSTME( m_pred_regs.find(pred, reg) ); + reg_idx reg = m_pred_regs.find(pred); SASSERT(!regs.contains(pred)); relation_signature sig = m_reg_signatures[reg]; @@ -576,8 +575,7 @@ namespace datalog { } SASSERT(t_cols.size()==neg_cols.size()); - reg_idx neg_reg; - TRUSTME( m_pred_regs.find(neg_pred, neg_reg) ); + reg_idx neg_reg = m_pred_regs.find(neg_pred); acc.push_back(instruction::mk_filter_by_negation(filtered_res, neg_reg, t_cols.size(), t_cols.c_ptr(), neg_cols.c_ptr())); } @@ -762,15 +760,13 @@ namespace datalog { typedef svector<tail_delta_info> tail_delta_infos; unsigned rule_len = r->get_uninterpreted_tail_size(); - reg_idx head_reg; - TRUSTME( m_pred_regs.find(r->get_head()->get_decl(), head_reg) ); + reg_idx head_reg = m_pred_regs.find(r->get_head()->get_decl()); svector<reg_idx> tail_regs; tail_delta_infos tail_deltas; for(unsigned j=0;j<rule_len;j++) { func_decl * tail_pred = r->get_tail(j)->get_decl(); - reg_idx tail_reg; - TRUSTME( m_pred_regs.find(tail_pred, tail_reg) ); + reg_idx tail_reg = m_pred_regs.find(tail_pred); tail_regs.push_back(tail_reg); if(input_deltas && !all_or_nothing_deltas()) { @@ -858,7 +854,7 @@ namespace datalog { rule_dependencies deps(m_rule_set.get_dependencies()); deps.restrict(preds); cycle_breaker(deps, global_deltas)(); - TRUSTME( deps.sort_deps(ordered_preds) ); + VERIFY( deps.sort_deps(ordered_preds) ); //the predicates that were removed to get acyclic induced subgraph are put last //so that all their local input deltas are already populated @@ -903,8 +899,7 @@ namespace datalog { for(; gdit!=gend; ++gdit) { func_decl * pred = gdit->m_key; reg_idx head_reg = gdit->m_value; - reg_idx tail_reg; - TRUSTME( global_tail_deltas.find(pred, tail_reg) ); + reg_idx tail_reg = global_tail_deltas.find(pred); acc.push_back(instruction::mk_move(head_reg, tail_reg)); } //empty local deltas @@ -939,7 +934,7 @@ namespace datalog { loop_body->set_observer(0); acc.push_back(instruction::mk_while_loop(loop_control_regs.size(), - loop_control_regs.c_ptr(),loop_body)); + loop_control_regs.c_ptr(), loop_body)); } void compiler::compile_dependent_rules(const func_decl_set & head_preds, @@ -985,50 +980,11 @@ namespace datalog { //generate code for the initial run compile_preds(preds_vector, empty_func_decl_set, input_deltas, d_global_src, acc); - if(!compile_with_widening()) { - compile_loop(preds_vector, empty_func_decl_set, d_global_tgt, d_global_src, - d_local, acc); + if (compile_with_widening()) { + compile_loop(preds_vector, global_deltas, d_global_tgt, d_global_src, d_local, acc); } else { - //do the part where we zero the global predicates and run the loop saturation loop again - if(global_deltas.size()<head_preds.size()) { - - pred2idx globals_backup; - get_fresh_registers(global_deltas, globals_backup); //these actually are not deltas - - { - //make backup copy of relations that will be widened - func_decl_set::iterator it = global_deltas.begin(); - func_decl_set::iterator end = global_deltas.end(); - for(; it!=end; ++it) { - reg_idx rel_idx; - TRUSTME( m_pred_regs.find(*it, rel_idx) ); - reg_idx backup_idx; - TRUSTME( globals_backup.find(*it, backup_idx) ); - - make_clone(rel_idx, backup_idx, acc); - } - } - - compile_loop(preds_vector, global_deltas, d_global_tgt, d_global_src, - d_local, acc); - - { - //restore the original values of widened relations before we rerun the loop - func_decl_set::iterator it = global_deltas.begin(); - func_decl_set::iterator end = global_deltas.end(); - for(; it!=end; ++it) { - reg_idx rel_idx; - TRUSTME( m_pred_regs.find(*it, rel_idx) ); - reg_idx backup_idx; - TRUSTME( globals_backup.find(*it, backup_idx) ); - - acc.push_back(instruction::mk_move(backup_idx, rel_idx)); - } - } - } - compile_loop(preds_vector, global_deltas, d_global_tgt, d_global_src, - d_local, acc); + compile_loop(preds_vector, empty_func_decl_set, d_global_tgt, d_global_src, d_local, acc); }