[add some more binary peephole optimizations
John Meacham <john@repetae.net>**20070606122941] hunk ./C/OpEval.hs 81
-    f Shr e1 e2 | Just (0,_) <- toConstant e2 = return e1
+    f Shr  e1 e2 | Just (0,_) <- toConstant e2 = return e1
hunk ./C/OpEval.hs 83
-    f Shl e1 e2 | Just (0,_) <- toConstant e2 = return e1
+    f Shl  e1 e2 | Just (0,_) <- toConstant e2 = return e1
hunk ./C/OpEval.hs 87
+    f And e1 e2 | Just (0,_) <- toConstant e1 = return $ toExpression 0 str
+    f Or  e1 e2 | Just (0,_) <- toConstant e1 = return e2
+    f Xor e1 e2 | Just (0,_) <- toConstant e1 = return e2
+
hunk ./C/OpEval.hs 100
-    f Rem e1 e2 | Just (1,_) <- toConstant e2 = return  $ toExpression 0 str
+    f Rem  e1 e2 | Just (1,_) <- toConstant e2 = return  $ toExpression 0 str
hunk ./C/OpEval.hs 102
-    f UGt e1 _ | Just (0,_) <- toConstant e1 = return $ toBool False
+    f UGt  e1 _ | Just (0,_) <- toConstant e1 = return $ toBool False
hunk ./C/OpEval.hs 104
-    f Eq e1 e2 | Just (v1,t1) <- toConstant e1 = return $ caseEquals e2 (v1,t1) (toBool True) (toBool False)
+
+    f UGte e1 e2 | Just (0,t1) <- toConstant e1 = return $ caseEquals e2 (0,t1) (toBool True) (toBool False)
+    f ULt  e1 e2 | Just (0,t1) <- toConstant e1 = return $ caseEquals e2 (0,t1) (toBool False) (toBool True)
+
+    f UGt  e1 e2 | Just (1,t1) <- toConstant e1 = return $ caseEquals e2 (0,t1) (toBool True) (toBool False)
+
+    f Eq  e1 e2 | Just (v1,t1) <- toConstant e1 = return $ caseEquals e2 (v1,t1) (toBool True) (toBool False)
hunk ./C/OpEval.hs 119
-    f Eq e1 e2 | e1 `equalsExpression` e2 = return $ toBool True
+    f Eq  e1 e2 | e1 `equalsExpression` e2 = return $ toBool True
hunk ./C/OpEval.hs 123
-    f Lt e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
-    f Gt e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
+    f Lt  e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
+    f Gt  e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
hunk ./C/OpEval.hs 127
-    f ULt e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
-    f UGt e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
+    f ULt  e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
+    f UGt  e1 e2 | e1 `equalsExpression` e2 = return $ toBool False
hunk ./C/OpEval.hs 133
-    f Or e1 e2 | e1 `equalsExpression` e2 = return e1
+    f Or  e1 e2 | e1 `equalsExpression` e2 = return e1