| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
o Moved BlockId stuff to a new file to avoid module recursion
o Defined stack areas for parameter-passing locations and spill slots
o Part way through replacing copy in and copy out nodes
- added movement instructions for stack pointer
- added movement instructions for call and return parameters
(but not with the proper calling conventions)
o Inserting spills and reloads for proc points is now procpoint-aware
(it was relying on the presence of a CopyIn node as a proxy for
procpoint knowledge)
o Changed ZipDataflow to expect AGraphs (instead of being polymorphic in
the type of graph)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Several changes in this patch, partially bug fixes, partially new code:
o bug fixes in ZipDataflow
- added some checks to verify that facts converge
- removed some erroneous checks of convergence on entry nodes
- added some missing applications of transfer functions
o changed dataflow clients to use ZipDataflow, making ZipDataflow0 obsolete
o eliminated DFA monad (no need for separate analysis and rewriting monads with ZipDataflow)
o started stack layout changes
- no longer generating CopyIn and CopyOut nodes (not yet fully expunged though)
- still not using proper calling conventions
o simple new optimizations:
- common block elimination
-- have not yet tried to move the Adams opt out of CmmProcPointZ
- block concatenation
o piped optimization fuel up to the HscEnv
- can be limited by a command-line flag
- not tested, and probably not yet properly used by clients
o added unique supply to FuelMonad, also lifted unique supply to DFMonad
|
|
|
|
|
|
| |
C-- no longer has 'hints'; to guide parameter passing, it
has 'kinds'. Renamed type constructor, data constructor, and record
fields accordingly
|
|
|
|
|
|
|
| |
This allows the instance of UserOfLocalRegs to be within Haskell98, and IMHO
makes the code a little cleaner generally.
This is one small (though tedious) step towards making GHC's code more
portable...
|
|
|
|
|
|
|
|
|
|
| |
After my talk, I got the idea of 'shallow rewriting' for the
dataflow framework. Here it is implemented, along with
some related ideas late making Graph and not LGraph primary.
The only bad thing is that the whole bit is stitched together
out of ill-fitting pieces, kind of like Frankenstein's monster.
A new ZipDataflow will rise out of the ashes.
|
|
|
|
|
|
|
|
|
|
| |
- ZipCfg: add mkBlockId :: Unique -> BlockId
- MkZipCfg: change sequence --> catAGrpahs
- MkZipCfgCmm: add mkCmmIfThen
Not fully validated, but I don't think anything will break
|
| |
|
|
|
|
|
| |
We also avoid using -fno-warn-orphans with older GHCs that don't understand
the flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I've renamed a number of type and data constructors within Cmm so that
the names used in the compiler may more closely reflect the C--
specification 2.1. I've done a bit of other renaming as well.
Highlights:
CmmFormal and CmmActual now bear a CmmKind (which for now is a
MachHint as before)
CmmFormals = [CmmFormal] and CmmActuals = [CmmActual]
suitable changes have been made to both code and nonterminals in the
Cmm parser (which is as yet untested)
For reasons I don't understand, parts of the code generator use a
sequence of 'formal parameters' with no C-- kinds. For these we now
have the types
type CmmFormalWithoutKind = LocalReg
type CmmFormalsWithoutKinds = [CmmFormalWithoutKind]
A great many appearances of (Tau, MachHint) have been simplified to
the appropriate CmmFormal or CmmActual, though I'm sure there are
more opportunities.
Kind and its data constructors are now renamed to
data GCKind = GCKindPtr | GCKindNonPtr
to avoid confusion with the Kind used in the type checker and with CmmKind.
Finally, in a somewhat unrelated bit (and in honor of Simon PJ, who
thought of the name), the Whalley/Davidson 'transaction limit' is now
called 'OptimizationFuel' with the net effect that there are no longer
two unrelated uses of the abbreviation 'tx'.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Changes too numerous to comment on, but here is some old history that
I saved:
Wed Aug 15 11:07:13 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* type synonyms made consistent with new Cmm types
M ./compiler/nativeGen/MachInstrs.hs -2 +2
Mon Aug 20 19:22:14 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* pushing return info beyond cmm into codegen
M ./compiler/codeGen/Bitmap.hs r3
M ./compiler/codeGen/CgBindery.lhs r3
M ./compiler/codeGen/CgCallConv.hs r3
M ./compiler/codeGen/CgCase.lhs r3
M ./compiler/codeGen/CgClosure.lhs r3
M ./compiler/codeGen/CgCon.lhs r3
M ./compiler/codeGen/CgExpr.lhs r3
M ./compiler/codeGen/CgForeignCall.hs -6 +7 r3
M ./compiler/codeGen/CgHeapery.lhs r3
M ./compiler/codeGen/CgHpc.hs +1 r3
M ./compiler/codeGen/CgInfoTbls.hs r3
M ./compiler/codeGen/CgLetNoEscape.lhs r3
M ./compiler/codeGen/CgMonad.lhs r3
M ./compiler/codeGen/CgParallel.hs r3
M ./compiler/codeGen/CgPrimOp.hs +3 r3
M ./compiler/codeGen/CgProf.hs r3
M ./compiler/codeGen/CgStackery.lhs r3
M ./compiler/codeGen/CgTailCall.lhs r3
M ./compiler/codeGen/CgTicky.hs r3
M ./compiler/codeGen/CgUtils.hs -1 +1 r3
M ./compiler/codeGen/ClosureInfo.lhs r3
M ./compiler/codeGen/CodeGen.lhs r3
M ./compiler/codeGen/SMRep.lhs r3
M ./compiler/nativeGen/AsmCodeGen.lhs -2 +2 r1
M ./compiler/nativeGen/MachCodeGen.hs -3 +3 r1
M ./compiler/nativeGen/MachInstrs.hs r1
M ./compiler/nativeGen/MachRegs.lhs r1
M ./compiler/nativeGen/NCGMonad.hs r1
M ./compiler/nativeGen/PositionIndependentCode.hs r1
M ./compiler/nativeGen/PprMach.hs r1
M ./compiler/nativeGen/RegAllocInfo.hs r1
M ./compiler/nativeGen/RegisterAlloc.hs r1
Mon Aug 20 20:54:41 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* put CmmReturnInfo into a CmmCall (and related types)
M ./compiler/cmm/Cmm.hs -2 +1 r3
M ./compiler/cmm/CmmBrokenBlock.hs -13 +12 r1
M ./compiler/cmm/CmmCPS.hs -3 +3
M ./compiler/cmm/CmmCPSGen.hs -8 +6 r1
M ./compiler/cmm/CmmLint.hs -1 +1
M ./compiler/cmm/CmmLive.hs -1 +1
M ./compiler/cmm/CmmOpt.hs -3 +3
M ./compiler/cmm/CmmParse.y -6 +6 r3
M ./compiler/cmm/PprC.hs -3 +3
M ./compiler/cmm/PprCmm.hs -7 +4 r2
M ./compiler/codeGen/CgForeignCall.hs -7 +6 r2
M ./compiler/codeGen/CgHpc.hs -1 r1
M ./compiler/codeGen/CgPrimOp.hs -3 r1
M ./compiler/codeGen/CgUtils.hs -1 +1 r1
M ./compiler/nativeGen/AsmCodeGen.lhs -2 +2
M ./compiler/nativeGen/MachCodeGen.hs -3 +3 r1
Tue Aug 21 18:09:13 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* add call info in nativeGen
M ./compiler/nativeGen/AsmCodeGen.lhs r1
M ./compiler/nativeGen/MachInstrs.hs r1
M ./compiler/nativeGen/MachRegs.lhs r1
M ./compiler/nativeGen/NCGMonad.hs r1
M ./compiler/nativeGen/PositionIndependentCode.hs r1
M ./compiler/nativeGen/PprMach.hs r1
M ./compiler/nativeGen/RegAllocInfo.hs r1
Wed Aug 22 16:41:58 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* ListGraph is now a newtype, not a synonym
The resultant bookkeepping is unenviable, but the change
greatly simplifies our ability to make Cmm things propertly
Outputable for both list-graph and zipper-graph representations.
M ./compiler/cmm/Cmm.hs -5 +3
M ./compiler/cmm/CmmCPS.hs -2 +2
M ./compiler/cmm/CmmCPSGen.hs -1 +1
M ./compiler/cmm/CmmContFlowOpt.hs -3 +3
M ./compiler/cmm/CmmCvt.hs -2 +2
M ./compiler/cmm/CmmInfo.hs -2 +3
M ./compiler/cmm/CmmLint.hs -1 +1
M ./compiler/cmm/CmmOpt.hs -2 +2
M ./compiler/cmm/PprC.hs -1 +1
M ./compiler/cmm/PprCmm.hs -5 +8
M ./compiler/cmm/PprCmmZ.hs -7 +1
M ./compiler/codeGen/CgMonad.lhs -1 +1
M ./compiler/nativeGen/AsmCodeGen.lhs -15 +15
M ./compiler/nativeGen/MachCodeGen.hs -2 +2
M ./compiler/nativeGen/PositionIndependentCode.hs -6 +6
M ./compiler/nativeGen/PprMach.hs -3 +2
M ./compiler/nativeGen/RegAllocColor.hs +1
M ./compiler/nativeGen/RegAllocLinear.hs -4 +5
M ./compiler/nativeGen/RegCoalesce.hs -6 +6
M ./compiler/nativeGen/RegLiveness.hs -12 +12
Thu Aug 23 13:44:49 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* diagnostic assistance in case fromJust fails
M ./compiler/nativeGen/MachCodeGen.hs -2 +5
Thu Aug 23 14:07:28 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* give every block, even the first, a label
With branch-chain elimination, the first block of a procedure
might be the target of a branch. This actually happens to
a dozen or more procedures in the run-time system.
M ./compiler/nativeGen/PprMach.hs -8 +3
Fri Aug 24 17:27:04 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* clean up the code in PprMach
M ./compiler/nativeGen/PprMach.hs -16 +14
Fri Aug 24 19:35:03 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* a bunch of impedance matching to get the compiler to build, plus
* the plus is diagnostics for unreachable code, which required
moving a lot of prettyprinting code
M ./compiler/cmm/Cmm.hs -7 +5
M ./compiler/cmm/CmmCPSZ.hs -1 +1
M ./compiler/cmm/CmmCvt.hs -8 +8
M ./compiler/cmm/CmmParse.y -4 +3
M ./compiler/cmm/MkZipCfg.hs -19 +9
M ./compiler/cmm/PprCmmZ.hs -118 +4
M ./compiler/cmm/ZipCfg.hs -1 +13
M ./compiler/cmm/ZipCfgCmm.hs -10 +129
M ./compiler/main/HscMain.lhs -4 +4
M ./compiler/nativeGen/NCGMonad.hs -2 +2
M ./compiler/nativeGen/RegAllocInfo.hs -3 +3
Fri Aug 31 14:38:02 BST 2007 Norman Ramsey <nr@eecs.harvard.edu>
* fix a warning about an import
M ./compiler/nativeGen/RegAllocColor.hs -1 +1
|
|
|
|
|
|
|
|
|
| |
The type parameter to a C-- procedure now represents a control-flow
graph, not a single instruction. The newtype ListGraph preserves the
current representation while enabling other representations and a
sensible way of prettyprinting. Except for a few changes in the
prettyprinter the new compiler binary should be bit-for-bit identical
to the old.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Older GHCs can't parse OPTIONS_GHC.
This also changes the URL referenced for the -w options from
WorkingConventions#Warnings to CodingStyle#Warnings for the compiler
modules.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
* The correct definition of C-- requires that a procedure not
'fall off the end'. The 'never returns' annotation tells us
if a (foreign) call is not going to return.
Validated!
|
|
|
|
|
|
| |
This patch should have no effect; it's mainly comments, layout,
plus this contructor name change.
|
| |
|
|
|
|
| |
(This required a bit of refactoring of CmmInfo.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These include:
- Stack size detection now includes function arguments.
- Stack size detection now avoids stack checks just because of
the GC block.
- A CmmCall followed by a CmmBranch will no longer generate an extra
continuation consisting just of the brach.
- Multiple CmmCall/CmmBranch pairs that all go to the same place
will try to use the same continuation. If they can't (because
the return value signature is different), adaptor block are built.
- Function entry statements are now in a separate block.
(Fixed bug with branches to the entry block having unintended effects.)
- Other changes that I can't recall right now.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This eliminates one of the panics introduced by
the previous patch:
'First pass at implementing info tables for CPS'
The other panic introduced by that patch still remains.
It was due to the need to convert from a
ContinuationInfo to a CmmInfo.
(codeGen/CgInfoTbls.hs:emitClosureCodeAndInfoTable)
(codeGen/CgInfoTbls.hs:emitReturnTarget)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a fairly complete implementation, however
two 'panic's have been placed in the critical path
where the implementation is still a bit lacking so
do not expect it to run quite yet.
One call to panic is because we still need to create
a GC block for procedures that don't have them yet.
(cmm/CmmCPS.hs:continuationToProc)
The other is due to the need to convert from a
ContinuationInfo to a CmmInfo.
(codeGen/CgInfoTbls.hs:emitClosureCodeAndInfoTable)
(codeGen/CgInfoTbls.hs:emitReturnTarget)
|
| |
|
|
|
|
|
|
| |
This version should compile but is still incomplete as it introduces
potential bugs at the places marked 'TODO FIXME NOW'.
It is being recorded to help keep track of changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This frees the Cmm data type from keeping a list of live global registers
in CmmCall which helps prepare for the CPS conversion phase.
CPS conversion does its own liveness analysis and takes input that should
not directly refer to parameter registers (e.g. R1, F5, D3, L2). Since
these are the only things which could occur in the live global register
list, CPS conversion makes that field of the CmmCall constructor obsolite.
Once the CPS conversion pass is fully implemented, global register saving
will move from codeGen into the CPS pass. Until then, this patch
is worth scrutinizing and testing to ensure it doesn't cause any performance
or correctness problems as the code passed to the backends by the CPS
converting will look very similar to the code that this patch makes codeGen
pass to the backend.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since a CmmCall returns CmmFormals which may include
global registers (and indeed one place in the code
returns the results of a CmmCall into BaseReg) and
since CPS conversion will change those return slots
into formal arguments for the continuation of the call,
CmmProc has to have CmmFormals for the formal arguments.
Oddly, the old code never made use of procedure arguments
so this change only effects the types and not any of the code.
(Because [] is both of type [LocalReg] and CmmFormals.)
|
| |
|
|
|
|
| |
This is a safety check-in, before I begin a cleanup.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This is only turned on with -O, and probably won't make much
difference at the moment, but it will be important for semi-tagging.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch is a start on removing import lists and generally tidying
up the top of each module. In addition to removing import lists:
- Change DATA.IOREF -> Data.IORef etc.
- Change List -> Data.List etc.
- Remove $Id$
- Update copyrights
- Re-order imports to put non-GHC imports last
- Remove some unused and duplicate imports
|
|
Most of the other users of the fptools build system have migrated to
Cabal, and with the move to darcs we can now flatten the source tree
without losing history, so here goes.
The main change is that the ghc/ subdir is gone, and most of what it
contained is now at the top level. The build system now makes no
pretense at being multi-project, it is just the GHC build system.
No doubt this will break many things, and there will be a period of
instability while we fix the dependencies. A straightforward build
should work, but I haven't yet fixed binary/source distributions.
Changes to the Building Guide will follow, too.
|