summaryrefslogtreecommitdiff
path: root/compiler/cmm/CmmInfo.hs
diff options
context:
space:
mode:
authorMichael D. Adams <t-madams@microsoft.com>2007-07-03 21:44:13 +0000
committerMichael D. Adams <t-madams@microsoft.com>2007-07-03 21:44:13 +0000
commit1f8efd5d6214c490ef4942134abf5de9f468d29c (patch)
tree59453bd516eba174ebeba10e0a44af236d3103bd /compiler/cmm/CmmInfo.hs
parent55f8b001f06d0a2a1e9b0e84cbaa5f2f109270df (diff)
downloadhaskell-1f8efd5d6214c490ef4942134abf5de9f468d29c.tar.gz
Added support for update frames to the CPS pass
(This required a bit of refactoring of CmmInfo.)
Diffstat (limited to 'compiler/cmm/CmmInfo.hs')
-rw-r--r--compiler/cmm/CmmInfo.hs25
1 files changed, 13 insertions, 12 deletions
diff --git a/compiler/cmm/CmmInfo.hs b/compiler/cmm/CmmInfo.hs
index 3f458b5351..78ff5af0ca 100644
--- a/compiler/cmm/CmmInfo.hs
+++ b/compiler/cmm/CmmInfo.hs
@@ -71,15 +71,15 @@ cmmToRawCmm cmm = do
mkInfoTable :: Unique -> CmmTop -> [RawCmmTop]
mkInfoTable uniq (CmmData sec dat) = [CmmData sec dat]
-mkInfoTable uniq (CmmProc info entry_label arguments blocks) =
+mkInfoTable uniq (CmmProc (CmmInfo _ _ info) entry_label arguments blocks) =
case info of
-- | Code without an info table. Easy.
- CmmNonInfo _ -> [CmmProc [] entry_label arguments blocks]
+ CmmNonInfoTable -> [CmmProc [] entry_label arguments blocks]
-- | A function entry point.
- CmmInfo (ProfilingInfo ty_prof cl_prof) _ type_tag
- (FunInfo (ptrs, nptrs) srt fun_type fun_arity
- pap_bitmap slow_entry) ->
+ CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag
+ (FunInfo (ptrs, nptrs) srt fun_type fun_arity
+ pap_bitmap slow_entry) ->
mkInfoTableAndCode info_label std_info fun_extra_bits entry_label
arguments blocks
where
@@ -97,8 +97,8 @@ mkInfoTable uniq (CmmProc info entry_label arguments blocks) =
layout = packHalfWordsCLit ptrs nptrs
-- | A constructor.
- CmmInfo (ProfilingInfo ty_prof cl_prof) _ type_tag
- (ConstrInfo (ptrs, nptrs) con_tag descr) ->
+ CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag
+ (ConstrInfo (ptrs, nptrs) con_tag descr) ->
mkInfoTableAndCode info_label std_info [con_name] entry_label
arguments blocks
where
@@ -108,8 +108,8 @@ mkInfoTable uniq (CmmProc info entry_label arguments blocks) =
layout = packHalfWordsCLit ptrs nptrs
-- | A thunk.
- CmmInfo (ProfilingInfo ty_prof cl_prof) _ type_tag
- (ThunkInfo (ptrs, nptrs) srt) ->
+ CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag
+ (ThunkInfo (ptrs, nptrs) srt) ->
mkInfoTableAndCode info_label std_info srt_label entry_label
arguments blocks
where
@@ -119,8 +119,8 @@ mkInfoTable uniq (CmmProc info entry_label arguments blocks) =
layout = packHalfWordsCLit ptrs nptrs
-- | A selector thunk.
- CmmInfo (ProfilingInfo ty_prof cl_prof) _ type_tag
- (ThunkSelectorInfo offset srt) ->
+ CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag
+ (ThunkSelectorInfo offset srt) ->
mkInfoTableAndCode info_label std_info [{- no SRT -}] entry_label
arguments blocks
where
@@ -128,7 +128,8 @@ mkInfoTable uniq (CmmProc info entry_label arguments blocks) =
info_label = entryLblToInfoLbl entry_label
-- A continuation/return-point.
- CmmInfo (ProfilingInfo ty_prof cl_prof) _ type_tag (ContInfo stack_layout srt) ->
+ CmmInfoTable (ProfilingInfo ty_prof cl_prof) type_tag
+ (ContInfo stack_layout srt) ->
liveness_data ++
mkInfoTableAndCode info_label std_info srt_label entry_label
arguments blocks