Changed things in the transformations directory in light of the new step count
This commit is contained in:
parent
594d7ef242
commit
6693a8b8b9
|
@ -227,7 +227,8 @@ testTransformConstr0 = TestCase $ testPass "transformConstr0" exp transformConst
|
||||||
|
|
||||||
orig = A.Spec m (A.Specification m (simpleName "arr") $
|
orig = A.Spec m (A.Specification m (simpleName "arr") $
|
||||||
A.IsExpr m A.ValAbbrev t $ A.ExprConstr m $
|
A.IsExpr m A.ValAbbrev t $ A.ExprConstr m $
|
||||||
A.RepConstr m t (simpleName "x") (A.For m (intLiteral 0) (intLiteral 10))
|
A.RepConstr m t (simpleName "x") (A.For m (intLiteral 0) (intLiteral 10)
|
||||||
|
(intLiteral 1))
|
||||||
(exprVariable "x")) skipP
|
(exprVariable "x")) skipP
|
||||||
exp = nameAndStopCaringPattern "indexVar" "i" $ mkPattern exp'
|
exp = nameAndStopCaringPattern "indexVar" "i" $ mkPattern exp'
|
||||||
exp' = A.Spec m (A.Specification m (simpleName "arr") (A.Declaration m t)) $
|
exp' = A.Spec m (A.Specification m (simpleName "arr") (A.Declaration m t)) $
|
||||||
|
@ -236,7 +237,7 @@ testTransformConstr0 = TestCase $ testPass "transformConstr0" exp transformConst
|
||||||
(A.Declaration m A.Int)) $
|
(A.Declaration m A.Int)) $
|
||||||
A.Several m [A.Only m $ A.Assign m [variable "i"] $
|
A.Several m [A.Only m $ A.Assign m [variable "i"] $
|
||||||
A.ExpressionList m [intLiteral 0],
|
A.ExpressionList m [intLiteral 0],
|
||||||
A.Spec m (A.Specification m (simpleName "x") $ A.Rep m (A.For m (intLiteral 0) (intLiteral 10))) $
|
A.Spec m (A.Specification m (simpleName "x") $ A.Rep m (A.For m (intLiteral 0) (intLiteral 10) (intLiteral 1))) $
|
||||||
A.Only m $ A.Seq m $ A.Several m
|
A.Only m $ A.Seq m $ A.Several m
|
||||||
[A.Only m $ A.Assign m
|
[A.Only m $ A.Assign m
|
||||||
[A.SubscriptedVariable m (A.Subscript m A.NoCheck $
|
[A.SubscriptedVariable m (A.Subscript m A.NoCheck $
|
||||||
|
@ -586,7 +587,7 @@ testPullRepCounts = TestList
|
||||||
,forAllThree $ \blockType -> testOccamPassTransform "testPullRepCounts 5" (nameAndStopCaringPattern "nonce" "A")
|
,forAllThree $ \blockType -> testOccamPassTransform "testPullRepCounts 5" (nameAndStopCaringPattern "nonce" "A")
|
||||||
(blockType
|
(blockType
|
||||||
[decl' (simpleName "X")
|
[decl' (simpleName "X")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 6)))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 6) (intLiteral 1)))
|
||||||
A.Original A.NameUser []
|
A.Original A.NameUser []
|
||||||
]
|
]
|
||||||
`becomes`
|
`becomes`
|
||||||
|
@ -594,7 +595,7 @@ testPullRepCounts = TestList
|
||||||
[decl' (simpleName "A")
|
[decl' (simpleName "A")
|
||||||
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 6) A.ValAbbrev A.NameNonce
|
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 6) A.ValAbbrev A.NameNonce
|
||||||
[decl' (simpleName "X")
|
[decl' (simpleName "X")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (exprVariable "A")))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (exprVariable "A") (intLiteral 1)))
|
||||||
A.Original A.NameUser []
|
A.Original A.NameUser []
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -604,10 +605,10 @@ testPullRepCounts = TestList
|
||||||
(nameAndStopCaringPattern "nonce1" "A" . nameAndStopCaringPattern "nonce2" "B")
|
(nameAndStopCaringPattern "nonce1" "A" . nameAndStopCaringPattern "nonce2" "B")
|
||||||
(blockType
|
(blockType
|
||||||
[decl' (simpleName "X")
|
[decl' (simpleName "X")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 6)))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 6) (intLiteral 1)))
|
||||||
A.Original A.NameUser
|
A.Original A.NameUser
|
||||||
[decl' (simpleName "Y")
|
[decl' (simpleName "Y")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 1) (intLiteral 8)))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 1) (intLiteral 8) (intLiteral 2)))
|
||||||
A.Original A.NameUser []
|
A.Original A.NameUser []
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -616,12 +617,13 @@ testPullRepCounts = TestList
|
||||||
[decl' (simpleName "A")
|
[decl' (simpleName "A")
|
||||||
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 6) A.ValAbbrev A.NameNonce
|
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 6) A.ValAbbrev A.NameNonce
|
||||||
[decl' (simpleName "X")
|
[decl' (simpleName "X")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (exprVariable "A")))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (exprVariable "A") (intLiteral 1)))
|
||||||
A.Original A.NameUser
|
A.Original A.NameUser
|
||||||
[decl' (simpleName "B")
|
[decl' (simpleName "B")
|
||||||
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 8) A.ValAbbrev A.NameNonce
|
(A.IsExpr emptyMeta A.ValAbbrev A.Int $ intLiteral 8) A.ValAbbrev A.NameNonce
|
||||||
[decl' (simpleName "Y")
|
[decl' (simpleName "Y")
|
||||||
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 1) (exprVariable "B")))
|
(A.Rep emptyMeta (A.For emptyMeta (intLiteral 1) (exprVariable "B")
|
||||||
|
(intLiteral 2)))
|
||||||
A.Original A.NameUser
|
A.Original A.NameUser
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
|
@ -642,7 +644,8 @@ testPullRepCounts = TestList
|
||||||
(return ())
|
(return ())
|
||||||
where
|
where
|
||||||
code = (f $ A.Spec emptyMeta (A.Specification emptyMeta (simpleName
|
code = (f $ A.Spec emptyMeta (A.Specification emptyMeta (simpleName
|
||||||
"i") $ A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 5))) $ A.Several emptyMeta [])
|
"i") $ A.Rep emptyMeta (A.For emptyMeta (intLiteral 0) (intLiteral 5)
|
||||||
|
(intLiteral 1))) $ A.Several emptyMeta [])
|
||||||
|
|
||||||
|
|
||||||
testRemoveNesting :: Test
|
testRemoveNesting :: Test
|
||||||
|
|
|
@ -159,6 +159,8 @@ expandArrayLiterals = pass "Expand array literals"
|
||||||
-- Therefore, we only need to pull up the counts for SEQ, PAR and ALT
|
-- Therefore, we only need to pull up the counts for SEQ, PAR and ALT
|
||||||
--
|
--
|
||||||
-- TODO for simplification, we could avoid pulling up replication counts that are known to be constants
|
-- TODO for simplification, we could avoid pulling up replication counts that are known to be constants
|
||||||
|
--
|
||||||
|
-- TODO we should also pull up the step counts
|
||||||
pullRepCounts :: Pass
|
pullRepCounts :: Pass
|
||||||
pullRepCounts = pass "Pull up replicator counts for SEQs, PARs and ALTs"
|
pullRepCounts = pass "Pull up replicator counts for SEQs, PARs and ALTs"
|
||||||
(Prop.agg_namesDone ++ Prop.agg_typesDone)
|
(Prop.agg_namesDone ++ Prop.agg_typesDone)
|
||||||
|
@ -170,10 +172,10 @@ pullRepCounts = pass "Pull up replicator counts for SEQs, PARs and ALTs"
|
||||||
where
|
where
|
||||||
pullRepCount :: Data a => A.Structured a -> PassM (A.Structured a)
|
pullRepCount :: Data a => A.Structured a -> PassM (A.Structured a)
|
||||||
pullRepCount (A.Spec m (A.Specification mspec n (A.Rep mrep (A.For mfor
|
pullRepCount (A.Spec m (A.Specification mspec n (A.Rep mrep (A.For mfor
|
||||||
from for))) scope)
|
from for step))) scope)
|
||||||
= do t <- astTypeOf for
|
= do t <- astTypeOf for
|
||||||
spec@(A.Specification _ nonceName _) <- makeNonceIsExpr "rep_for" mspec t for
|
spec@(A.Specification _ nonceName _) <- makeNonceIsExpr "rep_for" mspec t for
|
||||||
let newSpec = (A.Rep mrep (A.For mfor from (A.ExprVariable mspec $ A.Variable mspec nonceName)))
|
let newSpec = (A.Rep mrep (A.For mfor from (A.ExprVariable mspec $ A.Variable mspec nonceName) step))
|
||||||
modifyName n $ \nd -> nd { A.ndSpecType = newSpec }
|
modifyName n $ \nd -> nd { A.ndSpecType = newSpec }
|
||||||
return $ A.Spec mspec spec $
|
return $ A.Spec mspec spec $
|
||||||
A.Spec m (A.Specification mspec n newSpec) scope
|
A.Spec m (A.Specification mspec n newSpec) scope
|
||||||
|
|
|
@ -122,7 +122,7 @@ flattenAssign = pass "Flatten assignment"
|
||||||
-- inside.
|
-- inside.
|
||||||
do counter <- makeNonceCounter "i" m
|
do counter <- makeNonceCounter "i" m
|
||||||
let zero = A.Literal m A.Int $ A.IntLiteral m "0"
|
let zero = A.Literal m A.Int $ A.IntLiteral m "0"
|
||||||
let rep = A.For m zero (A.SizeVariable m srcV)
|
let rep = A.For m zero (A.SizeVariable m srcV) (makeConstant m 1)
|
||||||
itemT <- trivialSubscriptType m t
|
itemT <- trivialSubscriptType m t
|
||||||
-- Don't need to check bounds, as we'll always be within bounds
|
-- Don't need to check bounds, as we'll always be within bounds
|
||||||
let sub = A.Subscript m A.NoCheck (A.ExprVariable m
|
let sub = A.Subscript m A.NoCheck (A.ExprVariable m
|
||||||
|
|
Loading…
Reference in New Issue
Block a user