projects
/
matthijs
/
master-project
/
cλash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://github.com/christiaanb/clash
[matthijs/master-project/cλash.git]
/
clash
/
CLasH
/
Normalize.hs
diff --git
a/clash/CLasH/Normalize.hs
b/clash/CLasH/Normalize.hs
index a70829ade05370f51d66c9dbe0575e8e124ef97c..11212f943df0678a4b9cef09fb52657ba06bc2dd 100644
(file)
--- a/
clash/CLasH/Normalize.hs
+++ b/
clash/CLasH/Normalize.hs
@@
-410,15
+410,14
@@
funextract c expr = return expr
-- Make sure the scrutinee of a case expression is a local variable
-- reference.
scrutsimpl :: Transform
-- Make sure the scrutinee of a case expression is a local variable
-- reference.
scrutsimpl :: Transform
--- Don't touch scrutinees that are already simple
-scrutsimpl c expr@(Case (Var _) _ _ _) = return expr
--- Replace all other cases with a let that binds the scrutinee and a new
+-- Replace a case expression with a let that binds the scrutinee and a new
-- simple scrutinee, but only when the scrutinee is representable (to prevent
-- loops with inlinenonrep, though I don't think a non-representable scrutinee
-- simple scrutinee, but only when the scrutinee is representable (to prevent
-- loops with inlinenonrep, though I don't think a non-representable scrutinee
--- will be supported anyway...)
+-- will be supported anyway...)
and is not a local variable already.
scrutsimpl c expr@(Case scrut b ty alts) = do
repr <- isRepr scrut
scrutsimpl c expr@(Case scrut b ty alts) = do
repr <- isRepr scrut
- if repr
+ local_var <- Trans.lift $ is_local_var scrut
+ if repr && not local_var
then do
id <- Trans.lift $ mkBinderFor scrut "scrut"
change $ Let (NonRec id scrut) (Case (Var id) b ty alts)
then do
id <- Trans.lift $ mkBinderFor scrut "scrut"
change $ Let (NonRec id scrut) (Case (Var id) b ty alts)
@@
-821,6
+820,10
@@
inlinenonrepresult context expr | not (is_applicable expr) && not (has_free_tyva
-- Leave all other expressions unchanged
inlinenonrepresult c expr = return expr
-- Leave all other expressions unchanged
inlinenonrepresult c expr = return expr
+----------------------------------------------------------------
+-- Type-class transformations
+----------------------------------------------------------------
+
--------------------------------
-- ClassOp resolution
--------------------------------
--------------------------------
-- ClassOp resolution
--------------------------------