Search in sources :

Example 1 with Pair

use of dartagnan.utils.Pair 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)

Example 2 with Pair

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

the class Local method encodeDF.

public Pair<BoolExpr, MapSSA> encodeDF(MapSSA map, Context ctx) throws Z3Exception {
    if (mainThread == null) {
        System.out.println(String.format("Check encodeDF for %s", this));
        return null;
    } else {
        Expr z3Expr = expr.toZ3(map, ctx);
        Expr z3Reg = ssaReg(reg, map.getFresh(reg), ctx);
        this.ssaRegIndex = map.get(reg);
        return new Pair<BoolExpr, MapSSA>(ctx.mkImplies(executes(ctx), ctx.mkEq(z3Reg, z3Expr)), map);
    }
}
Also used : AExpr(dartagnan.expression.AExpr) Pair(dartagnan.utils.Pair)

Aggregations

Pair (dartagnan.utils.Pair)2 AExpr (dartagnan.expression.AExpr)1 MapSSA (dartagnan.utils.MapSSA)1