Matthijs Kooijman [Wed, 31 Mar 2010 10:39:44 +0000 (12:39 +0200)]
Only apply eta expansion to expressions at the top level.
Matthijs Kooijman [Wed, 31 Mar 2010 10:38:39 +0000 (12:38 +0200)]
Derive Eq for CoreContext.
Matthijs Kooijman [Wed, 31 Mar 2010 10:38:27 +0000 (12:38 +0200)]
Add LambdaBody to CoreContext.
Matthijs Kooijman [Wed, 31 Mar 2010 09:35:05 +0000 (11:35 +0200)]
Only inline top level functions that are completely applied.
Partial function applications will be inlined in their entirety to make
them fully applied first.
Matthijs Kooijman [Wed, 31 Mar 2010 09:28:51 +0000 (11:28 +0200)]
Inline all simple top level functions, not just compiler-generated ones.
The checking for compiler generated functions wasn't watertight, so
let's just don't check at all. There is no risk for loops with
funextract anymore, since we only inline functions applied in let
bindings now.
Matthijs Kooijman [Wed, 31 Mar 2010 09:03:38 +0000 (11:03 +0200)]
Only inline dictionaries that are likely to be resolvable.
Matthijs Kooijman [Tue, 30 Mar 2010 14:52:13 +0000 (16:52 +0200)]
Only inline top level functions that are applied in a let binding.
This should limit the amount of inlinings that happen a bit, make sure
inlining is only done in later stages of inlining and only when it
actually helps to prevent useless components. This should help to
prevent loops with inlinedict, since dictionary arguments should never
be inlined anymore.
Matthijs Kooijman [Tue, 30 Mar 2010 14:49:51 +0000 (16:49 +0200)]
Add LetBody and LetBinding to the CoreContext.
Matthijs Kooijman [Tue, 30 Mar 2010 13:00:16 +0000 (15:00 +0200)]
Remove notappargs, which is unused now.
Matthijs Kooijman [Tue, 30 Mar 2010 12:59:43 +0000 (14:59 +0200)]
Let eta expansion use the passed context instead of using notappargs.
Matthijs Kooijman [Tue, 30 Mar 2010 12:56:43 +0000 (14:56 +0200)]
Add AppFirst and AddSecond to CoreContext.
Also let subeverywhere set those contexts when appropriate.
Matthijs Kooijman [Tue, 30 Mar 2010 12:25:54 +0000 (14:25 +0200)]
Pass the context in which an expression occurs to each transformation.
Currently, the only context supported is "Other" and contexts are only
passed around and not yet used anywhere.
christiaanb [Tue, 30 Mar 2010 09:50:10 +0000 (11:50 +0200)]
add fromRangedWord function, and add error message to genVarArgs
Christiaan Baaij [Thu, 25 Mar 2010 08:52:36 +0000 (09:52 +0100)]
Merge branch 'master' of git.stderr.nl/matthijs/master-project/cλash
Conflicts:
cλash/CLasH/Normalize.hs
cλash/CLasH/Normalize/NormalizeTools.hs
Christiaan Baaij [Sun, 21 Mar 2010 21:41:38 +0000 (22:41 +0100)]
Fix gencopy' to use proper vhdl names
Christiaan Baaij [Sat, 20 Mar 2010 21:23:45 +0000 (22:23 +0100)]
Add "init" to list of builtin function within NormalizeTools
Christiaan Baaij [Sat, 20 Mar 2010 21:18:43 +0000 (22:18 +0100)]
Move built_in names to different list within NormalizeTools
Christiaan Baaij [Sat, 20 Mar 2010 15:42:05 +0000 (16:42 +0100)]
Fix zipWith template to work with partially applied functions, add support for boolean negation, and update error message of classopresolution transformation
Matthijs Kooijman [Wed, 10 Mar 2010 15:23:34 +0000 (16:23 +0100)]
Don't inline == and /=.
This is a hack to prevent problems caused by the derived Eq instances.
This is not a real solution, though.
Matthijs Kooijman [Wed, 10 Mar 2010 15:05:56 +0000 (16:05 +0100)]
Restructure the top level inlining transformation.
It now checks to see if the original (non-normalized) body is already
simple and only resorts to normalizing if the original body isn't simple
already. This should speed things up a bit, also because inlining the
normalized body probably needs some extra cleanups.
Matthijs Kooijman [Wed, 10 Mar 2010 15:03:51 +0000 (16:03 +0100)]
Don't resolve class operations that are builtin functions.
We already have a fixed VHDL translation for these, and usually the
actual implementation is not translateable (for example, the derived Eq
instances translate dataconstructors to Int#'s and use GHC.Prim.==# to
compare them).
Matthijs Kooijman [Wed, 10 Mar 2010 14:34:52 +0000 (15:34 +0100)]
Use the list of builtin functions for inlining.
Previously a small, fixed list of functions was used for inlining. Now
we use the full list of builtin functions instead.
Matthijs Kooijman [Wed, 10 Mar 2010 14:33:50 +0000 (15:33 +0100)]
Slightly improve normalization debug output.
When tracing individual transformations, their before and after outputs
are now always directly after each other.
Matthijs Kooijman [Wed, 10 Mar 2010 13:54:04 +0000 (14:54 +0100)]
Fix casesimpl and caseremove wrt scrutinee binders.
Previously, they would not check if the scrutinee binder was used,
resulting in it being removed or incorrectly used in some cases.
Matthijs Kooijman [Wed, 10 Mar 2010 12:32:07 +0000 (13:32 +0100)]
Put a list of builtin functions in VHDL.Constants
This will allow normalization to use this list, without creating
circular dependencies by using VHDL.Generate.globalNameTable.
Matthijs Kooijman [Wed, 10 Mar 2010 11:36:55 +0000 (12:36 +0100)]
Let classoperationresolution handle partially inlined dictionaries.
Previously, if a dictionary argument was not yet an application of a
dataconstructor (e.g., completely inlined) but an application of a
polymorphic top level binder (e.g., $fsomething), then it would complain
about mismatching types.
Matthijs Kooijman [Mon, 8 Mar 2010 11:07:27 +0000 (12:07 +0100)]
Make listBindings return IO () instead of IO [()].
The previous type caused ghci to print an extra list of units after the
regular output, while it simple ignores the single tuple now.
Matthijs Kooijman [Mon, 8 Mar 2010 10:54:45 +0000 (11:54 +0100)]
Show classes in listBindings output.
Matthijs Kooijman [Mon, 8 Mar 2010 10:54:26 +0000 (11:54 +0100)]
Show uniques in listBindings output.
Matthijs Kooijman [Mon, 8 Mar 2010 10:35:52 +0000 (11:35 +0100)]
Add class operation resolution transformation.
This transformation enables user-defined type classes.
Matthijs Kooijman [Mon, 8 Mar 2010 09:49:51 +0000 (10:49 +0100)]
Add dictionary inlining transformation.
Matthijs Kooijman [Fri, 5 Mar 2010 17:20:51 +0000 (18:20 +0100)]
Let inlinetoplevel use getNormalized_maybe.
This makes the transformation slightly simpler and prepares it for
inlining dictionaries next.
Matthijs Kooijman [Fri, 5 Mar 2010 17:15:49 +0000 (18:15 +0100)]
Let getNormalized return Nothing on non-normalizeable functions.
Matthijs Kooijman [Fri, 5 Mar 2010 17:14:45 +0000 (18:14 +0100)]
Add variant of isNormalizeable that operates in the TranslatorSession.
Matthijs Kooijman [Fri, 5 Mar 2010 17:12:51 +0000 (18:12 +0100)]
Add variant of isRepr that operates in the TranslatorSession.
Matthijs Kooijman [Fri, 5 Mar 2010 16:54:45 +0000 (17:54 +0100)]
Add getNormalized_maybe that does not fail if a binder was not found.
Matthijs Kooijman [Fri, 5 Mar 2010 16:29:02 +0000 (17:29 +0100)]
Remove getBinding and use getGlobalBind instead.
Matthijs Kooijman [Wed, 3 Mar 2010 13:05:33 +0000 (14:05 +0100)]
Support stateful functions with no own state (only substate).
Matthijs Kooijman [Wed, 3 Mar 2010 13:05:19 +0000 (14:05 +0100)]
Allow inlining of head and friends.
Matthijs Kooijman [Wed, 3 Mar 2010 12:30:44 +0000 (13:30 +0100)]
Use fromMaybe with an error message instead of fromJust.
Matthijs Kooijman [Wed, 3 Mar 2010 12:20:43 +0000 (13:20 +0100)]
Ignore all applications that have an empty result type.
Matthijs Kooijman [Wed, 3 Mar 2010 12:20:22 +0000 (13:20 +0100)]
Copy initial state when specializing functions.
Matthijs Kooijman [Wed, 3 Mar 2010 11:54:52 +0000 (12:54 +0100)]
Ignore selector cases selecting empty typed values.
This occurse when you use unzip in combination with a vector of
substates.
Matthijs Kooijman [Wed, 3 Mar 2010 11:48:20 +0000 (12:48 +0100)]
Support unzipping of a vector containing state values.
Matthijs Kooijman [Wed, 3 Mar 2010 11:48:15 +0000 (12:48 +0100)]
Add some comments.
Matthijs Kooijman [Wed, 3 Mar 2010 10:21:53 +0000 (11:21 +0100)]
Make getFieldLabels errors more verbose.
Matthijs Kooijman [Wed, 3 Mar 2010 10:08:22 +0000 (11:08 +0100)]
Give a proper error when a vector of an empty type is used.
Matthijs Kooijman [Wed, 3 Mar 2010 10:08:11 +0000 (11:08 +0100)]
Allow ! to be inlined.
Matthijs Kooijman [Wed, 3 Mar 2010 09:51:54 +0000 (10:51 +0100)]
Update module name in error message.
Matthijs Kooijman [Mon, 7 Dec 2009 14:11:04 +0000 (15:11 +0100)]
Let scrutinee binder removal mark the expression as changed.
Matthijs Kooijman [Mon, 7 Dec 2009 13:57:55 +0000 (14:57 +0100)]
Also inline some arithmetic operators.
Matthijs Kooijman [Tue, 1 Dec 2009 19:28:49 +0000 (20:28 +0100)]
Add TODO.
Matthijs Kooijman [Mon, 30 Nov 2009 21:52:16 +0000 (22:52 +0100)]
Merge branch 'master' of git://github.com/christiaanb/clash into cλash
* 'master' of git://github.com/christiaanb/clash:
Multiplications are now resized to mimic the behaviour in Haskell
Fix haddock generation
Matthijs Kooijman [Mon, 30 Nov 2009 21:51:55 +0000 (22:51 +0100)]
Add comment.
Christiaan Baaij [Wed, 25 Nov 2009 13:01:31 +0000 (14:01 +0100)]
Multiplications are now resized to mimic the behaviour in Haskell
Christiaan Baaij [Wed, 11 Nov 2009 16:20:23 +0000 (17:20 +0100)]
Fix haddock generation
Christiaan Baaij [Wed, 11 Nov 2009 14:52:33 +0000 (15:52 +0100)]
Merge branch 'cλash' of git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Actually make the scrutinee binder removal not crash.
Add scrutinee binder removal transformation.
Christiaan Baaij [Wed, 11 Nov 2009 14:49:50 +0000 (15:49 +0100)]
Clean up source files:
- Remove unused imports
- Remove unneeded '$'
- Remove unneeded 'do'
- Remove unneeded 'return'
- Replace 'concat $ map' by 'concatMap'
- Replace 'mapM' by 'mapM_' if return value is not stored
- Replace 'not $ x `elem` xs' by 'x `notElem` xs'
Matthijs Kooijman [Wed, 11 Nov 2009 13:38:26 +0000 (14:38 +0100)]
Actually make the scrutinee binder removal not crash.
Matthijs Kooijman [Wed, 11 Nov 2009 11:12:48 +0000 (12:12 +0100)]
Add scrutinee binder removal transformation.
This code is untested, for I have been unable to produce Haskell code to
which it applies...
Christiaan Baaij [Tue, 10 Nov 2009 16:42:18 +0000 (17:42 +0100)]
Use data-accessor-transformers package to remove deprecation warnings
Christiaan Baaij [Tue, 10 Nov 2009 13:49:47 +0000 (14:49 +0100)]
Fixed VHDL Type generation, vhdlTy now uses HType's to generate VHDL Types. Logic from vhdlTy moved to mkHType
Christiaan Baaij [Fri, 6 Nov 2009 12:12:00 +0000 (13:12 +0100)]
Start support on initial state. Substates currently break
Christiaan Baaij [Fri, 6 Nov 2009 12:11:22 +0000 (13:11 +0100)]
Add built-in split function
Christiaan Baaij [Fri, 6 Nov 2009 12:07:21 +0000 (13:07 +0100)]
Update reducer
Christiaan Baaij [Mon, 28 Sep 2009 12:13:47 +0000 (14:13 +0200)]
Fix error message genNegation for non-SizedWord types
Christiaan Baaij [Wed, 23 Sep 2009 12:29:57 +0000 (14:29 +0200)]
Fix bug with generating head and tail functions. Update builtin resize function
Christiaan Baaij [Wed, 9 Sep 2009 12:13:29 +0000 (14:13 +0200)]
Fail again when we try translate a DEFAULT condition
Christiaan Baaij [Wed, 9 Sep 2009 11:57:49 +0000 (13:57 +0200)]
Add some comments
Christiaan Baaij [Wed, 9 Sep 2009 11:42:09 +0000 (13:42 +0200)]
Omit empty block statements in test bench
Christiaan Baaij [Wed, 9 Sep 2009 10:11:43 +0000 (12:11 +0200)]
Add support for multiple alts in case statements
Christiaan Baaij [Wed, 9 Sep 2009 07:27:29 +0000 (09:27 +0200)]
Add support for enumeration types.
The generated VHDL 'show' function is kind of lame, it only prints
the name of the type, not the actual datacon.
Christiaan Baaij [Tue, 8 Sep 2009 11:31:38 +0000 (13:31 +0200)]
Merge branch 'cλash' of git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Add a trailing newline to HighOrdAlu.
Add comments to the inlinetoplevel transformation.
Update comments for inlinenonrep.
Fix typo.
Fix typo.
Christiaan Baaij [Tue, 8 Sep 2009 11:31:18 +0000 (13:31 +0200)]
Add support for fromIntegerT
Christiaan Baaij [Tue, 8 Sep 2009 11:28:17 +0000 (13:28 +0200)]
Add some gt,lt,gteq and lteq boolean operators
Matthijs Kooijman [Tue, 1 Sep 2009 19:26:55 +0000 (21:26 +0200)]
Add a trailing newline to HighOrdAlu.
Matthijs Kooijman [Tue, 1 Sep 2009 19:26:24 +0000 (21:26 +0200)]
Add comments to the inlinetoplevel transformation.
Matthijs Kooijman [Tue, 1 Sep 2009 19:06:55 +0000 (21:06 +0200)]
Update comments for inlinenonrep.
Matthijs Kooijman [Tue, 1 Sep 2009 19:02:50 +0000 (21:02 +0200)]
Fix typo.
Matthijs Kooijman [Tue, 1 Sep 2009 14:39:20 +0000 (16:39 +0200)]
Merge branch 'master' of git://github.com/christiaanb/clash into cλash
* 'master' of git://github.com/christiaanb/clash:
Use boolean as write enable signal
Christiaan Baaij [Sat, 29 Aug 2009 16:11:15 +0000 (18:11 +0200)]
Use boolean as write enable signal
Matthijs Kooijman [Fri, 28 Aug 2009 14:08:21 +0000 (16:08 +0200)]
Fix typo.
Matthijs Kooijman [Fri, 28 Aug 2009 14:07:30 +0000 (16:07 +0200)]
Merge branch 'master' of git://github.com/christiaanb/clash into cλash
* 'master' of git://github.com/christiaanb/clash:
TFP has updated/remade. Change hardwaretypes accordingly
Connect resetn port to states.
Fix the resetn signal in the testbench, it is now correctly '0' for 3 ns, and after that '1'
Christiaan Baaij [Thu, 20 Aug 2009 20:03:46 +0000 (22:03 +0200)]
TFP has updated/remade. Change hardwaretypes accordingly
Delete your old git repo of TFP, it doesn't include the darcs history
from the original TFP from Peter Gavin. Then clone the new TFP.
Christiaan Baaij [Thu, 20 Aug 2009 12:22:09 +0000 (14:22 +0200)]
Connect resetn port to states.
Atleast initial state can now easily be added manual.
Be sure to update to the latest 'vhdl' package as the
old one incorrectly pretty printed the "elsif" keyword
Christiaan Baaij [Thu, 20 Aug 2009 11:56:10 +0000 (13:56 +0200)]
Fix the resetn signal in the testbench, it is now correctly '0' for 3 ns, and after that '1'
Christiaan Baaij [Thu, 20 Aug 2009 07:15:43 +0000 (09:15 +0200)]
Merge branch 'cλash' of git.stderr.nl/matthijs/projects/master-project
* 'cλash' of http://git.stderr.nl/matthijs/projects/master-project:
Add a not in isUserDefined.
Let vhld_ty handle free tyvars gracefully.
Add ty_has_free_tyvars predicate.
Split substitute into substitute and substitute_clone.
Rewrite substitute to clone the substitution range.
Don't error on type abstraction when cloning binders.
When inlining top level functions, guarantee uniqueness.
Make all binders unique before normalizing.
Add genUniques function to regenerate all uniques.
Add mapAccumLM helper function.
Don't try to inline non-normalizeable top level functions.
Add andM and orM utility functions.
Add isNormalizeable predicate.
Make isRepr work on TypedThings instead of CoreExpr.
Also inline functions named "fromInteger".
Don't extra non-representable values in simplres.
Use isUserDefined for (not) inlining top level functions.
Add isUserDefined predicate.
Inline all top level functions that look simple.
Matthijs Kooijman [Wed, 19 Aug 2009 15:54:38 +0000 (17:54 +0200)]
Merge branch 'master' of git://github.com/christiaanb/clash into cλash
* 'master' of git://github.com/christiaanb/clash:
Work around some bugs in the current clash to make reducer compile correctly
Just name the testbench: testbench; don't add the unique
No longer allow slashes in extended names, they are now stripped
Used unsigned instead of natural as representation of RangedWord
Add resetn ports
Matthijs Kooijman [Wed, 19 Aug 2009 15:34:23 +0000 (17:34 +0200)]
Add a not in isUserDefined.
The meaning of isUserDefined was accidentally reversed.
Matthijs Kooijman [Wed, 19 Aug 2009 15:32:11 +0000 (17:32 +0200)]
Let vhld_ty handle free tyvars gracefully.
Previously, free type vars could result in ugly errors from eval_tfp_int
and friends. Now, a type with free type vars is correctly marked as
non-representable.
Matthijs Kooijman [Wed, 19 Aug 2009 15:31:48 +0000 (17:31 +0200)]
Add ty_has_free_tyvars predicate.
Matthijs Kooijman [Wed, 19 Aug 2009 15:14:50 +0000 (17:14 +0200)]
Split substitute into substitute and substitute_clone.
Since cloning is not needed (nor possible) for type substitutions, this
makes things a bit more clear and elegant.
Matthijs Kooijman [Wed, 19 Aug 2009 14:45:54 +0000 (16:45 +0200)]
Rewrite substitute to clone the substitution range.
This makes substitute no longer use CoreSubst for id substitutions, just
for type substitutions (which we don't have to clone before replacing
them). By cloning the substitution range before every substitution, we
keep the binders in it globally unique.
Matthijs Kooijman [Wed, 19 Aug 2009 14:38:35 +0000 (16:38 +0200)]
Don't error on type abstraction when cloning binders.
Since we might encounter type abstractions before normalizations, the old
behaviour broke on polymorphic functions (Though type arguments would have
been propagated, there would still be type abstractions directly applied
to the propagated types).
Note that this not actually clones the type variables, it just leaves them
untouched. Since we should never introduce new type variables, this should
_probably_ work out...
Matthijs Kooijman [Wed, 19 Aug 2009 12:42:58 +0000 (14:42 +0200)]
When inlining top level functions, guarantee uniqueness.
Matthijs Kooijman [Wed, 19 Aug 2009 12:35:23 +0000 (14:35 +0200)]
Make all binders unique before normalizing.
Matthijs Kooijman [Wed, 19 Aug 2009 12:31:03 +0000 (14:31 +0200)]
Add genUniques function to regenerate all uniques.
This function replaces all uniques within an expression with new ones, to
generate their uniqueness.
Matthijs Kooijman [Wed, 19 Aug 2009 12:35:06 +0000 (14:35 +0200)]
Add mapAccumLM helper function.
Matthijs Kooijman [Wed, 19 Aug 2009 10:32:00 +0000 (12:32 +0200)]
Don't try to inline non-normalizeable top level functions.
Since we do normalization before inlining, we should only try this with
functions that can be normalized.
Matthijs Kooijman [Wed, 19 Aug 2009 10:31:48 +0000 (12:31 +0200)]
Add andM and orM utility functions.