Code generation/SRT question
Ömer Sinan Ağacan
omeragacan at gmail.com
Wed Jan 1 09:34:33 UTC 2020
Hi Simon,
In Cmm if I have a recursive group of functions f and g, and I'm using f's
closure as the SRT for this group, should f's entry block's info table have
f_closure as its SRT?
In Cmm syntax
f_entry() {
{ info_tbls: [...
(c1vn,
label: ...
rep: ...
srt: ??????]
stack_info: ...
}
{offset
c1vn:
...
}
}
Here should I have `f_closure` in the srt field?
I'd expect yes, but looking at the current SRT code, in
CmmBuildInfoTables.updInfoSRTs, we have this:
(newInfo, srtEntries) = case mapLookup (g_entry g) funSRTEnv of
Nothing ->
-- if we don't add SRT entries to this closure, then we
-- want to set the srt field in its info table as usual
(info_tbl { cit_srt = mapLookup (g_entry g) srt_env }, [])
Just srtEntries -> srtTrace "maybeStaticFun" (ppr res)
(info_tbl { cit_rep = new_rep }, res)
where res = [ CmmLabel lbl | SRTEntry lbl <- srtEntries ]
Here we only update SRT field of the block if we're not adding SRT entries to
the function's closure, so in the example above, because we're using the
function as SRT (and adding SRT entries to its closure) SRT field of c1vn won't
be updated.
Am I missing anything?
Thanks,
Ömer
More information about the ghc-devs
mailing list