use of com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder in project Dat3M by hernanponcedeleon.
the class UnrollExceptionsTest method FenceCond.
@Test(expected = ProgramProcessingException.class)
public void FenceCond() throws Exception {
ProgramBuilder pb = new ProgramBuilder(SourceLanguage.LITMUS);
pb.initThread(0);
MemoryObject object = pb.getOrNewObject("X");
Label start = pb.getOrCreateLabel("loopStart");
pb.addChild(0, start);
RMWReadCond load = Linux.newRMWReadCondCmp(pb.getOrCreateRegister(0, "r1", 32), BConst.TRUE, object, null);
pb.addChild(0, Linux.newConditionalBarrier(load, null));
pb.addChild(0, EventFactory.newGoto(start));
LoopUnrolling processor = LoopUnrolling.newInstance();
processor.setUnrollingBound(2);
processor.run(pb.build());
}
use of com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder in project Dat3M by hernanponcedeleon.
the class AliasAnalysisTest method program0.
private void program0(Alias method, Result... expect) throws InvalidConfigurationException {
ProgramBuilder b = new ProgramBuilder();
MemoryObject x = b.newObject("x", 2);
MemoryObject y = b.getOrNewObject("y");
b.initThread(0);
Register r0 = b.getOrCreateRegister(0, "r0", -1);
// this is undefined behavior in C11
// the expression does not match a sum, but x occurs in it
b.addChild(0, newLocal(r0, mult(x, 1)));
Store e0 = newStore(r0);
b.addChild(0, e0);
Store e1 = newStore(plus(r0, 1));
b.addChild(0, e1);
Store e2 = newStore(x);
b.addChild(0, e2);
Store e3 = newStore(y);
b.addChild(0, e3);
AliasAnalysis a = analyze(b, method);
// precisely no
assertAlias(expect[0], a, e0, e1);
assertAlias(expect[1], a, e0, e2);
assertAlias(expect[2], a, e1, e2);
assertAlias(expect[3], a, e0, e3);
assertAlias(expect[4], a, e1, e3);
assertAlias(expect[5], a, e2, e3);
}
use of com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder in project Dat3M by hernanponcedeleon.
the class ExceptionsTest method JumpWithNullExpr.
@Test(expected = NullPointerException.class)
public void JumpWithNullExpr() throws Exception {
ProgramBuilder pb = new ProgramBuilder();
pb.initThread(0);
Label end = pb.getOrCreateLabel("END");
// The expr cannot be null
pb.addChild(0, new CondJump(null, end));
}
use of com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder in project Dat3M by hernanponcedeleon.
the class ParserLitmusAArch64 method parse.
@Override
public Program parse(CharStream charStream) {
LitmusAArch64Lexer lexer = new LitmusAArch64Lexer(charStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
LitmusAArch64Parser parser = new LitmusAArch64Parser(tokenStream);
parser.addErrorListener(new DiagnosticErrorListener(true));
parser.addErrorListener(new ParserErrorListener());
ProgramBuilder pb = new ProgramBuilder(SourceLanguage.LITMUS);
ParserRuleContext parserEntryPoint = parser.main();
VisitorLitmusAArch64 visitor = new VisitorLitmusAArch64(pb);
Program program = (Program) parserEntryPoint.accept(visitor);
program.setArch(Arch.ARM8);
return program;
}
use of com.dat3m.dartagnan.parsers.program.utils.ProgramBuilder in project Dat3M by hernanponcedeleon.
the class ParserLitmusX86 method parse.
@Override
public Program parse(CharStream charStream) {
LitmusX86Lexer lexer = new LitmusX86Lexer(charStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
LitmusX86Parser parser = new LitmusX86Parser(tokenStream);
parser.addErrorListener(new DiagnosticErrorListener(true));
parser.addErrorListener(new ParserErrorListener());
ProgramBuilder pb = new ProgramBuilder(SourceLanguage.LITMUS);
ParserRuleContext parserEntryPoint = parser.main();
VisitorLitmusX86 visitor = new VisitorLitmusX86(pb);
Program program = (Program) parserEntryPoint.accept(visitor);
program.setArch(Arch.TSO);
return program;
}
Aggregations