add some {-# LANGUAGE BangPatterns #-} to mollify GHC
[ghc-hetmet.git] / compiler / cmm / CmmOpt.hs
index 8163073..2dced6a 100644 (file)
@@ -259,6 +259,8 @@ cmmMachOpFold mop args@[CmmLit (CmmInt x xrep), CmmLit (CmmInt y _)]
        MO_Add r -> CmmLit (CmmInt (x + y) r)
        MO_Sub r -> CmmLit (CmmInt (x - y) r)
        MO_Mul r -> CmmLit (CmmInt (x * y) r)
+       MO_U_Quot r | y /= 0 -> CmmLit (CmmInt (x_u `quot` y_u) r)
+       MO_U_Rem  r | y /= 0 -> CmmLit (CmmInt (x_u `rem`  y_u) r)
        MO_S_Quot r | y /= 0 -> CmmLit (CmmInt (x `quot` y) r)
        MO_S_Rem  r | y /= 0 -> CmmLit (CmmInt (x `rem` y) r)
 
@@ -431,12 +433,15 @@ cmmMachOpFold mop args@[x, y@(CmmLit (CmmInt n _))]
        MO_Mul rep
           | Just p <- exactLog2 n ->
                  CmmMachOp (MO_Shl rep) [x, CmmLit (CmmInt p rep)]
+       MO_U_Quot rep
+          | Just p <- exactLog2 n ->
+                 CmmMachOp (MO_U_Shr rep) [x, CmmLit (CmmInt p rep)]
        MO_S_Quot rep
           | Just p <- exactLog2 n, 
             CmmReg _ <- x ->   -- We duplicate x below, hence require
                                -- it is a reg.  FIXME: remove this restriction.
                -- shift right is not the same as quot, because it rounds
-               -- to minus infinity, whereasq uot rounds toward zero.
+               -- to minus infinity, whereasq quot rounds toward zero.
                -- To fix this up, we add one less than the divisor to the
                -- dividend if it is a negative number.
                --