Search in sources :

Example 1 with MapSSA

use of dartagnan.utils.MapSSA in project Dat3M by hernanponcedeleon.

the class If method encodeDF.

public Pair<BoolExpr, MapSSA> encodeDF(MapSSA map, Context ctx) throws Z3Exception {
    myGuard = pred.toZ3(map, ctx);
    if (mainThread == null) {
        System.out.println(String.format("Check encodeDF for %s", this));
        return null;
    } else {
        MapSSA map1 = map.clone();
        MapSSA map2 = map.clone();
        BoolExpr enc = ctx.mkAnd(ctx.mkImplies(ctx.mkBoolConst(t1.cfVar()), pred.toZ3(map, ctx)), ctx.mkImplies(ctx.mkBoolConst(t2.cfVar()), ctx.mkNot(pred.toZ3(map, ctx))));
        Pair<BoolExpr, MapSSA> p1 = t1.encodeDF(map1, ctx);
        enc = ctx.mkAnd(enc, p1.getFirst());
        Pair<BoolExpr, MapSSA> p2 = t2.encodeDF(map2, ctx);
        enc = ctx.mkAnd(enc, p2.getFirst());
        enc = ctx.mkAnd(enc, encodeMissingIndexes(this, map1, map2, ctx));
        map = mergeMaps(map1, map2);
        return new Pair<BoolExpr, MapSSA>(enc, map);
    }
}
Also used : MapSSA(dartagnan.utils.MapSSA) Pair(dartagnan.utils.Pair)

Aggregations

MapSSA (dartagnan.utils.MapSSA)1 Pair (dartagnan.utils.Pair)1