Fix #2838: we should narrow a CmmInt before converting to ImmInteger
[ghc-hetmet.git] / compiler / nativeGen / MachRegs.lhs
index 5267e5b..0c21f21 100644 (file)
@@ -229,7 +229,10 @@ data Imm
 strImmLit s = ImmLit (text s)
 
 litToImm :: CmmLit -> Imm
-litToImm (CmmInt i _)        = ImmInteger i
+litToImm (CmmInt i w)        = ImmInteger (narrowS w i)
+                -- narrow to the width: a CmmInt might be out of
+                -- range, but we assume that ImmInteger only contains
+                -- in-range values.  A signed value should be fine here.
 litToImm (CmmFloat f W32)    = ImmFloat f
 litToImm (CmmFloat f W64)    = ImmDouble f
 litToImm (CmmLabel l)        = ImmCLbl l
@@ -616,7 +619,6 @@ trivColorable :: RegClass -> UniqSet Reg -> UniqSet Reg -> Bool
 trivColorable classN conflicts exclusions
  = {-# SCC "trivColorable" #-}
    let
-       {-# INLINE   isSqueesed    #-}
        isSqueesed cI cF ufm
          = case ufm of
                NodeUFM _ _ left right