[don't substitute empty variables in core expressions
John Meacham <john@repetae.net>**20060420082645] hunk ./E/SSimplify.hs 583
-        let ids = case e of
-                EVar v -> insertDoneSubst b (EVar b') . insertInScope (tvrIdent v) (isBoundTo Many (EVar b'))
-                _ -> insertDoneSubst b (EVar b')
+        (ids,b') <- case (e,tvrIdent b') of
+            (EVar v,0) -> do
+                nn <- newName
+                b' <- return b' { tvrIdent = nn }
+                return $ (insertInScope (tvrIdent v) (isBoundTo Many (EVar b')),b')
+            (EVar v,_) -> return $ (insertDoneSubst b (EVar b') . insertInScope (tvrIdent v) (isBoundTo Many (EVar b')),b')
+            _ -> return $ (insertDoneSubst b (EVar b'),b')
hunk ./E/SSimplify.hs 607
-            mins _ e = insertInScope (tvrIdent b') (isBoundTo Many e)
+            mins _ e | 0 `notMember` (freeVars e :: IdSet) = insertInScope (tvrIdent b') (isBoundTo Many e)
+            mins _ _ = id
hunk ./E/SSimplify.hs 751
-                        when (n /= Unused) $ mtick $ "E.Simplify.inline.Atomic.{" ++ showName t ++ "}"
-                        w rs (insertDoneSubst' t e' . insertInScope (tvrIdent t') (isBoundTo n e') $ inb) ds
+                        --when (n /= Unused) $ mtick $ "E.Simplify.inline.Atomic.{" ++ showName t ++ "}"
+                        w rs (insertDoneSubst' t e' . insertInScope (tvrIdent t') ibt $ inb) ((t',e'):ds)
hunk ./E/SSimplify.hs 776
-someBenefit _v ECase {} _ = True
+someBenefit _v ECase {} (_:_) = True