From 5347cb83e730a84fabe162dfc722132cc3ed0f75 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 29 Nov 2019 12:01:43 +0100 Subject: WIP push temporaries before calls Requires liveness analysis --- Intermediate.hs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'Intermediate.hs') diff --git a/Intermediate.hs b/Intermediate.hs index b0f12b9..2705431 100644 --- a/Intermediate.hs +++ b/Intermediate.hs @@ -5,6 +5,7 @@ import qualified Data.Map.Strict as Map import Data.Maybe import AST +import Util data IRProgram = @@ -60,20 +61,24 @@ termOf (BB _ _ t) = t class AllRefs a where allRefs :: a -> [Ref] +instance AllRefs BB where + allRefs (BB _ inss term) = + sortUniq $ concatMap (allRefs . snd) inss ++ allRefs term + instance AllRefs InsCode where allRefs (IAssign r) = [r] allRefs (IParam _) = [] allRefs (IClosure _) = [] allRefs (IData _) = [] - allRefs (ICallC r rs) = r : rs - allRefs (IAllocClo _ rs) = rs + allRefs (ICallC r rs) = sortUniq (r : rs) + allRefs (IAllocClo _ rs) = sortUniq rs allRefs (IDiscard r) = [r] instance AllRefs Terminator where allRefs (IBr r _ _) = [r] allRefs (IJmp _) = [] allRefs (IRet r) = [r] - allRefs (ITailC r rs) = r : rs + allRefs (ITailC r rs) = sortUniq (r : rs) allRefs IExit = [] allRefs IUnknown = [] -- cgit v1.2.3-54-g00ecf