clash-lib 0.6.3 → 0.6.4
raw patch · 6 files changed
+26/−13 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ CLaSH.Netlist.Types: instance GHC.Classes.Eq CLaSH.Netlist.Types.Bit
+ CLaSH.Netlist.Types: instance GHC.Classes.Eq CLaSH.Netlist.Types.Literal
- CLaSH.Rewrite.Types: bindings :: Lens' (RewriteState extra_aWNM) (HashMap TmName (Type, Term))
+ CLaSH.Rewrite.Types: bindings :: Lens' (RewriteState extra_aWYS) (HashMap TmName (Type, Term))
- CLaSH.Rewrite.Types: curFun :: Lens' (RewriteState extra_aWNM) TmName
+ CLaSH.Rewrite.Types: curFun :: Lens' (RewriteState extra_aWYS) TmName
- CLaSH.Rewrite.Types: extra :: Lens (RewriteState extra_aWNM) (RewriteState extra_aWQY) extra_aWNM extra_aWQY
+ CLaSH.Rewrite.Types: extra :: Lens (RewriteState extra_aWYS) (RewriteState extra_aX24) extra_aWYS extra_aX24
- CLaSH.Rewrite.Types: nameCounter :: Lens' (RewriteState extra_aWNM) Int
+ CLaSH.Rewrite.Types: nameCounter :: Lens' (RewriteState extra_aWYS) Int
- CLaSH.Rewrite.Types: transformCounter :: Lens' (RewriteState extra_aWNM) Int
+ CLaSH.Rewrite.Types: transformCounter :: Lens' (RewriteState extra_aWYS) Int
- CLaSH.Rewrite.Types: uniqSupply :: Lens' (RewriteState extra_aWNM) Supply
+ CLaSH.Rewrite.Types: uniqSupply :: Lens' (RewriteState extra_aWYS) Supply
Files
- CHANGELOG.md +5/−0
- clash-lib.cabal +1/−1
- src/CLaSH/Netlist.hs +9/−3
- src/CLaSH/Netlist/Types.hs +2/−2
- src/CLaSH/Normalize/DEC.hs +8/−6
- src/CLaSH/Normalize/Transformations.hs +1/−1
CHANGELOG.md view
@@ -1,5 +1,10 @@ # Changelog for the [`clash-lib`](http://hackage.haskell.org/package/clash-lib) package +## 0.6.4 *November 12th 2015*+* Fixes bugs:+ * Reversing alternatives is not meaning preserving for literal patterns [#91](https://github.com/clash-lang/clash-compiler/issues/91)+ * DEC: root of the case-tree must contain at least 2 alternatives [#92](https://github.com/clash-lang/clash-compiler/issues/92)+ ## 0.6.3 *October 24th 2015* * New features: * Improve DEC transformation: consider alternatives before the subject when checking for disjoint expressions.
clash-lib.cabal view
@@ -1,5 +1,5 @@ Name: clash-lib-Version: 0.6.3+Version: 0.6.4 Synopsis: CAES Language for Synchronous Hardware - As a Library Description: CλaSH (pronounced ‘clash’) is a functional hardware description language that
src/CLaSH/Netlist.hs view
@@ -204,16 +204,16 @@ return (decls ++ [Assignment dstId extractExpr]) mkDeclarations bndr (Case scrut altTy alts) = do- alts' <- mapM unbind alts+ alts' <- reorderPats <$> mapM unbind alts tcm <- Lens.use tcCache scrutTy <- termType tcm scrut scrutHTy <- unsafeCoreTypeToHWTypeM $(curLoc) scrutTy altHTy <- unsafeCoreTypeToHWTypeM $(curLoc) altTy- (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (last alts'))) <$> mkExpr True scrutTy scrut+ (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (head alts'))) <$> mkExpr True scrutTy scrut (exprs,altsDecls) <- (second concat . unzip) <$> mapM (mkCondExpr scrutHTy) alts' let dstId = mkBasicId . Text.pack . name2String $ varName bndr- return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy (reverse exprs)]+ return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy exprs] where mkCondExpr :: HWType -> (Pat,Term) -> NetlistMonad ((Maybe HW.Literal,Expr),[Declaration]) mkCondExpr scrutHTy (pat,alt) = do@@ -231,6 +231,12 @@ Identifier scrutId _ -> Identifier scrutId modifier _ -> error $ $(curLoc) ++ "Not in normal form: Not a variable reference or primitive as subject of a case-statement" _ -> scrutE++ -- GHC puts default patterns in the first position, we want them in the+ -- last position.+ reorderPats :: [(Pat,Term)] -> [(Pat,Term)]+ reorderPats ((DefaultPat,e):alts') = alts' ++ [(DefaultPat,e)]+ reorderPats alts' = alts' mkDeclarations bndr app = let (appF,(args,tyArgs)) = second partitionEithers $ collectArgs app
src/CLaSH/Netlist/Types.hs view
@@ -146,7 +146,7 @@ | BoolLit !Bool -- ^ Boolean literal | VecLit [Literal] -- ^ Vector literal | StringLit !String -- ^ String literal- deriving Show+ deriving (Eq,Show) -- | Bit literal data Bit@@ -154,7 +154,7 @@ | L -- ^ Low | U -- ^ Undefined | Z -- ^ High-impedance- deriving Show+ deriving (Eq,Show) -- | Context used to fill in the holes of a BlackBox template data BlackBoxContext
src/CLaSH/Normalize/DEC.hs view
@@ -82,12 +82,14 @@ -- case-expression. isDisjoint :: CaseTree ([Either Term Type]) -> Bool-isDisjoint (Leaf _) = False-isDisjoint (LB _ ct) = isDisjoint ct-isDisjoint (Branch _ []) = False-isDisjoint (Branch _ [(_,x)]) = isDisjoint x-isDisjoint b@(Branch _ (_:_:_)) = allEqual (map Either.rights- (Foldable.toList b))+isDisjoint (Branch _ [_]) = False+isDisjoint ct = go ct+ where+ go (Leaf _) = False+ go (LB _ ct') = go ct'+ go (Branch _ []) = False+ go (Branch _ [(_,x)]) = go x+ go b@(Branch _ (_:_:_)) = allEqual (map Either.rights (Foldable.toList b)) -- Remove empty branches from a 'CaseTree' removeEmpty :: Eq a => CaseTree [a] -> CaseTree [a]
src/CLaSH/Normalize/Transformations.hs view
@@ -982,7 +982,7 @@ -- C -> h x -- @ disjointExpressionConsolidation :: NormRewrite-disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts) = do+disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts@(_:_:_)) = do let eFreeIds = Lens.setOf termFreeIds e (_,collected) <- collectGlobals eFreeIds [] [] e let disJoint = filter (isDisjoint . snd) collected