[add new grin optimizatons, case merging and getting rid of superfluous returns
John Meacham <john@repetae.net>**20090827104336
 Ignore-this: f51022870646e7c56169f177937f49d0
] hunk ./src/Grin/SSimplify.hs 102
+        (Case v1 ls) | [v1'] :-> Case v2 ls' <- last ls, v1' == v2 || v1 == v2 -> do
+            let f (p :-> e) = p :-> Return [v1] :>>= [v1'] :-> e
+            mtick "Grin.Simplify.case-merge"
+            return $ Case v1 (init ls ++ map f ls')
+        --(e :>>= p :-> Return p') | p == p' -> do
+        --    mtick "Grin.Simplify.tail-return-omit"
+        --    return e
hunk ./src/Grin/SSimplify.hs 143
+    f (e :>>= p :-> Return p') rs | p == p' = do
+        mtick "Grin.Simplify.tail-return-omit"
+        f e rs
hunk ./src/Grin/SSimplify.hs 274
-data UnboxingResult = UnErr [Ty] | UnTup [Unbox] -- | UnTail (Set.Set Atom) UnboxingResult
+data UnboxingResult = UnErr [Ty] | UnTup [Unbox] | UnTail (Set.Set Atom) UnboxingResult
hunk ./src/Grin/SSimplify.hs 303
+    f (UnTail {}) = Nothing
hunk ./src/Grin/SSimplify.hs 327
---    f (UnTail t1 u1) UnTail t2 u2) = UnTail (t1 `Set.append` t2) (f u1 u2)
+    f (UnTail t1 u1) (UnTail t2 u2) = UnTail (t1 `Set.union` t2) (f u1 u2)
+    f (UnTail t1 u1) u2 = UnTail t1 (f u1 u2)
+    f u1 (UnTail t2 u2) = UnTail t2 (f u1 u2)
hunk ./src/Grin/SSimplify.hs 342
---    f (Case _ ls) = foldr1 combineUnboxing  [ f e | _ :-> e <- ls ]
+    f (App f _ ts) = UnTail (Set.singleton f) (UnErr ts)
+    f (Case _ ls) = foldr1 combineUnboxing  [ f e | _ :-> e <- ls ]