mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	udoc: micro optimization for compiler_guard
Signed-off-by: Nuno Lopes <nlopes@microsoft.com>
This commit is contained in:
		
							parent
							
								
									6bf87083ef
								
							
						
					
					
						commit
						5cc8c8bde6
					
				
					 2 changed files with 8 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -723,12 +723,9 @@ namespace datalog {
 | 
			
		|||
        conds.push_back(m.mk_eq(e1, e2));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void udoc_relation::compile_guard(expr* g, udoc& d, bit_vector const& discard_cols) const {
 | 
			
		||||
        d.reset(dm);
 | 
			
		||||
        d.push_back(dm.allocateX()); 
 | 
			
		||||
        apply_guard(g, d, discard_cols);
 | 
			
		||||
    }
 | 
			
		||||
    void udoc_relation::apply_guard(expr* g, udoc& result, bit_vector const& discard_cols) const {
 | 
			
		||||
    void udoc_relation::compile_guard(expr* g, udoc& result, bit_vector const& discard_cols) const {
 | 
			
		||||
        result.push_back(dm.allocateX());
 | 
			
		||||
 | 
			
		||||
        // datastructure to store equalities with columns that will be projected out
 | 
			
		||||
        union_find_default_ctx union_ctx;
 | 
			
		||||
        subset_ints equalities(union_ctx);
 | 
			
		||||
| 
						 | 
				
			
			@ -737,6 +734,7 @@ namespace datalog {
 | 
			
		|||
        }        
 | 
			
		||||
        apply_guard(g, result, equalities, discard_cols);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool udoc_relation::apply_ground_eq(doc_ref& d, unsigned v, unsigned hi, unsigned lo, expr* c) const {
 | 
			
		||||
        udoc_plugin& p = get_plugin();
 | 
			
		||||
        unsigned num_bits;
 | 
			
		||||
| 
						 | 
				
			
			@ -753,9 +751,6 @@ namespace datalog {
 | 
			
		|||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    bool udoc_relation::apply_bv_eq(
 | 
			
		||||
        expr* e1, expr* e2, bit_vector const& discard_cols, udoc& result) const {
 | 
			
		||||
        udoc_plugin& p = get_plugin();
 | 
			
		||||
| 
						 | 
				
			
			@ -926,9 +921,10 @@ namespace datalog {
 | 
			
		|||
            expr_ref guard(m);
 | 
			
		||||
            for (unsigned i = 0; i < num_bits; ++i) {
 | 
			
		||||
                m_equalities.mk_var();
 | 
			
		||||
            }        
 | 
			
		||||
            t.extract_guard(condition, guard, m_reduced_condition);            
 | 
			
		||||
            t.compile_guard(guard, m_udoc, m_empty_bv);
 | 
			
		||||
            }
 | 
			
		||||
            t.extract_guard(condition, guard, m_reduced_condition);
 | 
			
		||||
            m_udoc.push_back(dm.allocateX());
 | 
			
		||||
            t.apply_guard(guard, m_udoc, m_equalities, m_empty_bv);
 | 
			
		||||
 | 
			
		||||
            TRACE("doc", 
 | 
			
		||||
                  tout << "original condition: " << mk_pp(condition, m) << "\n";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,6 @@ namespace datalog {
 | 
			
		|||
        void extract_equalities(
 | 
			
		||||
            expr* e1, expr* e2, expr_ref_vector& conds, 
 | 
			
		||||
            subset_ints& equalities, unsigned_vector& roots) const;
 | 
			
		||||
        void apply_guard(expr* g, udoc& result, bit_vector const& discard_cols) const;
 | 
			
		||||
        void apply_guard(expr* g, udoc& result, subset_ints const& equalities, bit_vector const& discard_cols) const;
 | 
			
		||||
        bool apply_ground_eq(doc_ref& d, unsigned v, unsigned hi, unsigned lo, expr* c) const;
 | 
			
		||||
        bool apply_bv_eq(expr* e1, expr* e2, bit_vector const& discard_cols, udoc& result) const;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue