import CmmUtils
import Cmm
import DynFlags
-import CLabel
import FastTypes
import Outputable
pprStmt stmt =
sdocWithDynFlags $ \dflags ->
case stmt of
+ CmmEntry _ -> empty
CmmComment _ -> empty -- (hang (ptext (sLit "/*")) 3 (ftext s)) $$ ptext (sLit "*/")
-- XXX if the string contains "*/", we need to fix it
-- XXX we probably want to emit these comments when
CmmSwitch arg ids -> sdocWithDynFlags $ \dflags ->
pprSwitch dflags arg ids
+ _other -> pprPanic "PprC.pprStmt" (ppr stmt)
+
type Hinted a = (a, ForeignHint)
pprForeignCall :: SDoc -> CCallConv -> [Hinted CmmFormal] -> [Hinted CmmActual]
(cdata,env) = {-# SCC "llvm_split" #-}
foldr split ([], initLlvmEnv dflags) cmm
split (CmmData s d' ) (d,e) = ((s,d'):d,e)
- split p@(CmmProc h l live g) (d,e) =
+ split (CmmProc h l live g) (d,e) =
let lbl = strCLabel_llvm env $
case mapLookup (g_entry g) h of
Nothing -> l
-- | Top-level of the LLVM proc Code generator
--
genLlvmProc :: LlvmEnv -> RawCmmDecl -> UniqSM (LlvmEnv, [LlvmCmmDecl])
-genLlvmProc env proc0@(CmmProc infos lbl live graph) = do
- let blocks = toBlockList graph
+genLlvmProc env (CmmProc infos lbl live graph) = do
+ let blocks = toBlockListEntryFirst graph
(env', lmblocks, lmdata) <- basicBlocksCodeGen env live blocks ([], [])
let info = mapLookup (g_entry graph) infos
proc = CmmProc info lbl live (ListGraph lmblocks)
_ -> CC_Ccc
CCallConv -> CC_Ccc
CApiConv -> CC_Ccc
+ PrimCallConv -> panic "LlvmCodeGen.CodeGen.genCall: PrimCallConv"
PrimTarget _ -> CC_Ccc
CmmCondBranch test true false
-> do test' <- cmmExprConFold DataReference test
- dflags <- getDynFlags
return $ case test' of
CmmLit (CmmInt 0 _) -> CmmBranch false
CmmLit (CmmInt _ _) -> CmmBranch true
import DynFlags
import Cmm hiding (topInfoTable)
import Platform
-import Outputable
-- | Holds a list of source and destination registers used by a
-- particular instruction.