From d4a795139f6e642441f0b497663d35f025a9480c Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Sat, 30 Nov 2019 09:07:55 +0100 Subject: TODO note in Main about stackification --- Main.hs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'Main.hs') diff --git a/Main.hs b/Main.hs index c378dde..2173653 100644 --- a/Main.hs +++ b/Main.hs @@ -38,6 +38,17 @@ parseOptions' (_, Just _) (_:_) = putStrLn "At most one filename argument expect parseOptions :: [String] -> IO (Options, Maybe FilePath) parseOptions = parseOptions' (Options False False, Nothing) +-- TODO: Note about stackification. Temporaries need to be pushed before +-- a call if they're live after it and they could, conceivably, be wrongly +-- mutated by the called function otherwise. This has a couple of +-- interesting consequences: +-- 1. No temporaries ever need to be pushed from the global context, or +-- "main function", since they can never be wrongly mutated: that +-- requires re-entering the function in which they were defined, but one +-- can never re-enter the "main function". +-- 2. No temporaries ever need to be pushed before a tail call; since no +-- local variables are live after it (obviously). (Global variables are +-- covered by point (1.).) liveness :: IRProgram -> Map.Map Int [Set.Set Int] liveness (IRProgram bbs _ _) = let sets = livenessAnalysis bbs bidOf itemsOf outEdges fread fwrite -- cgit v1.2.3-54-g00ecf