Add empty let removal normalization pass.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Fri, 14 Aug 2009 13:19:28 +0000 (15:19 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Fri, 14 Aug 2009 13:19:28 +0000 (15:19 +0200)
cλash/CLasH/Normalize.hs

index 18010cf56e0cfeebfd0da111e4e53f66c400edcc..8cbebad6978b29b687fbc4e6f1f133e2ac145b42 100644 (file)
@@ -185,6 +185,17 @@ letflat expr = return expr
 -- Perform this transform everywhere
 letflattop = everywhere ("letflat", letflat)
 
+--------------------------------
+-- empty let removal
+--------------------------------
+-- Remove empty (recursive) lets
+letremove, letremovetop :: Transform
+letremove (Let (Rec []) res) = change $ res
+-- Leave all other expressions unchanged
+letremove expr = return expr
+-- Perform this transform everywhere
+letremovetop = everywhere ("letremove", letremove)
+
 --------------------------------
 -- Simple let binding removal
 --------------------------------
@@ -556,7 +567,7 @@ funextracttop = everywhere ("funextract", funextract)
 
 
 -- What transforms to run?
-transforms = [argproptop, funextracttop, etatop, betatop, castproptop, letremovesimpletop, letderectop, letsimpltop, letflattop, scrutsimpltop, casesimpltop, caseremovetop, inlinenonreptop, appsimpltop, letmergetop, letremoveunusedtop, castsimpltop]
+transforms = [argproptop, funextracttop, etatop, betatop, castproptop, letremovesimpletop, letderectop, letremovetop, letsimpltop, letflattop, scrutsimpltop, casesimpltop, caseremovetop, inlinenonreptop, appsimpltop, letmergetop, letremoveunusedtop, castsimpltop]
 
 -- | Returns the normalized version of the given function.
 getNormalized ::