summaryrefslogtreecommitdiff
path: root/Source/VCGeneration/VCGeneration.csproj
diff options
context:
space:
mode:
authorGravatar Peter Collingbourne <peter@pcc.me.uk>2012-07-30 21:47:22 +0100
committerGravatar Peter Collingbourne <peter@pcc.me.uk>2012-07-30 21:47:22 +0100
commit4dd73ec05586f46a9c7a2aa01e0994dbe7ac2620 (patch)
tree5865c880c09bbdfcab0876c08907ae55565f1845 /Source/VCGeneration/VCGeneration.csproj
parent8ea7cfda6b3fdb522fef0600166899f96d1b91b8 (diff)
VCGeneration: implement smart predication
This predication algorithm is intended to reduce the complexity of predicated verification conditions by reducing the amount of predicated state and using only boolean algebra, as opposed to the previous algorithm which also uses integers. It assigns a unique predicate to every superblock, which is defined per Agrawal [1] except that superblocks are further partitioned such that either no element of the same superblock may be contained within a natural loop or each element of the superblock has the same innermost natural loop head. Predicates are assigned at the element of the superblock which dominates all others, and are reset to false at a loop head and at the start of a procedure in order to ensure correct execution for future iterations. When exiting a loop, all predicates corresponding to heads of exited loops are reset to false. The algorithm requires that every successor at every divergence point in the CFG contains assumes marked with an attribute (called ':partition') which a frontend uses to certify to the predicator that for each block, if each successor of that block contains an assume statement marked with :partition, exactly one of those assume statement's predicates will hold. The frontend we use for GPUVerify generates such attributes, and as such the new predicator is only used there, and the old predicator has been retained for Corral etc. [1] Hiralal Agrawal. Dominators, super blocks, and program coverage. In POPL '94, p25-34.
Diffstat (limited to 'Source/VCGeneration/VCGeneration.csproj')
-rw-r--r--Source/VCGeneration/VCGeneration.csproj3
1 files changed, 2 insertions, 1 deletions
diff --git a/Source/VCGeneration/VCGeneration.csproj b/Source/VCGeneration/VCGeneration.csproj
index 39da0be6..780e4891 100644
--- a/Source/VCGeneration/VCGeneration.csproj
+++ b/Source/VCGeneration/VCGeneration.csproj
@@ -155,6 +155,7 @@
<Compile Include="GraphAlgorithms.cs" />
<Compile Include="HasseDiagram.cs" />
<Compile Include="OrderingAxioms.cs" />
+ <Compile Include="SmartBlockPredicator.cs" />
<Compile Include="StratifiedVC.cs" />
<Compile Include="VC.cs" />
<Compile Include="VCDoomed.cs" />
@@ -223,4 +224,4 @@
<Target Name="AfterBuild">
</Target>
-->
-</Project> \ No newline at end of file
+</Project>