Skip to content

Commit 540b2b7

Browse files
committed
add support for global layout optimization for multiple functions
1 parent 0344417 commit 540b2b7

File tree

9 files changed

+281
-88
lines changed

9 files changed

+281
-88
lines changed

gibbon-compiler/examples/layout_bench/layout1ManyFuncsProducerConsumerOpt.ans

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ filterByKeywordInTagList keyword blogs = case blogs of
2121
Layout1 header id author date content tags rst -> let present = searchBlogTags keyword tags
2222
in if present then
2323
let newRst = filterByKeywordInTagList keyword rst
24-
in Layout1 header id author date content tags newRst
24+
in Layout4 tags content newRst header id author date
2525
else filterByKeywordInTagList keyword rst
2626

2727

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
(Layout4 ->i ->i ->i (TagList (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Nil_v_1132)))))))))))) ->i (Content (Plain (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) ->r (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))))))))))))))))))))))))))))))))))))))))))))))))))))) (Layout4 ->i ->i ->i (TagList (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Nil_v_1132)))))))))))) ->i (Content (Plain (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))))))))))))))))))))))))))))))))))))))))))))))))))))) (End) ->i ->i ->i (Header Vector) ->i ->i ->i (ID 9) ->i ->i ->i (Author Vector) ->i ->i ->i (Date Vector)) ->i ->i ->i (Header Vector) ->i ->i ->i (ID 8) ->i ->i ->i (Author Vector) ->i ->i ->i (Date Vector))'#()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
(Layout4 ->i ->i ->i (TagList (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Nil_v_1132)))))))))))) ->i (Content (Plain (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))))))))))))))))))))))))))))))))))))))))))))))))))))) (Layout4 ->i ->i ->i (TagList (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Cons_v_1132 Vector (Nil_v_1132)))))))))))) ->i (Content (Plain (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) ->r (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 (Emph (Cons_v_1131 (Emph (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))) (Nil_v_1131))) (Cons_v_1131 ->i (Str Vector) (Cons_v_1131 ->i (Str Vector) (Nil_v_1131))))))))))))))))))))))))))))))))))))))))))))))))))))) (End) ->i ->i ->i (Header Vector) ->i ->i ->i (ID 9) ->i ->i ->i (Author Vector) ->i ->i ->i (Date Vector)) ->i ->i ->i (Header Vector) ->i ->i ->i (ID 8) ->i ->i ->i (Author Vector) ->i ->i ->i (Date Vector))'#()

gibbon-compiler/src/Gibbon/Compiler.hs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ import Gibbon.Passes.Codegen (codegenProg)
9292
import Gibbon.Passes.Fusion2 (fusion2)
9393
import Gibbon.Passes.CalculateBounds (inferRegSize)
9494
import Gibbon.Pretty
95-
import Gibbon.Passes.OptimizeADTLayout (optimizeADTLayout)
95+
import Gibbon.Passes.OptimizeADTLayout (locallyOptimizeDataConLayout, globallyOptimizeDataConLayout)
9696

9797

9898

@@ -599,7 +599,8 @@ passes config@Config{dynflags} l0 = do
599599
no_rcopies = gopt Opt_No_RemoveCopies dynflags
600600
parallel = gopt Opt_Parallel dynflags
601601
should_fuse = gopt Opt_Fusion dynflags
602-
opt_layout = gopt Opt_Layout dynflags
602+
opt_layout_local = gopt Opt_Layout_Local dynflags
603+
opt_layout_global = gopt Opt_Layout_Global dynflags
603604
tcProg3 = L3.tcProg isPacked
604605
l0 <- go "freshen" freshNames l0
605606
l0 <- goE0 "typecheck" L0.tcProg l0
@@ -641,11 +642,16 @@ passes config@Config{dynflags} l0 = do
641642
-- branches before InferLocations.
642643

643644
-- Note: L1 -> L2
644-
l1 <- if opt_layout
645+
l1 <- if opt_layout_local
645646
then do
646-
after_layout_out <- goE1 "optimizeADTLayout" optimizeADTLayout l1
647+
after_layout_out <- goE1 "optimizeADTLayoutLocal" locallyOptimizeDataConLayout l1
647648
flatten_after_opt <- goE1 "L1.flatten2" flattenL1 after_layout_out
648-
pure flatten_after_opt
649+
pure flatten_after_opt
650+
else if opt_layout_global
651+
then do
652+
after_layout_out <- goE1 "optimizeADTLayoutGlobal" globallyOptimizeDataConLayout l1
653+
flatten_after_opt <- goE1 "L1.flatten2" flattenL1 after_layout_out
654+
pure flatten_after_opt
649655
else return l1
650656
l1 <- goE1 "copyOutOfOrderPacked" copyOutOfOrderPacked l1
651657
l1 <- goE1 "simplify_2" simplifyL1 l1

gibbon-compiler/src/Gibbon/DynFlags.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ data GeneralFlag
3939
| Opt_GenGc -- ^ Use the new non-generational GC.
4040
| Opt_NoEagerPromote -- ^ Disable eager promotion.
4141
| Opt_SimpleWriteBarrier -- ^ Disables eliminate-indirection-chains optimization.
42-
| Opt_Layout -- ^ Optimize the layout of Algebraic data types
42+
| Opt_Layout_Local -- ^ Optimize the layout of Algebraic data types locally
43+
| Opt_Layout_Global -- ^ Optimize the layout of Algebraic data types globally
4344
deriving (Show,Read,Eq,Ord)
4445

4546
-- | Exactly like GHC's ddump flags.
@@ -116,7 +117,8 @@ dynflagsParser = DynFlags <$> (S.fromList <$> many gflagsParser) <*> (S.fromList
116117
flag' Opt_GenGc (long "gen-gc" <> help "Use the new generational GC.") <|>
117118
flag' Opt_NoEagerPromote (long "no-eager-promote" <> help "Disable eager promotion.") <|>
118119
flag' Opt_SimpleWriteBarrier (long "simple-write-barrier" <> help "Disables eliminate-indirection-chains optimization.") <|>
119-
flag' Opt_Layout (long "opt-layout" <> help "Optimizes the Layout of Algebraic data types")
120+
flag' Opt_Layout_Local (long "opt-layout-local" <> help "Optimizes the Layout of Algebraic data types locally") <|>
121+
flag' Opt_Layout_Global (long "opt-layout-global" <> help "Optimizes the Layout of Algebraic data types globally")
120122

121123

122124
dflagsParser :: Parser DebugFlag

gibbon-compiler/src/Gibbon/Passes/DefinitionUseChains.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ progToVEnv p@Prog {ddefs, fundefs, mainExp} =
8989
in unionEnv2s $ [expEnva, expEnvb, expEnvc]
9090
MkProdE xs -> unionEnv2s (L.map (getExpTyEnv env) xs)
9191
ProjE i e -> error "getExpTyEnv: TODO ProjE"
92-
TimeIt e ty b -> error "getExpTyEnv: TODO TimeIt"
92+
TimeIt e ty b -> getExpTyEnv env e
9393
WithArenaE v e -> error "getExpTyEnv: TODO WithArenaE"
9494
SpawnE f locs args -> error "getExpTyEnv: TODO SpawnE"
9595
SyncE -> error "getExpTyEnv: TODO SyncE"

0 commit comments

Comments
 (0)