Remove some unnecessary imports
[ghc-hetmet.git] / compiler / cmm / PprC.hs
index 47a2315..ceadebe 100644 (file)
@@ -54,11 +54,6 @@ import Data.Char
 import System.IO
 import Data.Word
 
-#ifdef DEBUG
-import PprCmm          () -- instances only
--- import Debug.Trace
-#endif
-
 import Data.Array.ST
 import Control.Monad.ST
 
@@ -145,7 +140,6 @@ pprTop top@(CmmData _section (CmmDataLabel lbl : lits)) =
 -- these shouldn't appear?
 pprTop (CmmData _ _) = panic "PprC.pprTop: can't handle this data"
 
-
 -- --------------------------------------------------------------------------
 -- BasicBlocks are self-contained entities: they always end in a jump.
 --
@@ -246,9 +240,9 @@ pprCFunType cconv ress args
    ]
   where
        res_type [] = ptext SLIT("void")
-       res_type [(one,hint)] = machRepHintCType (localRegRep one) hint
+       res_type [CmmHinted one hint] = machRepHintCType (localRegRep one) hint
 
-       arg_type (expr,hint) = machRepHintCType (cmmExprRep expr) hint
+       arg_type (CmmHinted expr hint) = machRepHintCType (cmmExprRep expr) hint
 
 -- ---------------------------------------------------------------------
 -- unconditional branches
@@ -426,7 +420,13 @@ pprLit1 other = pprLit other
 pprStatics :: [CmmStatic] -> [SDoc]
 pprStatics [] = []
 pprStatics (CmmStaticLit (CmmFloat f F32) : rest) 
+  -- floats are padded to a word, see #1852
+  | wORD_SIZE == 8, CmmStaticLit (CmmInt 0 I32) : rest' <- rest
+  = pprLit1 (floatToWord f) : pprStatics rest'
+  | wORD_SIZE == 4
   = pprLit1 (floatToWord f) : pprStatics rest
+  | otherwise
+  = pprPanic "pprStatics: float" (vcat (map (\(CmmStaticLit l) -> ppr (cmmLitRep l)) rest))
 pprStatics (CmmStaticLit (CmmFloat f F64) : rest)
   = map pprLit1 (doubleToWords f) ++ pprStatics rest
 pprStatics (CmmStaticLit (CmmInt i I64) : rest)
@@ -750,17 +750,17 @@ pprCall ppr_fn cconv results args _
     ppr_assign results (ppr_fn <> parens (commafy (map pprArg args))) <> semi
   where 
      ppr_assign []           rhs = rhs
-     ppr_assign [(one,hint)] rhs
+     ppr_assign [CmmHinted one hint] rhs
         = pprLocalReg one <> ptext SLIT(" = ")
                 <> pprUnHint hint (localRegRep one) <> rhs
      ppr_assign _other _rhs = panic "pprCall: multiple results"
 
-     pprArg (expr, PtrHint)
+     pprArg (CmmHinted expr PtrHint)
        = cCast (ptext SLIT("void *")) expr
        -- see comment by machRepHintCType below
-     pprArg (expr, SignedHint)
+     pprArg (CmmHinted expr SignedHint)
        = cCast (machRepSignedCType (cmmExprRep expr)) expr
-     pprArg (expr, _other)
+     pprArg (CmmHinted expr _other)
        = pprExpr expr
 
      pprUnHint PtrHint    rep = parens (machRepCType rep)
@@ -783,7 +783,7 @@ is_cish StdCallConv = True
 -- 
 pprTempAndExternDecls :: [CmmBasicBlock] -> (SDoc{-temps-}, SDoc{-externs-})
 pprTempAndExternDecls stmts 
-  = (vcat (map pprTempDecl (eltsUFM temps)), 
+  = (vcat (map pprTempDecl (uniqSetToList temps)), 
      vcat (map (pprExternDecl False{-ToDo-}) (keysFM lbls)))
   where (temps, lbls) = runTE (mapM_ te_BB stmts)
 
@@ -844,8 +844,8 @@ te_Lit _ = return ()
 te_Stmt :: CmmStmt -> TE ()
 te_Stmt (CmmAssign r e)                = te_Reg r >> te_Expr e
 te_Stmt (CmmStore l r)         = te_Expr l >> te_Expr r
-te_Stmt (CmmCall _ rs es _ _)  = mapM_ (te_temp.fst) rs >>
-                                 mapM_ (te_Expr.fst) es
+te_Stmt (CmmCall _ rs es _ _)  = mapM_ (te_temp.hintlessCmm) rs >>
+                                 mapM_ (te_Expr.hintlessCmm) es
 te_Stmt (CmmCondBranch e _)    = te_Expr e
 te_Stmt (CmmSwitch e _)                = te_Expr e
 te_Stmt (CmmJump e _)          = te_Expr e