[simplify primitive operations inside of other primitive options
John Meacham <john@repetae.net>**20090327032958
 Ignore-this: c2495d67c5019117f19b4cb41669ee10
] hunk ./Cmm/Op.hs 368
-    isEagerSafe Sin = False
-    isEagerSafe Sqrt = False
hunk ./Cmm/Op.hs 379
+    isCheap (ConvOp o _) = isCheap o
hunk ./Cmm/OpEval.hs 91
-    f FDiv v1 v2 | v2 /= 0 = return $ toExpression (v1 / v2) str
hunk ./E/PrimOpt.hs 2
-    primOpt',
+    performPrimOpt,
hunk ./E/PrimOpt.hs 112
-primOpt' dataTable  e@(EPrim (APrim s _) xs t) = do
+
+performPrimOpt (ELit lc@LitCons { litArgs = xs }) = do
+    xs' <- mapM performPrimOpt xs
+    primOpt' (ELit lc { litArgs = xs' })
+performPrimOpt (EPrim ap xs t) = do
+    xs' <- mapM performPrimOpt xs
+    primOpt' (EPrim ap xs' t)
+performPrimOpt e = return e
+
+
+primOpt' e@(EPrim (APrim s _) xs t) = do
hunk ./E/PrimOpt.hs 128
-            _ -> fail "could noUnt apply conversion optimization"
+            _ -> fail "couldn't apply conversion optimization"
hunk ./E/PrimOpt.hs 134
-            primOpt' dataTable  n
+            primOpt' n
hunk ./E/PrimOpt.hs 136
-primOpt' _ e = return e
+primOpt' e = return e
hunk ./E/SSimplify.hs 519
-        ep' <- primOpt' (progDataTable prog) ep
+        ep' <- performPrimOpt ep
hunk ./E/SSimplify.hs 522
+    f cont (ELit lc@LitCons { litArgs = xs }) = do
+        xs' <- mapM performPrimOpt xs
+        dosub (ELit lc { litArgs = xs' }) >>= done cont