+++ /dev/null
-
-Adding @scc@ to the Haskell compiler -- A note of changes required
-
-
-Haskell Compiler:
-----------------
-
-SCC FRONT END SYNTAX: scc "label" expr
-
- hslexer.lex scc recognised as SCC
- hsparser.y scc expression parsed
- tree.ugn new tree construct
- printtree.c print scc (k bytecode)
- main.c -S flag for scc (else warning)
-
-SCC THROUGH COMPILER:
- reader PrefixSyn new construct (SCC')
- ReadPrefix read k bytecode
- PrefixToHs -> AbsSyn
-
- abstractSyn HsExpr new construct (SCC)
- BackSubst
- rename RenameExpr4 rename body
- typecheck TcExpr no unify, use type of body
- deSugar DsExpr -> CoreSyn
-
- Core Syntax & Transformations:
- coreSyn CoreSyn new construct (CoSCC) not primop
- AnnCoreSyn new construct
- FreeVars
- CoreFuns
-
- simplCore0 SubstAnal0
- SimplCore0
- RmTrivLets0
-
- simplCore default: not used n
- stranal-sem default: not used n
- interpreter york: ??? n
-
- Stg Syntax & Transformations:
- stgSyn CoreToStg -> StgSyn
- StgSyn new construct (StgSCC)
-
- StgInfo (new) pass gathering CC codegen info
-
- LetFloat default: not used n
- StgToStg default: not used n
- FreeVariables default: not used n
-
- Abstract C & Code Generation:
- main Main -scc flag for update flavour y
- codeGen CgMonad -scc new Cg info y
- absCSyn AbsCSyn new construct (CCostCentre) y
-
- codeGen CodeGen declaring cost centers y
- codeGen ClosureInfo closure kind y
- type y
- codeGen CgClosure closure description y
-
- abstractC PprAbsC info table kind y
- description y
- type y
-
- Real Code Generation Changes
- Scc Expression:
- +RCC update frame -- stack space required
- +set new cost centre
-
- Closure Entry:
- !different sizes for STD and CON update frames
- +single entry now requires RCC update frame
- +resume the CC in closure entered
-
- Return in Registers:
- +register return set RetCC (form closure or CCC)
- +register update reset closures CC to RetCC
- +attribute register update allocation to RetCC
-
- CC_ALLOC calls with heap allocation
-
- Optimisations:
- update closure entry with scc -- no RCC frame ToDo
-
-
-RTS stuff:
----------
-
-Time interupt y
-
-Cost centre declaration macros y
-
-Info table macros with "description" etc? y
-
-Modify update frames to include cost centres y
-Dummy update frame return vector y
-Recognition of dummy ret vect UpdatePAP y
-
-Heap profiling (2s)
- Cost Centre y
- Description y
-
-Profile info reported y
-
-Conditionalise need for timer interupt todo
-
-
-
-ADDING GRP_NAME to CC and TYPE to CAT:
--------------------------------------
-
-driver -- -Ggroup flag y
-main/Main.lhs -- -Ggroup flag y
- -- pass to codegen y
-codeGen -- grp_name passed into CCostCentre y
-absCSyn -- add group to CCostCentre y
- -- print group with CC decl y
- -- print type with INFO_TABLE decl y
-uniType -- getUniTyDescription y
-
-runtime -- Add group to CostCentre y
- -- Add group to CC_DECALRE y
- -- Add type to ClCategory y
- -- Add type to CAT_DECLARE y
- -- Add type to INFO_TABLEs y
-
- -- Report group in profiling report y
-
- -- Heap profiling with group/module/type
- -- selection by mod,grp,typ y
- -- profiling by cc,mod,grp,descr,type y
- -- always hash on feature y
- -- report by cc,mod,grp,descr,type y
-
- This is different to York as we can have unprofiled
- costs/heap inherited from other modules/groups.
-
- TESTING TESTING TESTING TESTING ToDo
-
-
-AUTO SCCS ...
--------------
-
-driver -- -prof-auto y
-main/Main.lhs -- -scc-auto y
- -- doSCCauto pass (desugared) Improve?
-profiling/SCCauto.lhs -- sccAutoTop Improve?
-
- Need to compare to all explicitly annotated. ToDo
-
- I think this needs to be incorperated into ToDo
- the desugarer/typechecker? as the dict stuff
- currently distorts this.
- OK if we are using lexical scoping !!!
- eg: See tautclause in clausify1.hs (cl.*)
-
-
-
-
-EXTENDING SCC ANNOTATIONS ... ToDo
------------------------------
-
-Front End: let scc "label"
- where scc "label"
- decl scc "label"
-
- hsparser.y extended scc expressions parsed
- tree.ugn new scc language constructs
- printtree.c print new scc bytecode forms
-
-Compiler:
- reader PrefixSyn new constructs
- ReadPrefix read bytecodes
- PrefixToHs -> AbsSyn
-
- abstractSyn HsExpr new constructs
- BackSubst
- rename RenameExpr4 rename body
- typecheck TcExpr no unify, use type of body
- deSugar desugar new scc constructs -> SCC
-
-
-LEXICAL/EVALUATION SCOPING ...
-
-driver -- -prof-eval -prof-lex (def) y
-main/Main.lhs -- -scc-eval -scc-lex y
- -- doSCClex pass (stg_binds') ToDo
-??? -- lexical scoping transform pass ToDo
-
-
-
-OTHER POSSIBLE STUFF:
-
-codegen/CodeGen.lhs -- code to declare mod and group strings
- -- use references in CCostCentre
-
-profiling cost report -- Reporting group / module costs
- with / without components
- Eg sort on group time
- with module time sub-sort
- with label time sub-sort