summaryrefslogtreecommitdiff
path: root/Source/Concurrency/MoverCheck.cs
diff options
context:
space:
mode:
authorGravatar qadeer <unknown>2013-12-25 16:16:53 -0800
committerGravatar qadeer <unknown>2013-12-25 16:16:53 -0800
commit01851d0ad1e1976c7659d80e1d97c7e8f86724e1 (patch)
treee327a3e58069c43b6988dc0ba07c7111bef6312f /Source/Concurrency/MoverCheck.cs
parent147b155073406f7d279ab8d3884fd2468227b5a3 (diff)
fixed a bug in mover checking; wasn't generating enough commutativity checks
Diffstat (limited to 'Source/Concurrency/MoverCheck.cs')
-rw-r--r--Source/Concurrency/MoverCheck.cs31
1 files changed, 19 insertions, 12 deletions
diff --git a/Source/Concurrency/MoverCheck.cs b/Source/Concurrency/MoverCheck.cs
index 579c9cf6..76a4b098 100644
--- a/Source/Concurrency/MoverCheck.cs
+++ b/Source/Concurrency/MoverCheck.cs
@@ -109,25 +109,32 @@ namespace Microsoft.Boogie
Program program = moverTypeChecker.program;
MoverCheck moverChecking = new MoverCheck(linearTypeChecker, moverTypeChecker, decls);
- foreach (int phaseNum in pools.Keys)
+ foreach (int phaseNum1 in pools.Keys)
{
- foreach (ActionInfo first in pools[phaseNum])
+ foreach (ActionInfo first in pools[phaseNum1])
{
Debug.Assert(first.moverType != MoverType.Top);
if (first.moverType == MoverType.Atomic)
continue;
- foreach (ActionInfo second in pools[phaseNum])
+ foreach (int phaseNum2 in pools.Keys)
{
- if (first.IsRightMover)
+ if (phaseNum2 < phaseNum1) continue;
+ foreach (ActionInfo second in pools[phaseNum2])
{
- moverChecking.CreateCommutativityChecker(program, first, second);
- moverChecking.CreateGatePreservationChecker(program, second, first);
- }
- if (first.IsLeftMover)
- {
- moverChecking.CreateCommutativityChecker(program, second, first);
- moverChecking.CreateGatePreservationChecker(program, first, second);
- moverChecking.CreateFailurePreservationChecker(program, second, first);
+ if (second.phaseNum < phaseNum1)
+ {
+ if (first.IsRightMover)
+ {
+ moverChecking.CreateCommutativityChecker(program, first, second);
+ moverChecking.CreateGatePreservationChecker(program, second, first);
+ }
+ if (first.IsLeftMover)
+ {
+ moverChecking.CreateCommutativityChecker(program, second, first);
+ moverChecking.CreateGatePreservationChecker(program, first, second);
+ moverChecking.CreateFailurePreservationChecker(program, second, first);
+ }
+ }
}
}
}