[perform case return unboxing when on the simplifiers upwards pass to have it converge in fewer iterations
John Meacham <john@repetae.net>**20090827085626
 Ignore-this: ead3bf0430a8d4d709885029fa6828a1
] hunk ./src/Grin/SSimplify.hs 47
+data ExpInfo = ExpInfo {
+    expFreeVars :: Set.Set Var,
+    expUnboxing :: UnboxingResult,
+    expType     :: [Ty]
+    }
+
hunk ./src/Grin/SSimplify.hs 95
+        (Case v ls) | isJust utypes -> ans where
+            utypes@(~(Just ts)) = unboxTypes ur
+            ur = foldr1 combineUnboxing [ getUnboxing e | _ :-> e <- ls ]
+            ans = do
+                mtick "Grin.Simplify.Unbox.case-return"
+                let vs = zipWith Var [v1 ..] ts
+                return (unboxModify ur (Case v ls) :>>= vs :-> Return (unboxRet ur vs))
hunk ./src/Grin/SSimplify.hs 172
-    f (Case v ls) rs | isJust utypes = ans where
-        utypes@(~(Just ts)) = unboxTypes ur
-        ur = foldr1 combineUnboxing [ getUnboxing e | _ :-> e <- ls ]
-        ans = do
-            mtick "Grin.Simplify.Unbox.case-return"
-            let vs = zipWith Var [v1 ..] ts
-            f (unboxModify ur (Case v ls) :>>= vs :-> Return (unboxRet ur vs)) rs
+--    f e@(Case v ls) rs | isJust utypes  = ans where
+--        utypes@(~(Just ts)) = unboxTypes ur
+--        ur = foldr1 combineUnboxing [ getUnboxing e | _ :-> e <- ls ]
+--        ans = do
+--            mtick "Grin.Simplify.Unbox.case-return"
+--            let vs = zipWith Var [v1 ..] ts
+--            f (unboxModify ur (Case v ls) :>>= vs :-> Return (unboxRet ur vs)) rs
hunk ./src/Grin/SSimplify.hs 264
-data UnboxingResult = UnErr [Ty] | UnTup [Unbox]
+data UnboxingResult = UnErr [Ty] | UnTup [Unbox] -- | UnTail (Set.Set Atom) UnboxingResult
hunk ./src/Grin/SSimplify.hs 284
+    f UnErr {} _ = []
hunk ./src/Grin/SSimplify.hs 293
-    f UnErr {} = Nothing
+    f (UnErr []) = Nothing
+    f (UnErr (_:_)) = Just []
hunk ./src/Grin/SSimplify.hs 303
-    nty = getType ur
+    Just nty = unboxTypes ur
hunk ./src/Grin/SSimplify.hs 316
+--    f (UnTail t1 u1) UnTail t2 u2) = UnTail (t1 `Set.append` t2) (f u1 u2)