Commit b71b86cf authored by nr@eecs.harvard.edu's avatar nr@eecs.harvard.edu
Browse files

replace Cmm 'hint' with 'kind'

C-- no longer has 'hints'; to guide parameter passing, it
has 'kinds'.  Renamed type constructor, data constructor, and record
fields accordingly
parent 4b0d5137
......@@ -18,7 +18,7 @@ module Cmm (
CmmReturnInfo(..),
CmmStmt(..), CmmActual, CmmActuals, CmmFormal, CmmFormals, CmmKind,
CmmFormalsWithoutKinds, CmmFormalWithoutKind,
CmmHinted(..),
CmmKinded(..),
CmmSafety(..),
CmmCallTarget(..),
CmmStatic(..), Section(..),
......@@ -241,10 +241,10 @@ data CmmStmt
CmmActuals -- with these return values.
type CmmKind = MachHint
data CmmHinted a = CmmHinted { hintlessCmm :: a, cmmHint :: CmmKind }
data CmmKinded a = CmmKinded { kindlessCmm :: a, cmmKind :: CmmKind }
deriving (Eq)
type CmmActual = CmmHinted CmmExpr
type CmmFormal = CmmHinted LocalReg
type CmmActual = CmmKinded CmmExpr
type CmmFormal = CmmKinded LocalReg
type CmmActuals = [CmmActual]
type CmmFormals = [CmmFormal]
type CmmFormalWithoutKind = LocalReg
......@@ -253,8 +253,8 @@ type CmmFormalsWithoutKinds = [CmmFormalWithoutKind]
data CmmSafety = CmmUnsafe | CmmSafe C_SRT
-- | enable us to fold used registers over 'CmmActuals' and 'CmmFormals'
instance UserOfLocalRegs a => UserOfLocalRegs (CmmHinted a) where
foldRegsUsed f set (CmmHinted a _) = foldRegsUsed f set a
instance UserOfLocalRegs a => UserOfLocalRegs (CmmKinded a) where
foldRegsUsed f set (CmmKinded a _) = foldRegsUsed f set a
instance UserOfLocalRegs CmmStmt where
foldRegsUsed f set s = stmt s set
......@@ -276,8 +276,8 @@ instance UserOfLocalRegs CmmCallTarget where
--just look like a tuple, since it was a tuple before
-- ... is that a good idea? --Isaac Dupree
instance (Outputable a) => Outputable (CmmHinted a) where
ppr (CmmHinted a k) = ppr (a, k)
instance (Outputable a) => Outputable (CmmKinded a) where
ppr (CmmKinded a k) = ppr (a, k)
{-
Discussion
......
......@@ -348,7 +348,7 @@ makeContinuationEntries formats
case lookup ident formats of
Nothing -> block
Just (ContFormat formals srt is_gc) ->
BrokenBlock ident (ContinuationEntry (map hintlessCmm formals) srt is_gc)
BrokenBlock ident (ContinuationEntry (map kindlessCmm formals) srt is_gc)
stmts targets exit
adaptBlockToFormat :: [(BlockId, ContFormat)]
......@@ -378,7 +378,7 @@ adaptBlockToFormat formats unique
target formals actuals srt ret is_gc
adaptor_block = mk_adaptor_block adaptor_ident
(ContinuationEntry (map hintlessCmm formals) srt is_gc)
(ContinuationEntry (map kindlessCmm formals) srt is_gc)
next format_formals
adaptor_ident = BlockId unique
......@@ -390,8 +390,8 @@ adaptBlockToFormat formats unique
(CmmLit (CmmLabel (mkReturnPtLabel (getUnique next))))
(map formal_to_actual format_formals)
formal_to_actual (CmmHinted reg hint)
= (CmmHinted (CmmReg (CmmLocal reg)) hint)
formal_to_actual (CmmKinded reg hint)
= (CmmKinded (CmmReg (CmmLocal reg)) hint)
-- TODO: Check if NoHint is right. We're
-- jumping to a C-- function not a foreign one
-- so it might always be right.
......
......@@ -359,14 +359,14 @@ continuationMaxStack formats (Continuation _ label _ False blocks) =
map stmt_arg_size (brokenBlockStmts block))
final_arg_size (FinalReturn args) =
argumentsSize (cmmExprRep . hintlessCmm) args
argumentsSize (cmmExprRep . kindlessCmm) args
final_arg_size (FinalJump _ args) =
argumentsSize (cmmExprRep . hintlessCmm) args
argumentsSize (cmmExprRep . kindlessCmm) args
final_arg_size (FinalCall next _ _ args _ _ True) = 0
final_arg_size (FinalCall next _ _ args _ _ False) =
-- We have to account for the stack used when we build a frame
-- for the *next* continuation from *this* continuation
argumentsSize (cmmExprRep . hintlessCmm) args +
argumentsSize (cmmExprRep . kindlessCmm) args +
continuation_frame_size next_format
where
next_format = maybe unknown_format id $ lookup next' formats
......@@ -375,7 +375,7 @@ continuationMaxStack formats (Continuation _ label _ False blocks) =
final_arg_size _ = 0
stmt_arg_size (CmmJump _ args) =
argumentsSize (cmmExprRep . hintlessCmm) args
argumentsSize (cmmExprRep . kindlessCmm) args
stmt_arg_size (CmmCall _ _ _ (CmmSafe _) _) =
panic "Safe call in processFormats"
stmt_arg_size (CmmReturn _) =
......
......@@ -227,7 +227,7 @@ continuationToProc (max_stack, update_frame_size, formats) stack_use uniques
foreignCall call_uniques (CmmPrim target)
results arguments
formal_to_actual reg = CmmHinted (CmmReg (CmmLocal reg)) NoHint
formal_to_actual reg = CmmKinded (CmmReg (CmmLocal reg)) NoHint
foreignCall :: [Unique] -> CmmCallTarget -> CmmFormals -> CmmActuals -> [CmmStmt]
foreignCall uniques call results arguments =
......@@ -235,14 +235,14 @@ foreignCall uniques call results arguments =
saveThreadState ++
caller_save ++
[CmmCall (CmmCallee suspendThread CCallConv)
[ CmmHinted id PtrHint ]
[ CmmHinted (CmmReg (CmmGlobal BaseReg)) PtrHint ]
[ CmmKinded id PtrHint ]
[ CmmKinded (CmmReg (CmmGlobal BaseReg)) PtrHint ]
CmmUnsafe
CmmMayReturn,
CmmCall call results new_args CmmUnsafe CmmMayReturn,
CmmCall (CmmCallee resumeThread CCallConv)
[ CmmHinted new_base PtrHint ]
[ CmmHinted (CmmReg (CmmLocal id)) PtrHint ]
[ CmmKinded new_base PtrHint ]
[ CmmKinded (CmmReg (CmmLocal id)) PtrHint ]
CmmUnsafe
CmmMayReturn,
-- Assign the result to BaseReg: we
......@@ -250,7 +250,7 @@ foreignCall uniques call results arguments =
CmmAssign (CmmGlobal BaseReg) (CmmReg (CmmLocal new_base))] ++
caller_load ++
loadThreadState tso_unique ++
[CmmJump (CmmReg spReg) (map (formal_to_actual . hintlessCmm) results)]
[CmmJump (CmmReg spReg) (map (formal_to_actual . kindlessCmm) results)]
where
(_, arg_stmts, new_args) =
loadArgsIntoTemps argument_uniques arguments
......@@ -362,12 +362,12 @@ tail_call spRel target arguments
= store_arguments ++ adjust_sp_reg spRel ++ jump where
store_arguments =
[stack_put spRel expr offset
| ((CmmHinted expr _), StackParam offset) <- argument_formats] ++
| ((CmmKinded expr _), StackParam offset) <- argument_formats] ++
[global_put expr global
| ((CmmHinted expr _), RegisterParam global) <- argument_formats]
| ((CmmKinded expr _), RegisterParam global) <- argument_formats]
jump = [CmmJump target arguments]
argument_formats = assignArguments (cmmExprRep . hintlessCmm) arguments
argument_formats = assignArguments (cmmExprRep . kindlessCmm) arguments
adjust_sp_reg spRel =
if spRel == 0
......
......@@ -136,7 +136,7 @@ lintCmmStmt labels = lint
lintCmmExpr r
return ()
lint (CmmCall target _res args _ _) =
lintTarget target >> mapM_ (lintCmmExpr . hintlessCmm) args
lintTarget target >> mapM_ (lintCmmExpr . kindlessCmm) args
lint (CmmCondBranch e id) = checkTarget id >> lintCmmExpr e >> checkCond e
lint (CmmSwitch e branches) = do
mapM_ checkTarget $ catMaybes branches
......@@ -144,8 +144,8 @@ lintCmmStmt labels = lint
if (erep == wordRep)
then return ()
else cmmLintErr (text "switch scrutinee is not a word: " <> ppr e)
lint (CmmJump e args) = lintCmmExpr e >> mapM_ (lintCmmExpr . hintlessCmm) args
lint (CmmReturn ress) = mapM_ (lintCmmExpr . hintlessCmm) ress
lint (CmmJump e args) = lintCmmExpr e >> mapM_ (lintCmmExpr . kindlessCmm) args
lint (CmmReturn ress) = mapM_ (lintCmmExpr . kindlessCmm) ress
lint (CmmBranch id) = checkTarget id
checkTarget id = if elemBlockSet id labels then return ()
else cmmLintErr (text "Branch to nonexistent id" <+> ppr id)
......
......@@ -164,7 +164,7 @@ addKilled new_killed live = live `minusUniqSet` new_killed
-- Liveness of a CmmStmt
--------------------------------
cmmFormalsToLiveLocals :: CmmFormals -> [LocalReg]
cmmFormalsToLiveLocals formals = map hintlessCmm formals
cmmFormalsToLiveLocals formals = map kindlessCmm formals
cmmStmtLive :: BlockEntryLiveness -> CmmStmt -> CmmLivenessTransformer
cmmStmtLive _ (CmmNop) = id
......@@ -179,7 +179,7 @@ cmmStmtLive _ (CmmStore expr1 expr2) =
cmmExprLive expr2 . cmmExprLive expr1
cmmStmtLive _ (CmmCall target results arguments _ _) =
target_liveness .
foldr ((.) . cmmExprLive) id (map hintlessCmm arguments) .
foldr ((.) . cmmExprLive) id (map kindlessCmm arguments) .
addKilled (mkUniqSet $ cmmFormalsToLiveLocals results) where
target_liveness =
case target of
......@@ -197,9 +197,9 @@ cmmStmtLive other_live (CmmSwitch expr targets) =
id
(mapCatMaybes id targets))
cmmStmtLive _ (CmmJump expr params) =
const (cmmExprLive expr $ foldr ((.) . cmmExprLive) id (map hintlessCmm params) $ emptyUniqSet)
const (cmmExprLive expr $ foldr ((.) . cmmExprLive) id (map kindlessCmm params) $ emptyUniqSet)
cmmStmtLive _ (CmmReturn params) =
const (foldr ((.) . cmmExprLive) id (map hintlessCmm params) $ emptyUniqSet)
const (foldr ((.) . cmmExprLive) id (map kindlessCmm params) $ emptyUniqSet)
--------------------------------
-- Liveness of a CmmExpr
......
......@@ -155,7 +155,7 @@ inlineStmt u a (CmmCall target regs es srt ret)
= CmmCall (infn target) regs es' srt ret
where infn (CmmCallee fn cconv) = CmmCallee fn cconv
infn (CmmPrim p) = CmmPrim p
es' = [ (CmmHinted (inlineExpr u a e) hint) | (CmmHinted e hint) <- es ]
es' = [ (CmmKinded (inlineExpr u a e) hint) | (CmmKinded e hint) <- es ]
inlineStmt u a (CmmCondBranch e d) = CmmCondBranch (inlineExpr u a e) d
inlineStmt u a (CmmSwitch e d) = CmmSwitch (inlineExpr u a e) d
inlineStmt u a (CmmJump e d) = CmmJump (inlineExpr u a e) d
......
......@@ -256,7 +256,7 @@ addProcPointProtocols procPoints formals g =
maybe_add_proto (Block id _) env | id == lg_entry g =
extendBlockEnv env id (Protocol stdArgConvention hinted_formals)
maybe_add_proto _ env = env
hinted_formals = map (\x -> CmmHinted x NoHint) formals
hinted_formals = map (\x -> CmmKinded x NoHint) formals
stdArgConvention = ConventionStandard CmmCallConv Arguments
-- | For now, following a suggestion by Ben Lippmeier, we pass all
......@@ -279,7 +279,7 @@ pass_live_vars_as_args procPoints (protos, g) = (protos', g')
Nothing -> let live = lookupBlockEnv liveness id `orElse`
emptyRegSet -- XXX there's a bug lurking!
-- panic ("no liveness at block " ++ show id)
formals = map (\x -> CmmHinted x NoHint) $ uniqSetToList live
formals = map (\x -> CmmKinded x NoHint) $ uniqSetToList live
in extendBlockEnv protos id (Protocol ConventionPrivate formals)
g' = g { lg_blocks = add_CopyIns protos' (lg_blocks g) }
......
......@@ -197,10 +197,10 @@ loadArgsIntoTemps :: [Unique]
-> CmmActuals
-> ([Unique], [CmmStmt], CmmActuals)
loadArgsIntoTemps uniques [] = (uniques, [], [])
loadArgsIntoTemps uniques ((CmmHinted e hint):args) =
loadArgsIntoTemps uniques ((CmmKinded e hint):args) =
(uniques'',
new_stmts ++ remaining_stmts,
(CmmHinted new_e hint) : remaining_e)
(CmmKinded new_e hint) : remaining_e)
where
(uniques', new_stmts, new_e) = maybeAssignTemp uniques e
(uniques'', remaining_stmts, remaining_e) =
......
......@@ -241,9 +241,9 @@ pprCFunType ppr_fn cconv ress args
parens (commafy (map arg_type args))
where
res_type [] = ptext (sLit "void")
res_type [CmmHinted one hint] = machRepHintCType (localRegRep one) hint
res_type [CmmKinded one hint] = machRepHintCType (localRegRep one) hint
arg_type (CmmHinted expr hint) = machRepHintCType (cmmExprRep expr) hint
arg_type (CmmKinded expr hint) = machRepHintCType (cmmExprRep expr) hint
-- ---------------------------------------------------------------------
-- unconditional branches
......@@ -751,16 +751,16 @@ pprCall ppr_fn cconv results args _
ppr_assign results (ppr_fn <> parens (commafy (map pprArg args))) <> semi
where
ppr_assign [] rhs = rhs
ppr_assign [CmmHinted one hint] rhs
ppr_assign [CmmKinded one hint] rhs
= pprLocalReg one <> ptext (sLit " = ")
<> pprUnHint hint (localRegRep one) <> rhs
ppr_assign _other _rhs = panic "pprCall: multiple results"
pprArg (CmmHinted expr hint)
pprArg (CmmKinded expr hint)
| hint `elem` [PtrHint,SignedHint]
= cCast (machRepHintCType (cmmExprRep expr) hint) expr
-- see comment by machRepHintCType below
pprArg (CmmHinted expr _other)
pprArg (CmmKinded expr _other)
= pprExpr expr
pprUnHint PtrHint rep = parens (machRepCType rep)
......@@ -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.hintlessCmm) rs >>
mapM_ (te_Expr.hintlessCmm) es
te_Stmt (CmmCall _ rs es _ _) = mapM_ (te_temp.kindlessCmm) rs >>
mapM_ (te_Expr.kindlessCmm) es
te_Stmt (CmmCondBranch e _) = te_Expr e
te_Stmt (CmmSwitch e _) = te_Expr e
te_Stmt (CmmJump e _) = te_Expr e
......
......@@ -246,9 +246,9 @@ pprStmt stmt = case stmt of
| otherwise = commafy (map ppr_ar results) <+> equals
-- Don't print the hints on a native C-- call
ppr_ar arg = case cconv of
CmmCallConv -> ppr (hintlessCmm arg)
_ -> doubleQuotes (ppr $ cmmHint arg) <+>
ppr (hintlessCmm arg)
CmmCallConv -> ppr (kindlessCmm arg)
_ -> doubleQuotes (ppr $ cmmKind arg) <+>
ppr (kindlessCmm arg)
_pp_conv = case cconv of
CmmCallConv -> empty
_ -> ptext (sLit "foreign") <+> doubleQuotes (ppr cconv)
......@@ -294,7 +294,7 @@ genCondBranch expr ident =
--
-- jump foo(a, b, c);
--
genJump :: CmmExpr -> [CmmHinted CmmExpr] -> SDoc
genJump :: CmmExpr -> [CmmKinded CmmExpr] -> SDoc
genJump expr args =
hcat [ ptext (sLit "jump")
......@@ -305,21 +305,21 @@ genJump expr args =
CmmLoad (CmmReg _) _ -> pprExpr expr
_ -> parens (pprExpr expr)
, space
, parens ( commafy $ map pprHinted args )
, parens ( commafy $ map pprKinded args )
, semi ]
pprHinted :: Outputable a => (CmmHinted a) -> SDoc
pprHinted (CmmHinted a NoHint) = ppr a
pprHinted (CmmHinted a PtrHint) = quotes(text "address") <+> ppr a
pprHinted (CmmHinted a SignedHint) = quotes(text "signed") <+> ppr a
pprHinted (CmmHinted a FloatHint) = quotes(text "float") <+> ppr a
pprKinded :: Outputable a => (CmmKinded a) -> SDoc
pprKinded (CmmKinded a NoHint) = ppr a
pprKinded (CmmKinded a PtrHint) = quotes(text "address") <+> ppr a
pprKinded (CmmKinded a SignedHint) = quotes(text "signed") <+> ppr a
pprKinded (CmmKinded a FloatHint) = quotes(text "float") <+> ppr a
-- --------------------------------------------------------------------------
-- Return from a function. [1], Section 6.8.2 of version 1.128
--
-- return (a, b, c);
--
genReturn :: [CmmHinted CmmExpr] -> SDoc
genReturn :: [CmmKinded CmmExpr] -> SDoc
genReturn args =
hcat [ ptext (sLit "return")
......
......@@ -14,7 +14,7 @@ where
import CmmExpr
import Cmm ( GenCmm(..), GenCmmTop(..), CmmStatic, CmmInfo
, CmmCallTarget(..), CmmActuals, CmmFormals, CmmHinted(..)
, CmmCallTarget(..), CmmActuals, CmmFormals, CmmKinded(..)
, CmmStmt(..) -- imported in order to call ppr on Switch and to
-- implement pprCmmGraphLikeCmm
, CmmSafety(CmmSafe) -- for pprCmmGraphLikeCmm
......@@ -213,12 +213,12 @@ pprMiddle stmt = pp_stmt <+> pp_debug
CopyIn conv args _ ->
if null args then ptext (sLit "empty CopyIn")
else commafy (map pprHinted args) <+> equals <+>
else commafy (map pprKinded args) <+> equals <+>
ptext (sLit "foreign") <+> doubleQuotes(ppr conv) <+> ptext (sLit "...")
CopyOut conv args ->
ptext (sLit "next, pass") <+> doubleQuotes(ppr conv) <+>
parens (commafy (map pprHinted args))
parens (commafy (map pprKinded args))
-- // text
MidComment s -> text "//" <+> ftext s
......@@ -270,11 +270,11 @@ ppr_target t@(CmmLit _) = ppr t
ppr_target fn' = parens (ppr fn')
pprHinted :: Outputable a => CmmHinted a -> SDoc
pprHinted (CmmHinted a NoHint) = ppr a
pprHinted (CmmHinted a PtrHint) = doubleQuotes (text "address") <+> ppr a
pprHinted (CmmHinted a SignedHint) = doubleQuotes (text "signed") <+> ppr a
pprHinted (CmmHinted a FloatHint) = doubleQuotes (text "float") <+> ppr a
pprKinded :: Outputable a => CmmKinded a -> SDoc
pprKinded (CmmKinded a NoHint) = ppr a
pprKinded (CmmKinded a PtrHint) = doubleQuotes (text "address") <+> ppr a
pprKinded (CmmKinded a SignedHint) = doubleQuotes (text "signed") <+> ppr a
pprKinded (CmmKinded a FloatHint) = doubleQuotes (text "float") <+> ppr a
pprLast :: Last -> SDoc
pprLast stmt = (case stmt of
......
......@@ -165,7 +165,7 @@ cgCase (StgOpApp op@(StgFCallOp fcall _) args _)
-- exactly like the cgInlinePrimOp case for unboxed tuple alts..
{ res_tmps <- mapFCs bindNewToTemp non_void_res_ids
; let res_hints = map (typeHint.idType) non_void_res_ids
; cgForeignCall (zipWith CmmHinted res_tmps res_hints) fcall args live_in_alts
; cgForeignCall (zipWith CmmKinded res_tmps res_hints) fcall args live_in_alts
; cgExpr rhs }
where
(_, res_ids, _, rhs) = head alts
......
......@@ -560,7 +560,7 @@ link_caf cl_info is_upd = do
-- so that the garbage collector can find them
-- This must be done *before* the info table pointer is overwritten,
-- because the old info table ptr is needed for reversion
; emitRtsCallWithVols (sLit "newCAF") [CmmHinted (CmmReg nodeReg) PtrHint] [node] False
; emitRtsCallWithVols (sLit "newCAF") [CmmKinded (CmmReg nodeReg) PtrHint] [node] False
-- node is live, so save it.
-- Overwrite the closure with a (static) indirection
......
......@@ -133,13 +133,13 @@ cgExpr (StgOpApp (StgFCallOp fcall _) stg_args res_ty) = do
then assignPtrTemp arg
else assignNonPtrTemp arg
| (arg, stg_arg) <- arg_exprs]
let arg_hints = zipWith CmmHinted arg_tmps (map (typeHint.stgArgType) stg_args)
let arg_hints = zipWith CmmKinded arg_tmps (map (typeHint.stgArgType) stg_args)
{-
Now, allocate some result regs.
-}
(res_reps,res_regs,res_hints) <- newUnboxedTupleRegs res_ty
ccallReturnUnboxedTuple (zip res_reps (map (CmmReg . CmmLocal) res_regs)) $
emitForeignCall (zipWith CmmHinted res_regs res_hints) fcall
emitForeignCall (zipWith CmmKinded res_regs res_hints) fcall
arg_hints emptyVarSet{-no live vars-}
-- tagToEnum# is special: we need to pull the constructor out of the table,
......
......@@ -63,7 +63,7 @@ cgForeignCall results fcall stg_args live
| (stg_arg, (rep,expr)) <- stg_args `zip` reps_n_amodes,
nonVoidArg rep]
arg_hints = zipWith CmmHinted
arg_hints = zipWith CmmKinded
arg_exprs (map (typeHint.stgArgType) stg_args)
-- in
emitForeignCall results fcall arg_hints live
......@@ -72,7 +72,7 @@ cgForeignCall results fcall stg_args live
emitForeignCall
:: CmmFormals -- where to put the results
-> ForeignCall -- the op
-> [CmmHinted CmmExpr] -- arguments
-> [CmmKinded CmmExpr] -- arguments
-> StgLiveVars -- live vars, in case we need to save them
-> Code
......@@ -86,14 +86,14 @@ emitForeignCall results (CCall (CCallSpec target cconv safety)) args live
= case target of
StaticTarget lbl -> (args, CmmLit (CmmLabel
(mkForeignLabel lbl call_size False)))
DynamicTarget -> case args of (CmmHinted fn _):rest -> (rest, fn)
DynamicTarget -> case args of (CmmKinded fn _):rest -> (rest, fn)
-- in the stdcall calling convention, the symbol needs @size appended
-- to it, where size is the total number of bytes of arguments. We
-- attach this info to the CLabel here, and the CLabel pretty printer
-- will generate the suffix when the label is printed.
call_size
| StdCallConv <- cconv = Just (sum (map (arg_size.cmmExprRep.hintlessCmm) args))
| StdCallConv <- cconv = Just (sum (map (arg_size.cmmExprRep.kindlessCmm) args))
| otherwise = Nothing
-- ToDo: this might not be correct for 64-bit API
......@@ -108,7 +108,7 @@ emitForeignCall'
:: Safety
-> CmmFormals -- where to put the results
-> CmmCallTarget -- the op
-> [CmmHinted CmmExpr] -- arguments
-> [CmmKinded CmmExpr] -- arguments
-> Maybe [GlobalReg] -- live vars, in case we need to save them
-> C_SRT -- the SRT of the calls continuation
-> CmmReturnInfo
......@@ -137,13 +137,13 @@ emitForeignCall' safety results target args vols srt ret
-- and the CPS will will be the one to convert that
-- to this sequence of three CmmUnsafe calls.
stmtC (CmmCall (CmmCallee suspendThread CCallConv)
[ CmmHinted id PtrHint ]
[ CmmHinted (CmmReg (CmmGlobal BaseReg)) PtrHint ]
[ CmmKinded id PtrHint ]
[ CmmKinded (CmmReg (CmmGlobal BaseReg)) PtrHint ]
CmmUnsafe ret)
stmtC (CmmCall temp_target results temp_args CmmUnsafe ret)
stmtC (CmmCall (CmmCallee resumeThread CCallConv)
[ CmmHinted new_base PtrHint ]
[ CmmHinted (CmmReg (CmmLocal id)) PtrHint ]
[ CmmKinded new_base PtrHint ]
[ CmmKinded (CmmReg (CmmLocal id)) PtrHint ]
CmmUnsafe ret)
-- Assign the result to BaseReg: we
-- might now have a different Capability!
......@@ -163,9 +163,9 @@ resumeThread = CmmLit (CmmLabel (mkRtsCodeLabel (sLit "resumeThread")))
-- This is a HACK; really it should be done in the back end, but
-- it's easier to generate the temporaries here.
load_args_into_temps = mapM arg_assign_temp
where arg_assign_temp (CmmHinted e hint) = do
where arg_assign_temp (CmmKinded e hint) = do
tmp <- maybe_assign_temp e
return (CmmHinted tmp hint)
return (CmmKinded tmp hint)
load_target_into_temp (CmmCallee expr conv) = do
tmp <- maybe_assign_temp expr
......
......@@ -73,15 +73,15 @@ initHpc this_mod (HpcInfo tickCount hashNo)
= do { id <- newNonPtrTemp wordRep -- TODO FIXME NOW
; emitForeignCall'
PlayRisky
[CmmHinted id NoHint]
[CmmKinded id NoHint]
(CmmCallee
(CmmLit $ CmmLabel $ mkForeignLabel mod_alloc Nothing False)
CCallConv
)
[ CmmHinted (mkLblExpr mkHpcModuleNameLabel) PtrHint
, CmmHinted (word32 tickCount) NoHint
, CmmHinted (word32 hashNo) NoHint
, CmmHinted (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod) PtrHint
[ CmmKinded (mkLblExpr mkHpcModuleNameLabel) PtrHint
, CmmKinded (word32 tickCount) NoHint
, CmmKinded (word32 hashNo) NoHint
, CmmKinded (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod) PtrHint
]
(Just [])
NoC_SRT -- No SRT b/c we PlayRisky
......
......@@ -122,10 +122,10 @@ emitPrimOp [res] ParOp [arg] live
-- later, we might want to inline it.
vols <- getVolatileRegs live
emitForeignCall' PlayRisky
[CmmHinted res NoHint]
[CmmKinded res NoHint]
(CmmCallee newspark CCallConv)
[ (CmmHinted (CmmReg (CmmGlobal BaseReg)) PtrHint)
, (CmmHinted arg PtrHint) ]
[ (CmmKinded (CmmReg (CmmGlobal BaseReg)) PtrHint)
, (CmmKinded arg PtrHint) ]
(Just vols)
NoC_SRT -- No SRT b/c we do PlayRisky
CmmMayReturn
......@@ -143,8 +143,8 @@ emitPrimOp [] WriteMutVarOp [mutv,var] live
[{-no results-}]
(CmmCallee (CmmLit (CmmLabel mkDirty_MUT_VAR_Label))
CCallConv)
[ (CmmHinted (CmmReg (CmmGlobal BaseReg)) PtrHint)
, (CmmHinted mutv PtrHint) ]
[ (CmmKinded (CmmReg (CmmGlobal BaseReg)) PtrHint)
, (CmmKinded mutv PtrHint) ]
(Just vols)
NoC_SRT -- No SRT b/c we do PlayRisky
CmmMayReturn
......@@ -349,9 +349,9 @@ emitPrimOp [res] op args live
| Just prim <- callishOp op
= do vols <- getVolatileRegs live
emitForeignCall' PlayRisky
[CmmHinted res NoHint]
[CmmKinded res NoHint]
(CmmPrim prim)
[CmmHinted a NoHint | a<-args] -- ToDo: hints?
[CmmKinded a NoHint | a<-args] -- ToDo: hints?
(Just vols)
NoC_SRT -- No SRT b/c we do PlayRisky
CmmMayReturn
......
......@@ -267,7 +267,7 @@ enterCostCentreThunk closure =
ifProfiling $ do
stmtC $ CmmStore curCCSAddr (costCentreFrom closure)
enter_ccs_fun stack = emitRtsCall (sLit "EnterFunCCS") [CmmHinted stack PtrHint] False
enter_ccs_fun stack = emitRtsCall (sLit "EnterFunCCS") [CmmKinded stack PtrHint] False
-- ToDo: vols
enter_ccs_fsub = enteringPAP 0
......@@ -415,8 +415,8 @@ emitSetCCC cc
pushCostCentre :: LocalReg -> CmmExpr -> CostCentre -> Code
pushCostCentre result ccs cc
= emitRtsCallWithResult result PtrHint
(sLit "PushCostCentre") [CmmHinted ccs PtrHint,
CmmHinted (CmmLit (mkCCostCentre cc)) PtrHint]
(sLit "PushCostCentre") [CmmKinded ccs PtrHint,
CmmKinded (CmmLit (mkCCostCentre cc)) PtrHint]
False
bumpSccCount :: CmmExpr -> CmmStmt
......
......@@ -333,24 +333,24 @@ emitIfThenElse cond then_part else_part
; labelC join_id
}
emitRtsCall :: LitString -> [CmmHinted CmmExpr] -> Bool -> Code
emitRtsCall :: LitString -> [CmmKinded CmmExpr] -> Bool -> Code
emitRtsCall fun args safe = emitRtsCall' [] fun args Nothing safe
-- The 'Nothing' says "save all global registers"
emitRtsCallWithVols :: LitString -> [CmmHinted CmmExpr] -> [GlobalReg] -> Bool -> Code
emitRtsCallWithVols :: LitString -> [CmmKinded CmmExpr] -> [GlobalReg] -> Bool -> Code
emitRtsCallWithVols fun args vols safe
= emitRtsCall' [] fun args (Just vols) safe
emitRtsCallWithResult :: LocalReg -> MachHint -> LitString
-> [CmmHinted CmmExpr] -> Bool -> Code
-> [CmmKinded CmmExpr] -> Bool -> Code
emitRtsCallWithResult res hint fun args safe
= emitRtsCall' [CmmHinted res hint] fun args Nothing safe
= emitRtsCall' [CmmKinded res hint] fun args Nothing safe