use of com.dat3m.dartagnan.program.analysis.AliasAnalysis in project Dat3M by hernanponcedeleon.
the class AnalysisTest method program5.
private void program5(Alias method, Result... expect) throws InvalidConfigurationException {
ProgramBuilder b = new ProgramBuilder(SourceLanguage.LITMUS);
MemoryObject x = b.getOrNewObject("x");
MemoryObject y = b.getOrNewObject("y");
MemoryObject z = b.getOrNewObject("z");
b.initThread(0);
Register r0 = b.getOrCreateRegister(0, "r0", ARCH_PRECISION);
b.addChild(0, newLocal(r0, y));
Store e0 = newStore(r0);
b.addChild(0, e0);
b.addChild(0, newLocal(r0, mult(x, 0)));
Store e1 = newStore(x);
b.addChild(0, e1);
Store e2 = newStore(y);
b.addChild(0, e2);
Store e3 = newStore(z);
b.addChild(0, e3);
AliasAnalysis a = analyze(b, method);
// precisely no
assertAlias(expect[0], a, e0, e1);
// precisely must
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.program.analysis.AliasAnalysis in project Dat3M by hernanponcedeleon.
the class AnalysisTest method program1.
private void program1(Alias method, Result... expect) throws InvalidConfigurationException {
ProgramBuilder b = new ProgramBuilder(SourceLanguage.LITMUS);
MemoryObject x = b.newObject("x", 3);
x.setInitialValue(0, x);
b.initThread(0);
Store e0 = newStore(plus(x, 1));
b.addChild(0, e0);
Register r0 = b.getOrCreateRegister(0, "r0", ARCH_PRECISION);
Load e1 = newLoad(r0, x);
b.addChild(0, e1);
Store e2 = newStore(r0);
b.addChild(0, e2);
Store e3 = newStore(plus(r0, 1), r0);
b.addChild(0, e3);
AliasAnalysis a = analyze(b, method);
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.program.analysis.AliasAnalysis 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.program.analysis.AliasAnalysis in project Dat3M by hernanponcedeleon.
the class AnalysisTest method program4.
private void program4(Alias method, Result... expect) throws InvalidConfigurationException {
ProgramBuilder b = new ProgramBuilder(SourceLanguage.LITMUS);
MemoryObject x = b.getOrNewObject("x");
MemoryObject y = b.getOrNewObject("y");
MemoryObject z = b.getOrNewObject("z");
b.initThread(0);
Register r0 = b.getOrCreateRegister(0, "r0", ARCH_PRECISION);
b.addChild(0, newLocal(r0, mult(x, 0)));
b.addChild(0, newLocal(r0, y));
Store e0 = newStore(r0);
b.addChild(0, e0);
Store e1 = newStore(x);
b.addChild(0, e1);
Store e2 = newStore(y);
b.addChild(0, e2);
Store e3 = newStore(z);
b.addChild(0, e3);
AliasAnalysis a = analyze(b, method);
// precisely no
assertAlias(expect[0], a, e0, e1);
// precisely must
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.program.analysis.AliasAnalysis in project Dat3M by hernanponcedeleon.
the class AnalysisTest method program0.
private void program0(Alias method, Result... expect) throws InvalidConfigurationException {
ProgramBuilder b = new ProgramBuilder(SourceLanguage.LITMUS);
MemoryObject x = b.newObject("x", 2);
MemoryObject y = b.getOrNewObject("y");
b.initThread(0);
Register r0 = b.getOrCreateRegister(0, "r0", ARCH_PRECISION);
// 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);
}
Aggregations