aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Reduce.hs
diff options
context:
space:
mode:
authorYann Herklotz <git@ymhg.org>2019-04-29 18:33:36 +0100
committerYann Herklotz <git@ymhg.org>2019-04-29 18:33:36 +0100
commit5c4bf34321e9ba334bcb4629f8cdf75b5e4912f0 (patch)
tree63776a53bbdcea8dd252080cba278b07b44cd920 /src/VeriFuzz/Reduce.hs
parent1f92f329dabfaf5077bed677a273a196667229e1 (diff)
downloadverismith-5c4bf34321e9ba334bcb4629f8cdf75b5e4912f0.tar.gz
verismith-5c4bf34321e9ba334bcb4629f8cdf75b5e4912f0.zip
Add more reduction to tests
Diffstat (limited to 'src/VeriFuzz/Reduce.hs')
-rw-r--r--src/VeriFuzz/Reduce.hs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/VeriFuzz/Reduce.hs b/src/VeriFuzz/Reduce.hs
index 61b83df..cf7a302 100644
--- a/src/VeriFuzz/Reduce.hs
+++ b/src/VeriFuzz/Reduce.hs
@@ -102,6 +102,13 @@ cleanMod m newm = modify . change <$> newm
$ l
^. modItems
+halveStatements :: Statement -> Replacement Statement
+halveStatements (SeqBlock l) = SeqBlock <$> halve l
+halveStatements (CondStmnt _ (Just a) b) = maybe (Single a) (Dual a) b
+halveStatements (CondStmnt _ Nothing b) = maybe None Single b
+halveStatements (ForLoop _ _ _ s) = Single s
+halveStatements _ = None
+
-- | Split a module declaration in half by trying to remove assign statements.
halveAssigns :: SourceInfo -> Replacement SourceInfo
halveAssigns = combine mainModule halveModAssign
@@ -145,7 +152,7 @@ reduce_ repl eval src = do
_ -> return src
where
replacement = repl src
- runIf s = if s /= src then reduce eval s else return s
+ runIf s = if s /= src then reduce_ repl eval s else return s
evalIfNotEmpty m = do
print
$ GenVerilog
@@ -161,4 +168,5 @@ reduce
:: (SourceInfo -> IO Bool) -- ^ Failed or not.
-> SourceInfo -- ^ Input verilog source to be reduced.
-> IO SourceInfo -- ^ Reduced output.
-reduce eval src = reduce_ halveAssigns eval src >>= reduce_ halveExpr eval
+reduce eval src = red halveAssigns src >>= red halveExpr
+ where red a = reduce_ a eval