X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmInfo.hs;h=314a9ad77e29ec1517443d2e616f494838aeacad;hb=649d5ed52989f429d10283940793a06111aa8468;hp=085f8636df2c727bdb3f8d598f4500a64f68e7d6;hpb=17b297d97d327620ed6bfab942f8992b2446f1bf;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmInfo.hs b/compiler/cmm/CmmInfo.hs index 085f863..314a9ad 100644 --- a/compiler/cmm/CmmInfo.hs +++ b/compiler/cmm/CmmInfo.hs @@ -1,8 +1,8 @@ -{-# OPTIONS_GHC -w #-} +{-# OPTIONS -w #-} -- The above warning supression flag is a temporary kludge. -- While working on this module you are encouraged to remove it and fix -- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings -- for details module CmmInfo ( @@ -14,7 +14,6 @@ module CmmInfo ( import Cmm import CmmUtils -import PprCmm import CLabel import MachOp @@ -28,7 +27,6 @@ import SMRep import Constants import StaticFlags -import DynFlags import Unique import UniqSupply import Panic @@ -80,7 +78,7 @@ mkInfoTable :: Unique -> CmmTop -> [RawCmmTop] mkInfoTable uniq (CmmData sec dat) = [CmmData sec dat] mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) = case info of - -- | Code without an info table. Easy. + -- Code without an info table. Easy. CmmNonInfoTable -> [CmmProc [] entry_label arguments blocks] CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag type_info -> @@ -88,7 +86,7 @@ mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) = ty_prof' = makeRelativeRefTo info_label ty_prof cl_prof' = makeRelativeRefTo info_label cl_prof in case type_info of - -- | A function entry point. + -- A function entry point. FunInfo (ptrs, nptrs) srt fun_type fun_arity pap_bitmap slow_entry -> mkInfoTableAndCode info_label std_info fun_extra_bits entry_label arguments blocks @@ -106,7 +104,7 @@ mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) = (srt_label, srt_bitmap) = mkSRTLit info_label srt layout = packHalfWordsCLit ptrs nptrs - -- | A constructor. + -- A constructor. ConstrInfo (ptrs, nptrs) con_tag descr -> mkInfoTableAndCode info_label std_info [con_name] entry_label arguments blocks @@ -115,7 +113,7 @@ mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) = con_name = makeRelativeRefTo info_label descr layout = packHalfWordsCLit ptrs nptrs - -- | A thunk. + -- A thunk. ThunkInfo (ptrs, nptrs) srt -> mkInfoTableAndCode info_label std_info srt_label entry_label arguments blocks @@ -124,7 +122,7 @@ mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) = (srt_label, srt_bitmap) = mkSRTLit info_label srt layout = packHalfWordsCLit ptrs nptrs - -- | A selector thunk. + -- A selector thunk. ThunkSelectorInfo offset srt -> mkInfoTableAndCode info_label std_info [{- no SRT -}] entry_label arguments blocks @@ -152,15 +150,15 @@ mkInfoTableAndCode :: CLabel -> [CmmLit] -> [CmmLit] -> CLabel - -> CmmFormals - -> [CmmBasicBlock] + -> CmmFormalsWithoutKinds + -> ListGraph CmmStmt -> [RawCmmTop] mkInfoTableAndCode info_lbl std_info extra_bits entry_lbl args blocks | tablesNextToCode -- Reverse the extra_bits; and emit the top-level proc = [CmmProc (map CmmStaticLit (reverse extra_bits ++ std_info)) entry_lbl args blocks] - | null blocks -- No actual code; only the info table is significant + | ListGraph [] <- blocks -- No code; only the info table is significant = -- Use a zero place-holder in place of the -- entry-label in the info table [mkRODataLits info_lbl (zeroCLit : std_info ++ extra_bits)] @@ -202,9 +200,11 @@ mkSRTLit info_label (C_SRT lbl off bitmap) = -- TODO: combine with CgCallConv.mkLiveness (see comment there) mkLiveness :: Unique -> [Maybe LocalReg] - -> (CmmLit, -- ^ The bitmap (literal value or label) - [RawCmmTop], -- ^ Large bitmap CmmData if needed - ClosureTypeTag) -- ^ rET_SMALL or rET_BIG + -> (CmmLit, [RawCmmTop], ClosureTypeTag) + -- ^ Returns: + -- 1. The bitmap (literal value or label) + -- 2. Large bitmap CmmData if needed + -- 3. rET_SMALL or rET_BIG mkLiveness uniq live = if length bits > mAX_SMALL_BITMAP_SIZE -- does not fit in one word @@ -224,8 +224,8 @@ mkLiveness uniq live = is_non_ptr Nothing = True is_non_ptr (Just reg) = case localRegGCFollow reg of - KindNonPtr -> True - KindPtr -> False + GCKindNonPtr -> True + GCKindPtr -> False bits :: [Bool] bits = mkBits live @@ -277,3 +277,4 @@ mkStdInfoTable type_descr closure_descr cl_type srt_len layout_lit | otherwise = [] type_lit = packHalfWordsCLit cl_type srt_len +