Search in sources :

Example 1 with BConst

use of com.dat3m.dartagnan.expression.BConst in project Dat3M by hernanponcedeleon.

the class WitnessBuilder method getSCExecutionOrder.

private List<Event> getSCExecutionOrder(Model model) {
    List<Event> execEvents = new ArrayList<>();
    // TODO: we recently added many cline to many events and this might affect the witness generation.
    Predicate<Event> executedCEvents = e -> e.wasExecuted(model) && e.getCLine() > -1;
    execEvents.addAll(task.getProgram().getCache().getEvents(FilterBasic.get(Tag.INIT)).stream().filter(executedCEvents).collect(Collectors.toList()));
    execEvents.addAll(task.getProgram().getEvents().stream().filter(executedCEvents).collect(Collectors.toList()));
    Map<Integer, List<Event>> map = new HashMap<>();
    for (Event e : execEvents) {
        // TODO improve this: these events correspond to return statements
        if (e instanceof MemEvent && ((MemEvent) e).getMemValue() instanceof BConst && !((BConst) ((MemEvent) e).getMemValue()).getValue()) {
            continue;
        }
        BigInteger var = model.evaluate(intVar("hb", e, ctx));
        if (var != null) {
            map.computeIfAbsent(var.intValue(), x -> new ArrayList<>()).add(e);
        }
    }
    List<Event> exec = map.keySet().stream().sorted().flatMap(key -> map.get(key).stream()).collect(Collectors.toList());
    return exec.isEmpty() ? execEvents : exec;
}
Also used : Options(org.sosy_lab.common.configuration.Options) java.util(java.util) Utils.intVar(com.dat3m.dartagnan.wmm.utils.Utils.intVar) MessageDigest(java.security.MessageDigest) SimpleDateFormat(java.text.SimpleDateFormat) EdgeAttributes(com.dat3m.dartagnan.witness.EdgeAttributes) Thread(com.dat3m.dartagnan.program.Thread) WITNESS_ORIGINAL_PROGRAM_PATH(com.dat3m.dartagnan.configuration.OptionNames.WITNESS_ORIGINAL_PROGRAM_PATH) EndAtomic(com.dat3m.dartagnan.program.event.lang.svcomp.EndAtomic) Model(org.sosy_lab.java_smt.api.Model) ProverEnvironment(org.sosy_lab.java_smt.api.ProverEnvironment) Option(org.sosy_lab.common.configuration.Option) Result(com.dat3m.dartagnan.utils.Result) SolverContext(org.sosy_lab.java_smt.api.SolverContext) Program(com.dat3m.dartagnan.program.Program) BigInteger(java.math.BigInteger) FilterBasic(com.dat3m.dartagnan.program.filter.FilterBasic) DateFormat(java.text.DateFormat) PTHREAD(com.dat3m.dartagnan.program.event.Tag.C11.PTHREAD) InvalidConfigurationException(org.sosy_lab.common.configuration.InvalidConfigurationException) VerificationTask(com.dat3m.dartagnan.verification.VerificationTask) Store(com.dat3m.dartagnan.program.event.core.Store) GraphAttributes(com.dat3m.dartagnan.witness.GraphAttributes) Predicate(java.util.function.Predicate) FileInputStream(java.io.FileInputStream) Collectors(java.util.stream.Collectors) MemEvent(com.dat3m.dartagnan.program.event.core.MemEvent) File(java.io.File) Tag(com.dat3m.dartagnan.program.event.Tag) WRITE(com.dat3m.dartagnan.program.event.Tag.WRITE) String.valueOf(java.lang.String.valueOf) SolverException(org.sosy_lab.java_smt.api.SolverException) Event(com.dat3m.dartagnan.program.event.core.Event) BConst(com.dat3m.dartagnan.expression.BConst) Load(com.dat3m.dartagnan.program.event.core.Load) RegWriter(com.dat3m.dartagnan.program.event.core.utils.RegWriter) FAIL(com.dat3m.dartagnan.utils.Result.FAIL) BigInteger(java.math.BigInteger) BConst(com.dat3m.dartagnan.expression.BConst) MemEvent(com.dat3m.dartagnan.program.event.core.MemEvent) MemEvent(com.dat3m.dartagnan.program.event.core.MemEvent) Event(com.dat3m.dartagnan.program.event.core.Event) BigInteger(java.math.BigInteger)

Example 2 with BConst

use of com.dat3m.dartagnan.expression.BConst in project Dat3M by hernanponcedeleon.

the class Simplifier method simplifyJump.

private boolean simplifyJump(Event pred, CondJump jump) {
    Label label = jump.getLabel();
    Event successor = jump.getSuccessor();
    BExpr expr = jump.getGuard();
    if (label.equals(successor) && expr instanceof BConst) {
        label.getListeners().remove(jump);
        pred.setSuccessor(successor);
        return true;
    }
    return false;
}
Also used : BExpr(com.dat3m.dartagnan.expression.BExpr) BConst(com.dat3m.dartagnan.expression.BConst)

Example 3 with BConst

use of com.dat3m.dartagnan.expression.BConst in project Dat3M by hernanponcedeleon.

the class Simplifier method simplifyJump.

private boolean simplifyJump(CondJump jump) {
    Label label = jump.getLabel();
    Event successor = jump.getSuccessor();
    BExpr expr = jump.getGuard();
    if (label.equals(successor) && expr instanceof BConst) {
        jump.delete();
        return true;
    }
    return false;
}
Also used : BExpr(com.dat3m.dartagnan.expression.BExpr) BConst(com.dat3m.dartagnan.expression.BConst) Label(com.dat3m.dartagnan.program.event.core.Label) Event(com.dat3m.dartagnan.program.event.core.Event)

Aggregations

BConst (com.dat3m.dartagnan.expression.BConst)3 BExpr (com.dat3m.dartagnan.expression.BExpr)2 Event (com.dat3m.dartagnan.program.event.core.Event)2 WITNESS_ORIGINAL_PROGRAM_PATH (com.dat3m.dartagnan.configuration.OptionNames.WITNESS_ORIGINAL_PROGRAM_PATH)1 Program (com.dat3m.dartagnan.program.Program)1 Thread (com.dat3m.dartagnan.program.Thread)1 Tag (com.dat3m.dartagnan.program.event.Tag)1 PTHREAD (com.dat3m.dartagnan.program.event.Tag.C11.PTHREAD)1 WRITE (com.dat3m.dartagnan.program.event.Tag.WRITE)1 Label (com.dat3m.dartagnan.program.event.core.Label)1 Load (com.dat3m.dartagnan.program.event.core.Load)1 MemEvent (com.dat3m.dartagnan.program.event.core.MemEvent)1 Store (com.dat3m.dartagnan.program.event.core.Store)1 RegWriter (com.dat3m.dartagnan.program.event.core.utils.RegWriter)1 EndAtomic (com.dat3m.dartagnan.program.event.lang.svcomp.EndAtomic)1 FilterBasic (com.dat3m.dartagnan.program.filter.FilterBasic)1 Result (com.dat3m.dartagnan.utils.Result)1 FAIL (com.dat3m.dartagnan.utils.Result.FAIL)1 VerificationTask (com.dat3m.dartagnan.verification.VerificationTask)1 EdgeAttributes (com.dat3m.dartagnan.witness.EdgeAttributes)1