From ce377516c0de6e03b6b72a870b2020eecee09e77 Mon Sep 17 00:00:00 2001 From: christiaanb Date: Wed, 23 Jun 2010 18:11:00 +0200 Subject: [PATCH] Don't rotate alternatives when there is no default case and there are no binders --- clash/CLasH/VHDL/Generate.hs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/clash/CLasH/VHDL/Generate.hs b/clash/CLasH/VHDL/Generate.hs index df0991c..2fea7a3 100644 --- a/clash/CLasH/VHDL/Generate.hs +++ b/clash/CLasH/VHDL/Generate.hs @@ -310,11 +310,12 @@ mkConcSm (bndr, expr@(CoreSyn.Case (CoreSyn.Var scrut) _ _ alts)) = do -- Compare the (constructor field of the) scrutinee with each of the -- alternatives. let cond_exprs = map (\x -> cmp AST.:=: x) altcons - -- Rotate expressions to the left, so that the expression related to the default case is the last - let alts' = case alts of - ((CoreSyn.DEFAULT,_,_):_) -> ((tail alts) ++ [head alts]) - otherwise -> alts - + -- Rotate expressions to the leftso that the expression related to the default case is the last + -- Does NOT apply when there is no DEFAULT case and there are no binders + let alts' = if ((any (\(_,x,_) -> not (null x)) alts) || ((\(x,_,_)->x) (head alts)) == CoreSyn.DEFAULT ) then + ((tail alts) ++ [head alts]) + else + alts exprs <- MonadState.lift tsType $ mapM (varToVHDLExpr . (\(_,_,CoreSyn.Var expr) -> expr)) alts' --((tail alts) ++ [head alts]) return ([mkAltsAssign (Left bndr) cond_exprs exprs], []) -- 2.30.2