mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	reworking cancellation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									981f8226fe
								
							
						
					
					
						commit
						baee4225a7
					
				
					 145 changed files with 172 additions and 958 deletions
				
			
		| 
						 | 
				
			
			@ -110,10 +110,6 @@ parameter arith_decl_plugin::translate(parameter const & p, decl_plugin & target
 | 
			
		|||
    return parameter(_target.aw().mk_id(aw().idx2anum(p.get_ext_id())), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void arith_decl_plugin::set_cancel(bool f) {
 | 
			
		||||
    if (m_aw)
 | 
			
		||||
        m_aw->m_amanager.set_cancel(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void arith_decl_plugin::set_manager(ast_manager * m, family_id id) {
 | 
			
		||||
    decl_plugin::set_manager(m, id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,7 +211,6 @@ public:
 | 
			
		|||
 | 
			
		||||
    virtual expr * get_some_value(sort * s);
 | 
			
		||||
 | 
			
		||||
    virtual void set_cancel(bool f);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -398,9 +397,6 @@ public:
 | 
			
		|||
        return m_manager.mk_eq(lhs, rhs);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_cancel(bool f) {
 | 
			
		||||
        plugin().set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* ARITH_DECL_PLUGIN_H_ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1433,12 +1433,6 @@ ast_manager::~ast_manager() {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ast_manager::set_cancel(bool f) {
 | 
			
		||||
    for (unsigned i = 0; i < m_plugins.size(); i++) {
 | 
			
		||||
        m_plugins[i]->set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ast_manager::compact_memory() {
 | 
			
		||||
    m_alloc.consolidate();
 | 
			
		||||
    unsigned capacity = m_ast_table.capacity();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -932,7 +932,6 @@ public:
 | 
			
		|||
    virtual ~decl_plugin() {}
 | 
			
		||||
    virtual void finalize() {}
 | 
			
		||||
 | 
			
		||||
    virtual void set_cancel(bool f) {}
 | 
			
		||||
 | 
			
		||||
    virtual decl_plugin * mk_fresh() = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1472,9 +1471,6 @@ public:
 | 
			
		|||
    ~ast_manager();
 | 
			
		||||
 | 
			
		||||
    // propagate cancellation signal to decl_plugins
 | 
			
		||||
    void set_cancel(bool f);
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
 | 
			
		||||
    bool has_trace_stream() const { return m_trace_stream != 0; }
 | 
			
		||||
    std::ostream & trace_stream() { SASSERT(has_trace_stream()); return *m_trace_stream; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,9 +87,6 @@ public:
 | 
			
		|||
        TRACE("name_exprs", tout << mk_ismt2_pp(n, m_rw.m()) << "\n---->\n" << mk_ismt2_pp(r, m_rw.m()) << "\n";);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    virtual void set_cancel(bool f) {
 | 
			
		||||
        m_rw.set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void reset() {
 | 
			
		||||
        m_rw.reset();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,9 +37,6 @@ public:
 | 
			
		|||
                            proof_ref & p                      // [OUT] proof for (iff n p)
 | 
			
		||||
                            ) = 0;
 | 
			
		||||
    
 | 
			
		||||
    virtual void set_cancel(bool f) = 0;
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
    virtual void reset() = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1032,9 +1032,6 @@ br_status arith_rewriter::mk_abs_core(expr * arg, expr_ref & result) {
 | 
			
		|||
    return BR_REWRITE2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void arith_rewriter::set_cancel(bool f) {
 | 
			
		||||
    m_util.set_cancel(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Return true if t is of the form  c*Pi where c is a numeral.
 | 
			
		||||
// Store c into k
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -167,8 +167,6 @@ public:
 | 
			
		|||
    }
 | 
			
		||||
    br_status mk_is_int(expr * arg, expr_ref & result);
 | 
			
		||||
 | 
			
		||||
    void set_cancel(bool f);
 | 
			
		||||
 | 
			
		||||
    br_status mk_sin_core(expr * arg, expr_ref & result);
 | 
			
		||||
    br_status mk_cos_core(expr * arg, expr_ref & result);
 | 
			
		||||
    br_status mk_tan_core(expr * arg, expr_ref & result);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -649,10 +649,6 @@ void bit_blaster_rewriter::updt_params(params_ref const& p) {
 | 
			
		|||
    m_imp->m_cfg.updt_params(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void bit_blaster_rewriter::set_cancel(bool f) {
 | 
			
		||||
    m_imp->set_cancel(f);
 | 
			
		||||
    m_imp->m_blaster.set_cancel(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void bit_blaster_rewriter::push() {
 | 
			
		||||
    m_imp->push();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,6 @@ public:
 | 
			
		|||
    bit_blaster_rewriter(ast_manager & m, params_ref const & p);
 | 
			
		||||
    ~bit_blaster_rewriter();
 | 
			
		||||
    void updt_params(params_ref const & p);
 | 
			
		||||
    void set_cancel(bool f);
 | 
			
		||||
    ast_manager & m() const;
 | 
			
		||||
    unsigned get_num_steps() const;
 | 
			
		||||
    void cleanup();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,6 @@ protected:
 | 
			
		|||
    void mk_ext_rotate_left_right(unsigned sz, expr * const * a_bits, expr * const * b_bits, expr_ref_vector & out_bits);
 | 
			
		||||
 | 
			
		||||
    unsigned long long m_max_memory;
 | 
			
		||||
    volatile bool      m_cancel;
 | 
			
		||||
    bool               m_use_wtm; /* Wallace Tree Multiplier */
 | 
			
		||||
    bool               m_use_bcm; /* Booth Multiplier for constants */
 | 
			
		||||
    void checkpoint();
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +44,6 @@ public:
 | 
			
		|||
    bit_blaster_tpl(Cfg const & cfg = Cfg(), unsigned long long max_memory = UINT64_MAX, bool use_wtm = false, bool use_bcm=false):
 | 
			
		||||
        Cfg(cfg),
 | 
			
		||||
        m_max_memory(max_memory),
 | 
			
		||||
        m_cancel(false),
 | 
			
		||||
        m_use_wtm(use_wtm),
 | 
			
		||||
        m_use_bcm(use_bcm) {
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -54,9 +52,6 @@ public:
 | 
			
		|||
        m_max_memory = max_memory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_cancel(bool f) { m_cancel = f; }
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
    
 | 
			
		||||
    // Cfg required API
 | 
			
		||||
    ast_manager & m() const { return Cfg::m(); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ template<typename Cfg>
 | 
			
		|||
void bit_blaster_tpl<Cfg>::checkpoint() {
 | 
			
		||||
    if (memory::get_allocation_size() > m_max_memory)
 | 
			
		||||
        throw rewriter_exception(Z3_MAX_MEMORY_MSG);
 | 
			
		||||
    if (m_cancel)
 | 
			
		||||
    if (m().canceled())
 | 
			
		||||
        throw rewriter_exception(Z3_CANCELED_MSG);
 | 
			
		||||
    cooperate("bit-blaster");
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -444,12 +444,6 @@ void der_rewriter::operator()(expr * t, expr_ref & result, proof_ref & result_pr
 | 
			
		|||
    m_imp->operator()(t, result, result_pr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void der_rewriter::set_cancel(bool f) {
 | 
			
		||||
    #pragma omp critical (der_rewriter)
 | 
			
		||||
    {
 | 
			
		||||
        m_imp->set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void der_rewriter::cleanup() {
 | 
			
		||||
    ast_manager & m = m_imp->m();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,9 +174,6 @@ public:
 | 
			
		|||
 | 
			
		||||
    void operator()(expr * t, expr_ref & result, proof_ref & result_pr);
 | 
			
		||||
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
    void set_cancel(bool f);
 | 
			
		||||
    void cleanup();
 | 
			
		||||
    void reset();
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,9 +107,6 @@ public:
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void set_cancel(bool f) {
 | 
			
		||||
        m_replacer.set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual unsigned get_num_steps() const {
 | 
			
		||||
        return m_replacer.get_num_steps();
 | 
			
		||||
| 
						 | 
				
			
			@ -146,10 +143,6 @@ public:
 | 
			
		|||
        m_r.reset_used_dependencies();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void set_cancel(bool f) {
 | 
			
		||||
        m_r.set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual unsigned get_num_steps() const { 
 | 
			
		||||
        return m_r.get_num_steps();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,9 +39,6 @@ public:
 | 
			
		|||
    virtual void operator()(expr * t, expr_ref & result);
 | 
			
		||||
    virtual void operator()(expr_ref & t) { expr_ref s(t, m()); (*this)(s, t); }
 | 
			
		||||
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
    virtual void set_cancel(bool f) = 0;
 | 
			
		||||
    virtual unsigned get_num_steps() const { return 0; }
 | 
			
		||||
    virtual void reset() = 0;
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -212,7 +212,6 @@ protected:
 | 
			
		|||
    };
 | 
			
		||||
    Config &                   m_cfg;
 | 
			
		||||
    unsigned                   m_num_steps;
 | 
			
		||||
    volatile bool              m_cancel;
 | 
			
		||||
    ptr_vector<expr>           m_bindings;
 | 
			
		||||
    var_shifter                m_shifter;
 | 
			
		||||
    expr_ref                   m_r;
 | 
			
		||||
| 
						 | 
				
			
			@ -333,10 +332,6 @@ public:
 | 
			
		|||
    Config & cfg() { return m_cfg; }
 | 
			
		||||
    Config const & cfg() const { return m_cfg; }
 | 
			
		||||
 | 
			
		||||
    void set_cancel(bool f) { m_cancel = f; }
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
 | 
			
		||||
    ~rewriter_tpl();
 | 
			
		||||
    
 | 
			
		||||
    void reset();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -495,7 +495,6 @@ rewriter_tpl<Config>::rewriter_tpl(ast_manager & m, bool proof_gen, Config & cfg
 | 
			
		|||
    rewriter_core(m, proof_gen),
 | 
			
		||||
    m_cfg(cfg),
 | 
			
		||||
    m_num_steps(0),
 | 
			
		||||
    m_cancel(false),
 | 
			
		||||
    m_shifter(m),
 | 
			
		||||
    m_r(m),
 | 
			
		||||
    m_pr(m),
 | 
			
		||||
| 
						 | 
				
			
			@ -576,8 +575,6 @@ template<bool ProofGen>
 | 
			
		|||
void rewriter_tpl<Config>::resume_core(expr_ref & result, proof_ref & result_pr) {
 | 
			
		||||
    SASSERT(!frame_stack().empty());
 | 
			
		||||
    while (!frame_stack().empty()) {
 | 
			
		||||
        if (m_cancel)
 | 
			
		||||
            throw rewriter_exception(Z3_CANCELED_MSG);
 | 
			
		||||
        if (!m().canceled()) {
 | 
			
		||||
            if (m().limit().cancel_flag_set()) {
 | 
			
		||||
                throw rewriter_exception(Z3_CANCELED_MSG);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -685,9 +685,6 @@ struct th_rewriter_cfg : public default_rewriter_cfg {
 | 
			
		|||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void set_cancel(bool f) {
 | 
			
		||||
        m_a_rw.set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template class rewriter_tpl<th_rewriter_cfg>;
 | 
			
		||||
| 
						 | 
				
			
			@ -734,13 +731,6 @@ unsigned th_rewriter::get_num_steps() const {
 | 
			
		|||
    return m_imp->get_num_steps();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void th_rewriter::set_cancel(bool f) {
 | 
			
		||||
    #pragma omp critical (th_rewriter)
 | 
			
		||||
    {
 | 
			
		||||
        m_imp->set_cancel(f);
 | 
			
		||||
        m_imp->cfg().set_cancel(f);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void th_rewriter::cleanup() {
 | 
			
		||||
    ast_manager & m = m_imp->m();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,9 +45,6 @@ public:
 | 
			
		|||
    void operator()(expr * t, expr_ref & result, proof_ref & result_pr);
 | 
			
		||||
    void operator()(expr * n, unsigned num_bindings, expr * const * bindings, expr_ref & result);
 | 
			
		||||
 | 
			
		||||
    void cancel() { set_cancel(true); }
 | 
			
		||||
    void reset_cancel() { set_cancel(false); }
 | 
			
		||||
    void set_cancel(bool f);
 | 
			
		||||
    void cleanup();
 | 
			
		||||
    void reset();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue