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;
}
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;
}
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;
}
Aggregations