From eee7489ade3862519c1feb7dece04570469a1da3 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 12 Dec 2019 20:17:13 +0100 Subject: General cleanup --- Optimiser.hs | 37 ++++--------------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) (limited to 'Optimiser.hs') diff --git a/Optimiser.hs b/Optimiser.hs index f09128f..42ebdb1 100644 --- a/Optimiser.hs +++ b/Optimiser.hs @@ -127,8 +127,8 @@ deadBBElim gfds bbs = deadStoreElim :: [BB] -> [BB] deadStoreElim bbs = [BB bid (filter (not . shouldRemove) inss) term | BB bid inss term <- bbs] where - readtemps = Set.fromList (concatMap readTempsBB bbs) - alltemps = readtemps <> Set.fromList (concatMap writtenTempsBB bbs) + readtemps = Set.fromList (concatMap bbReadTemps bbs) + alltemps = readtemps <> Set.fromList (concatMap bbWrittenTemps bbs) elim = alltemps Set.\\ readtemps shouldRemove :: Instruction -> Bool @@ -151,7 +151,7 @@ deadStoreElim bbs = [BB bid (filter (not . shouldRemove) inss) term | BB bid ins tailCallIntro :: [BB] -> [BB] tailCallIntro bbs = map introduce bbs where - readInBB = map (Set.fromList . readTempsBB) bbs + readInBB = map (Set.fromList . bbReadTemps) bbs readBefore = init $ scanl (<>) Set.empty readInBB readAfter = tail $ scanr (<>) Set.empty readInBB readInOthers = Map.fromList [(bid, before <> after) @@ -163,7 +163,7 @@ tailCallIntro bbs = map introduce bbs ((RTemp i1, ICallC cl as), IRet (RTemp i2)) | i1 == i2 , i1 `Set.notMember` (readInOthers Map.! bid) - , i1 `notElem` concatMap (readTempsIC . snd) (init inss) -> + , i1 `notElem` onlyTemporaries (concatMap (allRefs . snd) (init inss)) -> BB bid (init inss) (ITailC cl as) _ -> orig @@ -178,34 +178,5 @@ dedupDatas (IRProgram origbbs gfds datatbl) = IRProgram (map goBB origbbs) gfds goI (ref, IData i) = (ref, IData (valueIdx Map.! (datatbl !! i))) goI ins = ins -readTempsBB :: BB -> [Int] -readTempsBB (BB _ inss term) = concatMap (readTempsIC . snd) inss ++ readTempsT term - -writtenTempsBB :: BB -> [Int] -writtenTempsBB (BB _ inss _) = concatMap (readTempsR . fst) inss - -readTempsIC :: InsCode -> [Int] -readTempsIC (IAssign r) = readTempsR r -readTempsIC (IParam _) = [] -readTempsIC (IClosure _) = [] -readTempsIC (IData _) = [] -readTempsIC (ICallC r rs) = readTempsR r ++ concatMap readTempsR rs -readTempsIC (IAllocClo _ rs) = concatMap readTempsR rs -readTempsIC (IDiscard _) = [] - -readTempsT :: Terminator -> [Int] -readTempsT (IBr r _ _) = readTempsR r -readTempsT (IJmp _) = [] -readTempsT (IRet r) = readTempsR r -readTempsT (ITailC r rs) = readTempsR r ++ concatMap readTempsR rs -readTempsT IExit = [] -readTempsT IUnknown = [] - -readTempsR :: Ref -> [Int] -readTempsR (RConst _) = [] -readTempsR (RTemp i) = [i] -readTempsR (RSClo _) = [] -readTempsR RNone = [] - mapFoldl :: (s -> a -> (s, b)) -> s -> [a] -> (s, [b]) mapFoldl f s = fmap reverse . foldl' (\(s', yet) x -> fmap (: yet) (f s' x)) (s, []) -- cgit v1.2.3-54-g00ecf