Merge branch 'hamed' of ssh://plrg.eecs.uci.edu/home/git/constraint_compiler
authorbdemsky <bdemsky@uci.edu>
Sat, 26 Aug 2017 02:11:30 +0000 (19:11 -0700)
committerbdemsky <bdemsky@uci.edu>
Sat, 26 Aug 2017 02:11:30 +0000 (19:11 -0700)
src/ASTAnalyses/orderencoder.h
src/ASTTransform/integerencoding.cc
src/ASTTransform/orderdecompose.cc

index fa3089fccd9cde7fc4951c393779921ab905b792..19240cf59855d681e9d103fbe5fd4db7d487e033 100644 (file)
@@ -12,7 +12,6 @@
 #include "mymemory.h"
 
 void computeStronglyConnectedComponentGraph(OrderGraph *graph);
-void orderAnalysis(CSolver *solver);
 void initializeNodeInfoSCC(OrderGraph *graph);
 void DFSNodeVisit(OrderNode *node, Vector<OrderNode *> *finishNodes, bool isReverse, bool mustvisit, uint sccNum);
 void DFS(OrderGraph *graph, Vector<OrderNode *> *finishNodes);
index ff384cbb67bb451d8023c051befaa0560a88bf72..bada3f0593d94f1d95fd6db8eeff68913236b4d0 100644 (file)
@@ -6,25 +6,24 @@
 #include "predicate.h"
 #include "element.h"
 #include "rewriter.h"
+#include "set.h"
+
 
-/*
 void orderIntegerEncodingSATEncoder(SATEncoder *This, BooleanOrder *boolOrder){
        Order* order = boolOrder->order;
        if (order->elementTable == NULL) {
                order->initializeOrderElementsHashTable();
        }
        //getting two elements and using LT predicate ...
-       Element* elem1 = getOrderIntegerElement(This, order, boolOrder->first);
-       Element* elem2 = getOrderIntegerElement(This, order, boolOrder->second);
-       Set * sarray[]={order->auxSet, order->auxSet};
+       ElementSet* elem1 = (ElementSet*)getOrderIntegerElement(This, order, boolOrder->first);
+       ElementSet* elem2 = (ElementSet*)getOrderIntegerElement(This, order, boolOrder->second);
+       Set * sarray[]={elem1->set, elem2->set};
        Predicate *predicate =new PredicateOperator(LT, sarray, 2);
        Element * parray[]={elem1, elem2};
        BooleanPredicate * boolean=new BooleanPredicate(predicate, parray, 2, NULL);
        {//Adding new elements and boolean/predicate to solver regarding memory management
                This->solver->allBooleans.push(boolean);
                This->solver->allPredicates.push(predicate);
-               This->solver->allElements.push(elem1);
-               This->solver->allElements.push(elem2);
                This->solver->constraints.add(boolean);
        }
        replaceBooleanWithBoolean(This->solver, boolOrder, boolean);
@@ -35,11 +34,13 @@ Element* getOrderIntegerElement(SATEncoder* This,Order *order, uint64_t item) {
        HashSetOrderElement* eset = order->elementTable;
        OrderElement oelement ={item, NULL};
        if( !eset->contains(&oelement)){
-               Element* elem = new ElementSet(order->auxSet);
+               Set* set = new Set(order->set->type, 1, (uint64_t) order->set->getSize());
+               Element* elem = new ElementSet(set);
                eset->add(allocOrderElement(item, elem));
+               This->solver->allElements.push(elem);
+               This->solver->allSets.push(set);
                return elem;
        } else
                return eset->get(&oelement)->elem;
 }
 
-*/
index 2effff5e29e3c8f7e8cedf3cb1360483a48fbdcc..8b3aa73fef662ad5b5ad5862472e16a97285540b 100644 (file)
@@ -11,6 +11,7 @@
 #include "csolver.h"
 #include "orderencoder.h"
 #include "tunable.h"
+#include "integerencoding.h"
 
 void orderAnalysis(CSolver *This) {
        uint size = This->allOrders.getSize();
@@ -52,10 +53,17 @@ void orderAnalysis(CSolver *This) {
                
                //This is needed for splitorder
                computeStronglyConnectedComponentGraph(graph);
-               
                decomposeOrder(This, order, graph);
-               
                deleteOrderGraph(graph);
+               
+               bool doIntegerEncoding = GETVARTUNABLE(This->tuner, order->order.type, ORDERINTEGERENCODING, &onoff );
+               if(!doIntegerEncoding)
+                       continue;
+               uint size = order->constraints.getSize();
+               for(uint i=0; i<size; i++){
+                       orderIntegerEncodingSATEncoder(This->satEncoder, order->constraints.get(i));
+               }
+
        }
 }