summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-07-09 16:46:02 +0100
committerSimon Marlow <marlowsd@gmail.com>2012-07-11 10:03:21 +0100
commitbf32abdab86f1c88c502e1b5a7bd1ea419e6c8b5 (patch)
tree8cd3bbc03143c378182fead659ebbcd89a2ef85c /compiler
parent6ed684b35af3045a41e34b4f8a0b6dd05a6eb700 (diff)
downloadhaskell-bf32abdab86f1c88c502e1b5a7bd1ea419e6c8b5.tar.gz
remove some redundant SRT-related stuff
Diffstat (limited to 'compiler')
-rw-r--r--compiler/codeGen/StgCmm.hs4
-rw-r--r--compiler/codeGen/StgCmmBind.hs8
-rw-r--r--compiler/codeGen/StgCmmCon.hs1
-rw-r--r--compiler/codeGen/StgCmmExpr.hs18
-rw-r--r--compiler/codeGen/StgCmmHeap.hs5
-rw-r--r--compiler/codeGen/StgCmmUtils.hs20
6 files changed, 18 insertions, 38 deletions
diff --git a/compiler/codeGen/StgCmm.hs b/compiler/codeGen/StgCmm.hs
index 696af8107e..dae0ad05ab 100644
--- a/compiler/codeGen/StgCmm.hs
+++ b/compiler/codeGen/StgCmm.hs
@@ -149,10 +149,10 @@ cgTopRhs :: Id -> StgRhs -> FCode CgIdInfo
cgTopRhs bndr (StgRhsCon _cc con args)
= forkStatics (cgTopRhsCon bndr con args)
-cgTopRhs bndr (StgRhsClosure cc bi fvs upd_flag srt args body)
+cgTopRhs bndr (StgRhsClosure cc bi fvs upd_flag _srt args body)
= ASSERT(null fvs) -- There should be no free variables
setSRTLabel (mkSRTLabel (idName bndr) (idCafInfo bndr)) $
- forkStatics (cgTopRhsClosure bndr cc bi upd_flag srt args body)
+ forkStatics (cgTopRhsClosure bndr cc bi upd_flag args body)
---------------------------------------------------------------
diff --git a/compiler/codeGen/StgCmmBind.hs b/compiler/codeGen/StgCmmBind.hs
index f98283f737..942a780678 100644
--- a/compiler/codeGen/StgCmmBind.hs
+++ b/compiler/codeGen/StgCmmBind.hs
@@ -68,16 +68,14 @@ cgTopRhsClosure :: Id
-> CostCentreStack -- Optional cost centre annotation
-> StgBinderInfo
-> UpdateFlag
- -> SRT
- -> [Id] -- Args
+ -> [Id] -- Args
-> StgExpr
-> FCode CgIdInfo
-cgTopRhsClosure id ccs _ upd_flag srt args body = do
+cgTopRhsClosure id ccs _ upd_flag args body = do
{ -- LAY OUT THE OBJECT
let name = idName id
; lf_info <- mkClosureLFInfo id TopLevel [] upd_flag args
- ; has_srt <- getSRTInfo srt
; mod_name <- getModuleName
; dflags <- getDynFlags
; let descr = closureDescription dflags mod_name name
@@ -86,7 +84,7 @@ cgTopRhsClosure id ccs _ upd_flag srt args body = do
cg_id_info = litIdInfo id lf_info (CmmLabel closure_label)
caffy = idCafInfo id
info_tbl = mkCmmInfo closure_info -- XXX short-cut
- closure_rep = mkStaticClosureFields info_tbl ccs caffy has_srt []
+ closure_rep = mkStaticClosureFields info_tbl ccs caffy []
-- BUILD THE OBJECT, AND GENERATE INFO TABLE (IF NECESSARY)
; emitDataLits closure_label closure_rep
diff --git a/compiler/codeGen/StgCmmCon.hs b/compiler/codeGen/StgCmmCon.hs
index c348570a54..a7af5662e9 100644
--- a/compiler/codeGen/StgCmmCon.hs
+++ b/compiler/codeGen/StgCmmCon.hs
@@ -92,7 +92,6 @@ cgTopRhsCon id con args
info_tbl
dontCareCCS -- Because it's static data
caffy -- Has CAF refs
- False -- no SRT
payload
-- BUILD THE OBJECT
diff --git a/compiler/codeGen/StgCmmExpr.hs b/compiler/codeGen/StgCmmExpr.hs
index dd1abc23be..e2789e7b2c 100644
--- a/compiler/codeGen/StgCmmExpr.hs
+++ b/compiler/codeGen/StgCmmExpr.hs
@@ -79,8 +79,8 @@ cgExpr (StgLetNoEscape _ _ binds expr) =
; cgExpr expr
; emitLabel join_id}
-cgExpr (StgCase expr _live_vars _save_vars bndr srt alt_type alts) =
- cgCase expr bndr srt alt_type alts
+cgExpr (StgCase expr _live_vars _save_vars bndr _srt alt_type alts) =
+ cgCase expr bndr alt_type alts
cgExpr (StgLam {}) = panic "cgExpr: StgLam"
@@ -283,9 +283,9 @@ data GcPlan
-- of the case alternative(s) into the upstream check
-------------------------------------
-cgCase :: StgExpr -> Id -> SRT -> AltType -> [StgAlt] -> FCode ()
+cgCase :: StgExpr -> Id -> AltType -> [StgAlt] -> FCode ()
-cgCase (StgOpApp (StgPrimOp op) args _) bndr _srt (AlgAlt tycon) alts
+cgCase (StgOpApp (StgPrimOp op) args _) bndr (AlgAlt tycon) alts
| isEnumerationTyCon tycon -- Note [case on bool]
= do { tag_expr <- do_enum_primop op args
@@ -360,7 +360,7 @@ would make this special case go away.
-- code that enters the HValue, then we'll get a runtime panic, because
-- the HValue really is a MutVar#. The types are compatible though,
-- so we can just generate an assignment.
-cgCase (StgApp v []) bndr _ alt_type@(PrimAlt _) alts
+cgCase (StgApp v []) bndr alt_type@(PrimAlt _) alts
| isUnLiftedType (idType v)
|| reps_compatible
= -- assignment suffices for unlifted types
@@ -373,7 +373,7 @@ cgCase (StgApp v []) bndr _ alt_type@(PrimAlt _) alts
where
reps_compatible = idPrimRep v == idPrimRep bndr
-cgCase scrut@(StgApp v []) _ _ (PrimAlt _) _
+cgCase scrut@(StgApp v []) _ (PrimAlt _) _
= -- fail at run-time, not compile-time
do { mb_cc <- maybeSaveCostCentre True
; withSequel (AssignTo [idToReg (NonVoid v)] False) (cgExpr scrut)
@@ -396,11 +396,11 @@ case a of v
(taking advantage of the fact that the return convention for (# State#, a #)
is the same as the return convention for just 'a')
-}
-cgCase (StgOpApp (StgPrimOp SeqOp) [StgVarArg a, _] _) bndr srt alt_type alts
+cgCase (StgOpApp (StgPrimOp SeqOp) [StgVarArg a, _] _) bndr alt_type alts
= -- handle seq#, same return convention as vanilla 'a'.
- cgCase (StgApp a []) bndr srt alt_type alts
+ cgCase (StgApp a []) bndr alt_type alts
-cgCase scrut bndr _srt alt_type alts
+cgCase scrut bndr alt_type alts
= -- the general case
do { up_hp_usg <- getVirtHp -- Upstream heap usage
; let ret_bndrs = chooseReturnBndrs bndr alt_type alts
diff --git a/compiler/codeGen/StgCmmHeap.hs b/compiler/codeGen/StgCmmHeap.hs
index bc61cf5b97..f64d203ee3 100644
--- a/compiler/codeGen/StgCmmHeap.hs
+++ b/compiler/codeGen/StgCmmHeap.hs
@@ -153,10 +153,9 @@ mkStaticClosureFields
:: CmmInfoTable
-> CostCentreStack
-> CafInfo
- -> Bool -- SRT is non-empty?
-> [CmmLit] -- Payload
-> [CmmLit] -- The full closure
-mkStaticClosureFields info_tbl ccs caf_refs has_srt payload
+mkStaticClosureFields info_tbl ccs caf_refs payload
= mkStaticClosure info_lbl ccs payload padding
static_link_field saved_info_field
where
@@ -181,7 +180,7 @@ mkStaticClosureFields info_tbl ccs caf_refs has_srt payload
| otherwise = ASSERT(null payload) [mkIntCLit 0]
static_link_field
- | is_caf || staticClosureNeedsLink has_srt info_tbl
+ | is_caf || staticClosureNeedsLink (mayHaveCafRefs caf_refs) info_tbl
= [static_link_value]
| otherwise
= []
diff --git a/compiler/codeGen/StgCmmUtils.hs b/compiler/codeGen/StgCmmUtils.hs
index 273e59b0b5..733c2d4692 100644
--- a/compiler/codeGen/StgCmmUtils.hs
+++ b/compiler/codeGen/StgCmmUtils.hs
@@ -44,9 +44,9 @@ module StgCmmUtils (
mkWordCLit,
newStringCLit, newByteStringCLit,
packHalfWordsCLit,
- blankWord,
+ blankWord,
- getSRTInfo, srt_escape
+ srt_escape
) where
#include "HsVersions.h"
@@ -66,12 +66,10 @@ import Type
import TyCon
import Constants
import SMRep
-import StgSyn ( SRT(..) )
import Module
import Literal
import Digraph
import ListSetOps
-import VarSet
import Util
import Unique
import DynFlags
@@ -804,19 +802,5 @@ assignTemp' e
emitAssign reg e
return (CmmReg reg)
--------------------------------------------------------------------------
---
--- Static Reference Tables
---
--------------------------------------------------------------------------
-
--- | Returns 'True' if there is a non-empty SRT, or 'False' otherwise
--- NB. the SRT attached to an StgBind is still used in the new codegen
--- to decide whether we need a static link field on a static closure
--- or not.
-getSRTInfo :: SRT -> FCode Bool
-getSRTInfo (SRTEntries vs) = return (not (isEmptyVarSet vs))
-getSRTInfo _ = return False
-
srt_escape :: StgHalfWord
srt_escape = -1