diff options
Diffstat (limited to 'compiler/codeGen')
-rw-r--r-- | compiler/codeGen/Bitmap.hs | 5 | ||||
-rw-r--r-- | compiler/codeGen/CgBindery.lhs | 31 | ||||
-rw-r--r-- | compiler/codeGen/CgCallConv.hs | 49 | ||||
-rw-r--r-- | compiler/codeGen/CgCase.lhs | 70 | ||||
-rw-r--r-- | compiler/codeGen/CgClosure.lhs | 50 | ||||
-rw-r--r-- | compiler/codeGen/CgCon.lhs | 51 | ||||
-rw-r--r-- | compiler/codeGen/CgExpr.lhs | 67 | ||||
-rw-r--r-- | compiler/codeGen/CgForeignCall.hs | 18 | ||||
-rw-r--r-- | compiler/codeGen/CgHeapery.lhs | 55 | ||||
-rw-r--r-- | compiler/codeGen/CgInfoTbls.hs | 51 | ||||
-rw-r--r-- | compiler/codeGen/CgLetNoEscape.lhs | 33 | ||||
-rw-r--r-- | compiler/codeGen/CgMonad.lhs | 29 | ||||
-rw-r--r-- | compiler/codeGen/CgParallel.hs | 14 | ||||
-rw-r--r-- | compiler/codeGen/CgPrimOp.hs | 25 | ||||
-rw-r--r-- | compiler/codeGen/CgProf.hs | 31 | ||||
-rw-r--r-- | compiler/codeGen/CgStackery.lhs | 17 | ||||
-rw-r--r-- | compiler/codeGen/CgTailCall.lhs | 41 | ||||
-rw-r--r-- | compiler/codeGen/CgTicky.hs | 36 | ||||
-rw-r--r-- | compiler/codeGen/CgUtils.hs | 39 | ||||
-rw-r--r-- | compiler/codeGen/ClosureInfo.lhs | 29 | ||||
-rw-r--r-- | compiler/codeGen/CodeGen.lhs | 55 | ||||
-rw-r--r-- | compiler/codeGen/SMRep.lhs | 17 |
22 files changed, 360 insertions, 453 deletions
diff --git a/compiler/codeGen/Bitmap.hs b/compiler/codeGen/Bitmap.hs index c0b490978c..93cf43f639 100644 --- a/compiler/codeGen/Bitmap.hs +++ b/compiler/codeGen/Bitmap.hs @@ -1,5 +1,5 @@ -- --- (c) The University of Glasgow 2003 +-- (c) The University of Glasgow 2003-2006 -- -- Functions for constructing bitmaps, which are used in various @@ -17,7 +17,8 @@ module Bitmap ( import SMRep import Constants -import DATA_BITS + +import Data.Bits {-| A bitmap represented by a sequence of 'StgWord's on the /target/ diff --git a/compiler/codeGen/CgBindery.lhs b/compiler/codeGen/CgBindery.lhs index 96735ef211..d7f2579e76 100644 --- a/compiler/codeGen/CgBindery.lhs +++ b/compiler/codeGen/CgBindery.lhs @@ -1,4 +1,5 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % \section[CgBindery]{Utility functions related to doing @CgBindings@} @@ -31,26 +32,24 @@ module CgBindery ( #include "HsVersions.h" import CgMonad -import CgHeapery ( getHpRelOffset ) -import CgStackery ( freeStackSlots, getSpRelOffset ) -import CgUtils ( cgLit, cmmOffsetW ) -import CLabel ( mkClosureLabel, pprCLabel ) -import ClosureInfo ( mkLFImported, mkLFArgument, LambdaFormInfo ) +import CgHeapery +import CgStackery +import CgUtils +import CLabel +import ClosureInfo import Cmm import PprCmm ( {- instance Outputable -} ) -import SMRep ( CgRep(..), WordOff, isFollowableArg, - isVoidArg, cgRepSizeW, argMachRep, - idCgRep, typeCgRep ) -import Id ( Id, idName ) +import SMRep +import Id import VarEnv -import VarSet ( varSetElems ) -import Literal ( literalType ) -import Maybes ( catMaybes ) -import Name ( isExternalName ) -import StgSyn ( StgArg, StgLiveVars, GenStgArg(..), isStgTypeArg ) -import Unique ( Uniquable(..) ) -import UniqSet ( elementOfUniqSet ) +import VarSet +import Literal +import Maybes +import Name +import StgSyn +import Unique +import UniqSet import Outputable \end{code} diff --git a/compiler/codeGen/CgCallConv.hs b/compiler/codeGen/CgCallConv.hs index f463255807..b48b7d52b4 100644 --- a/compiler/codeGen/CgCallConv.hs +++ b/compiler/codeGen/CgCallConv.hs @@ -1,12 +1,12 @@ ----------------------------------------------------------------------------- -- --- CgCallConv +-- (c) The University of Glasgow 2004-2006 +-- +-- CgCallConv -- -- The datatypes and functions here encapsulate the -- calling and return conventions used by the code generator. -- --- (c) The University of Glasgow 2004 --- ----------------------------------------------------------------------------- @@ -33,36 +33,29 @@ module CgCallConv ( #include "HsVersions.h" -import CgUtils ( emitRODataLits, mkWordCLit ) +import CgUtils import CgMonad - -import Constants ( mAX_FAMILY_SIZE_FOR_VEC_RETURNS, - mAX_Vanilla_REG, mAX_Float_REG, - mAX_Double_REG, mAX_Long_REG, - mAX_Real_Vanilla_REG, mAX_Real_Float_REG, - mAX_Real_Double_REG, mAX_Real_Long_REG, - bITMAP_BITS_SHIFT - ) - -import ClosureInfo ( ArgDescr(..), Liveness(..) ) -import CgStackery ( getSpRelOffset ) import SMRep -import MachOp ( wordRep ) -import Cmm ( CmmExpr(..), GlobalReg(..), CmmLit(..), CmmReg(..), node ) -import CmmUtils ( mkLblExpr ) + +import MachOp +import Cmm import CLabel -import Maybes ( mapCatMaybes ) -import Id ( Id ) -import Name ( Name ) -import TyCon ( TyCon, tyConFamilySize ) -import Bitmap ( Bitmap, mAX_SMALL_BITMAP_SIZE, - mkBitmap, intsToReverseBitmap ) -import Util ( isn'tIn, sortLe ) -import StaticFlags ( opt_Unregisterised ) -import FastString ( LitString ) + +import Constants +import ClosureInfo +import CgStackery +import CmmUtils +import Maybes +import Id +import Name +import TyCon +import Bitmap +import Util +import StaticFlags +import FastString import Outputable -import DATA_BITS +import Data.Bits ------------------------------------------------------------------------- -- diff --git a/compiler/codeGen/CgCase.lhs b/compiler/codeGen/CgCase.lhs index 7b4861a11d..23310dd4e7 100644 --- a/compiler/codeGen/CgCase.lhs +++ b/compiler/codeGen/CgCase.lhs @@ -1,13 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgCase.lhs,v 1.75 2005/06/21 10:44:41 simonmar Exp $ -% -%******************************************************** -%* * -\section[CgCase]{Converting @StgCase@ expressions} -%* * -%******************************************************** \begin{code} module CgCase ( cgCase, saveVolatileVarsAndRegs, @@ -19,43 +13,33 @@ module CgCase ( cgCase, saveVolatileVarsAndRegs, import {-# SOURCE #-} CgExpr ( cgExpr ) import CgMonad -import StgSyn -import CgBindery ( getArgAmodes, - bindNewToReg, bindNewToTemp, - getCgIdInfo, getArgAmode, - rebindToStack, getCAddrModeIfVolatile, - nukeDeadBindings, idInfoToAmode - ) -import CgCon ( bindConArgs, bindUnboxedTupleComponents ) -import CgHeapery ( altHeapCheck, unbxTupleHeapCheck ) -import CgCallConv ( dataReturnConvPrim, ctrlReturnConvAlg, - CtrlReturnConvention(..) - ) -import CgStackery ( allocPrimStack, allocStackTop, getSpRelOffset, - deAllocStackTop, freeStackSlots - ) -import CgTailCall ( performTailCall ) -import CgPrimOp ( cgPrimOp ) -import CgForeignCall ( cgForeignCall ) -import CgUtils ( newTemp, cgLit, emitLitSwitch, emitSwitch, - tagToClosure ) -import CgProf ( curCCS, curCCSAddr ) -import CgInfoTbls ( emitDirectReturnTarget, emitAlgReturnTarget, - dataConTagZ ) -import SMRep ( CgRep(..), retAddrSizeW, nonVoidArg, isVoidArg, - idCgRep, tyConCgRep, typeHint ) -import CmmUtils ( CmmStmts, noStmts, oneStmt, plusStmts ) +import CgBindery +import CgCon +import CgHeapery +import CgCallConv +import CgStackery +import CgTailCall +import CgPrimOp +import CgForeignCall +import CgUtils +import CgProf +import CgInfoTbls + +import ClosureInfo +import SMRep +import CmmUtils import Cmm -import MachOp ( wordRep ) -import ClosureInfo ( mkLFArgument ) -import StaticFlags ( opt_SccProfilingOn ) -import Id ( Id, idName, isDeadBinder, idType ) -import ForeignCall ( ForeignCall(..), CCallSpec(..), playSafe ) -import VarSet ( varSetElems ) -import CoreSyn ( AltCon(..) ) -import PrimOp ( PrimOp(..), primOpOutOfLine ) -import TyCon ( isEnumerationTyCon, tyConFamilySize ) -import Util ( isSingleton ) +import MachOp + +import StgSyn +import StaticFlags +import Id +import ForeignCall +import VarSet +import CoreSyn +import PrimOp +import TyCon +import Util import Outputable \end{code} diff --git a/compiler/codeGen/CgClosure.lhs b/compiler/codeGen/CgClosure.lhs index 1a2cbc5202..99290d2142 100644 --- a/compiler/codeGen/CgClosure.lhs +++ b/compiler/codeGen/CgClosure.lhs @@ -1,8 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgClosure.lhs,v 1.72 2005/05/18 12:06:51 simonmar Exp $ -% \section[CgClosure]{Code generation for closures} This module provides the support code for @StgToAbstractC@ to deal @@ -23,34 +22,29 @@ import {-# SOURCE #-} CgExpr ( cgExpr ) import CgMonad import CgBindery import CgHeapery -import CgStackery ( mkVirtStkOffsets, pushUpdateFrame, getVirtSp, - setRealAndVirtualSp ) -import CgProf ( chooseDynCostCentres, ldvEnter, enterCostCentre, - costCentreFrom ) +import CgStackery +import CgProf import CgTicky -import CgParallel ( granYield, granFetchAndReschedule ) -import CgInfoTbls ( emitClosureCodeAndInfoTable, getSRTInfo ) -import CgCallConv ( assignCallRegs, mkArgDescr ) -import CgUtils ( emitDataLits, addIdReps, cmmRegOffW, - emitRtsCallWithVols ) -import ClosureInfo -- lots and lots of stuff -import SMRep ( CgRep, cgRepSizeW, argMachRep, fixedHdrSize, WordOff, - idCgRep ) -import MachOp ( MachHint(..) ) +import CgParallel +import CgInfoTbls +import CgCallConv +import CgUtils +import ClosureInfo +import SMRep +import MachOp import Cmm -import CmmUtils ( CmmStmts, mkStmts, oneStmt, plusStmts, noStmts, - mkLblExpr ) +import CmmUtils import CLabel import StgSyn -import StaticFlags ( opt_DoTickyProfiling ) +import StaticFlags import CostCentre -import Id ( Id, idName, idType ) -import Name ( Name, isExternalName ) -import Module ( Module, pprModule ) -import ListSetOps ( minusList ) -import Util ( isIn, mapAccumL, zipWithEqual ) -import BasicTypes ( TopLevelFlag(..) ) -import Constants ( oFFSET_StgInd_indirectee, wORD_SIZE ) +import Id +import Name +import Module +import ListSetOps +import Util +import BasicTypes +import Constants import Outputable import FastString \end{code} @@ -79,7 +73,7 @@ cgTopRhsClosure id ccs binder_info srt upd_flag args body = do let name = idName id ; lf_info <- mkClosureLFInfo id TopLevel [] upd_flag args ; srt_info <- getSRTInfo name srt - ; mod_name <- moduleName + ; mod_name <- getModuleName ; let descr = closureDescription mod_name name closure_info = mkClosureInfo True id lf_info 0 0 srt_info descr closure_label = mkLocalClosureLabel name @@ -118,7 +112,7 @@ cgStdRhsClosure bndr cc bndr_info fvs args body lf_info payload = do -- AHA! A STANDARD-FORM THUNK { -- LAY OUT THE OBJECT amodes <- getArgAmodes payload - ; mod_name <- moduleName + ; mod_name <- getModuleName ; let (tot_wds, ptr_wds, amodes_w_offsets) = mkVirtHeapOffsets (isLFThunk lf_info) amodes @@ -169,7 +163,7 @@ cgRhsClosure bndr cc bndr_info srt fvs upd_flag args body = do ; lf_info <- mkClosureLFInfo bndr NotTopLevel fvs upd_flag args ; fv_infos <- mapFCs getCgIdInfo reduced_fvs ; srt_info <- getSRTInfo name srt - ; mod_name <- moduleName + ; mod_name <- getModuleName ; let bind_details :: [(CgIdInfo, VirtualHpOffset)] (tot_wds, ptr_wds, bind_details) = mkVirtHeapOffsets (isLFThunk lf_info) (map add_rep fv_infos) diff --git a/compiler/codeGen/CgCon.lhs b/compiler/codeGen/CgCon.lhs index 115439a0fd..6e85c2ccbe 100644 --- a/compiler/codeGen/CgCon.lhs +++ b/compiler/codeGen/CgCon.lhs @@ -1,4 +1,5 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP Project, Glasgow University, 1992-1998 % \section[CgCon]{Code generation for constructors} @@ -20,40 +21,30 @@ module CgCon ( import CgMonad import StgSyn -import CgBindery ( getArgAmodes, bindNewToNode, - bindArgsToRegs, idInfoToAmode, stableIdInfo, - heapIdInfo, CgIdInfo, bindArgsToStack - ) -import CgStackery ( mkVirtStkOffsets, freeStackSlots, - getRealSp, getVirtSp, setRealAndVirtualSp ) -import CgUtils ( addIdReps, cmmLabelOffW, emitRODataLits, emitDataLits ) -import CgCallConv ( assignReturnRegs ) -import CgHeapery ( allocDynClosure, layOutDynConstr, - layOutStaticConstr, mkStaticClosureFields ) -import CgTailCall ( performReturn, emitKnownConReturnCode, returnUnboxedTuple ) -import CgProf ( mkCCostCentreStack, ldvEnter, curCCS ) +import CgBindery +import CgStackery +import CgUtils +import CgCallConv +import CgHeapery +import CgTailCall +import CgProf import CgTicky -import CgInfoTbls ( emitClosureCodeAndInfoTable, dataConTagZ ) +import CgInfoTbls import CLabel -import ClosureInfo ( mkConLFInfo, mkLFArgument ) -import CmmUtils ( mkLblExpr ) +import ClosureInfo +import CmmUtils import Cmm -import SMRep ( WordOff, CgRep, separateByPtrFollowness, - fixedHdrSize, typeCgRep ) -import CostCentre ( currentOrSubsumedCCS, dontCareCCS, CostCentreStack, - currentCCS ) -import Constants ( mIN_INTLIKE, mAX_INTLIKE, mIN_CHARLIKE, mAX_CHARLIKE ) -import TyCon ( TyCon, tyConDataCons, isEnumerationTyCon, tyConName ) -import DataCon ( DataCon, dataConRepArgTys, isNullaryRepDataCon, - isUnboxedTupleCon, dataConWorkId, - dataConName, dataConRepArity - ) -import Id ( Id, idName, isDeadBinder ) -import Type ( Type ) -import PrelInfo ( maybeCharLikeCon, maybeIntLikeCon ) +import SMRep +import CostCentre +import Constants +import TyCon +import DataCon +import Id +import Type +import PrelInfo import Outputable -import Util ( lengthIs ) -import ListSetOps ( assocMaybe ) +import Util +import ListSetOps \end{code} diff --git a/compiler/codeGen/CgExpr.lhs b/compiler/codeGen/CgExpr.lhs index 551a40b633..fff2b3d564 100644 --- a/compiler/codeGen/CgExpr.lhs +++ b/compiler/codeGen/CgExpr.lhs @@ -1,56 +1,45 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgExpr.lhs,v 1.62 2005/06/21 10:44:41 simonmar Exp $ -% -%******************************************************** -%* * -\section[CgExpr]{Converting @StgExpr@s} -%* * -%******************************************************** \begin{code} module CgExpr ( cgExpr ) where #include "HsVersions.h" -import Constants ( mAX_SPEC_SELECTEE_SIZE, mAX_SPEC_AP_SIZE ) +import Constants import StgSyn import CgMonad -import SMRep ( fixedHdrSize, isFollowableArg, CgRep(..), argMachRep, - nonVoidArg, idCgRep, typeCgRep, typeHint, - primRepToCgRep ) -import CoreSyn ( AltCon(..) ) -import CgProf ( emitSetCCC ) -import CgHeapery ( layOutDynConstr ) -import CgBindery ( getArgAmodes, getArgAmode, CgIdInfo, - nukeDeadBindings, addBindC, addBindsC ) -import CgCase ( cgCase, saveVolatileVarsAndRegs ) -import CgClosure ( cgRhsClosure, cgStdRhsClosure ) -import CgCon ( buildDynCon, cgReturnDataCon ) -import CgLetNoEscape ( cgLetNoEscapeClosure ) -import CgCallConv ( dataReturnConvPrim ) +import SMRep +import CoreSyn +import CgProf +import CgHeapery +import CgBindery +import CgCase +import CgClosure +import CgCon +import CgLetNoEscape +import CgCallConv import CgTailCall -import CgInfoTbls ( emitDirectReturnInstr ) -import CgForeignCall ( emitForeignCall, shimForeignCallArg ) -import CgPrimOp ( cgPrimOp ) -import CgUtils ( addIdReps, newTemp, assignTemp, cgLit, tagToClosure ) -import ClosureInfo ( mkSelectorLFInfo, mkApLFInfo ) -import Cmm ( CmmExpr(..), CmmStmt(..), CmmReg, nodeReg ) -import MachOp ( wordRep, MachHint ) +import CgInfoTbls +import CgForeignCall +import CgPrimOp +import CgUtils +import ClosureInfo +import Cmm +import MachOp import VarSet -import Literal ( literalType ) -import PrimOp ( primOpOutOfLine, getPrimOpResultInfo, - PrimOp(..), PrimOpResultInfo(..) ) -import Id ( Id ) -import TyCon ( isUnboxedTupleTyCon, isEnumerationTyCon ) -import Type ( Type, tyConAppArgs, tyConAppTyCon, repType, - PrimRep(VoidRep) ) -import Maybes ( maybeToBool ) -import ListSetOps ( assocMaybe ) -import BasicTypes ( RecFlag(..) ) -import Util ( lengthIs ) +import Literal +import PrimOp +import Id +import TyCon +import Type +import Maybes +import ListSetOps +import BasicTypes +import Util import Outputable \end{code} diff --git a/compiler/codeGen/CgForeignCall.hs b/compiler/codeGen/CgForeignCall.hs index 822a04366c..da52bd09d1 100644 --- a/compiler/codeGen/CgForeignCall.hs +++ b/compiler/codeGen/CgForeignCall.hs @@ -2,7 +2,7 @@ -- -- Code generation for foreign calls. -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -19,24 +19,24 @@ module CgForeignCall ( #include "HsVersions.h" -import StgSyn ( StgLiveVars, StgArg, stgArgType ) -import CgProf ( curCCS, curCCSAddr ) -import CgBindery ( getVolatileRegs, getArgAmodes ) +import StgSyn +import CgProf +import CgBindery import CgMonad -import CgUtils ( cmmOffsetW, cmmOffsetB, newTemp ) -import Type ( tyConAppTyCon, repType ) +import CgUtils +import Type import TysPrim -import CLabel ( mkForeignLabel, mkRtsCodeLabel ) +import CLabel import Cmm import CmmUtils import MachOp import SMRep import ForeignCall import Constants -import StaticFlags ( opt_SccProfilingOn ) +import StaticFlags import Outputable -import Monad ( when ) +import Control.Monad -- ----------------------------------------------------------------------------- -- Code generation for Foreign Calls diff --git a/compiler/codeGen/CgHeapery.lhs b/compiler/codeGen/CgHeapery.lhs index ae6c892b5d..4a128499a7 100644 --- a/compiler/codeGen/CgHeapery.lhs +++ b/compiler/codeGen/CgHeapery.lhs @@ -1,8 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgHeapery.lhs,v 1.47 2005/06/21 10:44:41 simonmar Exp $ -% \section[CgHeapery]{Heap management functions} \begin{code} @@ -23,39 +22,29 @@ module CgHeapery ( #include "HsVersions.h" -import StgSyn ( AltType(..) ) -import CLabel ( CLabel, mkRtsCodeLabel ) -import CgUtils ( mkWordCLit, cmmRegOffW, cmmOffsetW, - cmmOffsetExprB ) +import StgSyn +import CLabel +import CgUtils import CgMonad -import CgProf ( staticProfHdr, profDynAlloc, dynProfHdr ) -import CgTicky ( staticTickyHdr, tickyDynAlloc, tickyAllocHeap ) -import CgParallel ( staticGranHdr, staticParHdr, doGranAllocate ) -import CgStackery ( getFinalStackHW, getRealSp ) -import CgCallConv ( mkRegLiveness ) -import ClosureInfo ( closureSize, staticClosureNeedsLink, - mkConInfo, closureNeedsUpdSpace, - infoTableLabelFromCI, closureLabelFromCI, - nodeMustPointToIt, closureLFInfo, - ClosureInfo ) -import SMRep ( CgRep(..), cgRepSizeW, separateByPtrFollowness, - WordOff, fixedHdrSize, thunkHdrSize, - isVoidArg, primRepToCgRep ) - -import Cmm ( CmmLit(..), CmmStmt(..), CmmExpr(..), GlobalReg(..), - CmmReg(..), hpReg, nodeReg, spReg ) -import MachOp ( mo_wordULt, mo_wordUGt, mo_wordSub ) -import CmmUtils ( mkIntCLit, CmmStmts, noStmts, oneStmt, plusStmts, - mkStmts ) -import Id ( Id ) -import DataCon ( DataCon ) -import TyCon ( tyConPrimRep ) -import CostCentre ( CostCentreStack ) -import Util ( mapAccumL, filterOut ) -import Constants ( wORD_SIZE ) -import PackageConfig ( PackageId ) +import CgProf +import CgTicky +import CgParallel +import CgStackery +import CgCallConv +import ClosureInfo +import SMRep + +import Cmm +import MachOp +import CmmUtils +import Id +import DataCon +import TyCon +import CostCentre +import Util +import Constants +import PackageConfig import Outputable - \end{code} diff --git a/compiler/codeGen/CgInfoTbls.hs b/compiler/codeGen/CgInfoTbls.hs index 5a40a3d5c1..f233cbb1c0 100644 --- a/compiler/codeGen/CgInfoTbls.hs +++ b/compiler/codeGen/CgInfoTbls.hs @@ -2,7 +2,7 @@ -- -- Building info tables. -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -28,42 +28,27 @@ module CgInfoTbls ( #include "HsVersions.h" -import ClosureInfo ( ClosureInfo, closureTypeDescr, closureName, - infoTableLabelFromCI, Liveness, - closureValDescr, closureSRT, closureSMRep, - closurePtrsSize, closureNonHdrSize, closureFunInfo, - C_SRT(..), needsSRT, isConstrClosure_maybe, - ArgDescr(..) ) -import SMRep ( StgHalfWord, hALF_WORD_SIZE_IN_BITS, hALF_WORD_SIZE, - WordOff, ByteOff, - smRepClosureTypeInt, tablesNextToCode, - rET_BIG, rET_SMALL, rET_VEC_BIG, rET_VEC_SMALL ) -import CgBindery ( getLiveStackSlots ) -import CgCallConv ( isBigLiveness, mkLivenessCLit, buildContLiveness, - argDescrType, getSequelAmode, - CtrlReturnConvention(..) ) -import CgUtils ( mkStringCLit, packHalfWordsCLit, mkWordCLit, - cmmOffsetB, cmmOffsetExprW, cmmLabelOffW, cmmOffsetW, - emitDataLits, emitRODataLits, emitSwitch, cmmNegate, - newTemp ) +import ClosureInfo +import SMRep +import CgBindery +import CgCallConv +import CgUtils import CgMonad -import CmmUtils ( mkIntCLit, zeroCLit ) -import Cmm ( CmmStmt(..), CmmExpr(..), CmmLit(..), LocalReg, - CmmBasicBlock, nodeReg ) +import CmmUtils +import Cmm import MachOp import CLabel -import StgSyn ( SRT(..) ) -import Name ( Name ) -import DataCon ( DataCon, dataConTag, fIRST_TAG ) -import Unique ( Uniquable(..) ) -import DynFlags ( DynFlags(..), HscTarget(..) ) -import StaticFlags ( opt_SccProfilingOn ) -import ListSetOps ( assocDefault ) -import Maybes ( isJust ) -import Constants ( wORD_SIZE, sIZEOF_StgFunInfoExtraRev ) -import Outputable - +import StgSyn +import Name +import DataCon +import Unique +import DynFlags +import StaticFlags + +import ListSetOps +import Maybes +import Constants ------------------------------------------------------------------------- -- diff --git a/compiler/codeGen/CgLetNoEscape.lhs b/compiler/codeGen/CgLetNoEscape.lhs index ffec5709bb..dd25f55f40 100644 --- a/compiler/codeGen/CgLetNoEscape.lhs +++ b/compiler/codeGen/CgLetNoEscape.lhs @@ -1,8 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1993-1998 % -% $Id: CgLetNoEscape.lhs,v 1.26 2004/09/30 10:35:47 simonpj Exp $ -% %******************************************************** %* * \section[CgLetNoEscape]{Handling ``let-no-escapes''} @@ -19,21 +18,21 @@ import {-# SOURCE #-} CgExpr ( cgExpr ) import StgSyn import CgMonad -import CgBindery ( CgIdInfo, letNoEscapeIdInfo, nukeDeadBindings ) -import CgCase ( restoreCurrentCostCentre ) -import CgCon ( bindUnboxedTupleComponents ) -import CgHeapery ( unbxTupleHeapCheck ) -import CgInfoTbls ( emitDirectReturnTarget ) -import CgStackery ( allocStackTop, deAllocStackTop, getSpRelOffset ) -import Cmm ( CmmStmt(..) ) -import CmmUtils ( mkLblExpr, oneStmt ) -import CLabel ( mkReturnInfoLabel ) -import ClosureInfo ( mkLFLetNoEscape ) -import CostCentre ( CostCentreStack ) -import Id ( Id, idName ) -import Var ( idUnique ) -import SMRep ( retAddrSizeW ) -import BasicTypes ( RecFlag(..) ) +import CgBindery +import CgCase +import CgCon +import CgHeapery +import CgInfoTbls +import CgStackery +import Cmm +import CmmUtils +import CLabel +import ClosureInfo +import CostCentre +import Id +import Var +import SMRep +import BasicTypes \end{code} %************************************************************************ diff --git a/compiler/codeGen/CgMonad.lhs b/compiler/codeGen/CgMonad.lhs index 1866df4cef..0757bbf3f8 100644 --- a/compiler/codeGen/CgMonad.lhs +++ b/compiler/codeGen/CgMonad.lhs @@ -1,8 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgMonad.lhs,v 1.45 2005/06/21 10:44:41 simonmar Exp $ -% \section[CgMonad]{The code generation monad} See the beginning of the top-level @CodeGen@ module, to see how this @@ -42,7 +41,7 @@ module CgMonad ( getHpUsage, setHpUsage, heapHWM, - moduleName, + getModuleName, Sequel(..), -- ToDo: unabstract? @@ -61,23 +60,23 @@ module CgMonad ( import {-# SOURCE #-} CgBindery ( CgBindings, nukeVolatileBinds ) -import DynFlags ( DynFlags(..) ) -import PackageConfig ( PackageId ) +import DynFlags +import PackageConfig import Cmm -import CmmUtils ( CmmStmts, isNopStmt ) +import CmmUtils import CLabel -import SMRep ( WordOff ) -import Module ( Module ) -import Id ( Id ) +import SMRep +import Module +import Id import VarEnv import OrdList -import Unique ( Unique ) -import Util ( mapAccumL ) -import UniqSupply ( UniqSupply, mkSplitUniqSupply, splitUniqSupply, uniqFromSupply ) +import Unique +import Util +import UniqSupply import FastString import Outputable -import Control.Monad ( liftM ) +import Control.Monad infixr 9 `thenC` -- Right-associative! infixr 9 `thenFC` @@ -804,8 +803,8 @@ consCgStmt stmt stmts = CgStmt stmt `consOL` stmts -- ---------------------------------------------------------------------------- -- Get the current module name -moduleName :: FCode Module -moduleName = do { info <- getInfoDown; return (cgd_mod info) } +getModuleName :: FCode Module +getModuleName = do { info <- getInfoDown; return (cgd_mod info) } -- ---------------------------------------------------------------------------- -- Get/set the end-of-block info diff --git a/compiler/codeGen/CgParallel.hs b/compiler/codeGen/CgParallel.hs index b826a33cba..8cd5067ddc 100644 --- a/compiler/codeGen/CgParallel.hs +++ b/compiler/codeGen/CgParallel.hs @@ -1,6 +1,12 @@ +----------------------------------------------------------------------------- +-- +-- (c) The University of Glasgow -2006 +-- -- Code generation relaed to GpH -- (a) parallel -- (b) GranSim +-- +----------------------------------------------------------------------------- module CgParallel( staticGranHdr,staticParHdr, @@ -9,10 +15,10 @@ module CgParallel( ) where import CgMonad -import CgCallConv ( mkRegLiveness ) -import Id ( Id ) -import Cmm ( CmmLit, GlobalReg(..), node, CmmExpr ) -import StaticFlags ( opt_GranMacros ) +import CgCallConv +import Id +import Cmm +import StaticFlags import Outputable staticParHdr :: [CmmLit] diff --git a/compiler/codeGen/CgPrimOp.hs b/compiler/codeGen/CgPrimOp.hs index bc7c9140ed..3993f19197 100644 --- a/compiler/codeGen/CgPrimOp.hs +++ b/compiler/codeGen/CgPrimOp.hs @@ -2,7 +2,7 @@ -- -- Code generation for PrimOps. -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -12,24 +12,23 @@ module CgPrimOp ( #include "HsVersions.h" -import ForeignCall ( CCallConv(CCallConv) ) -import StgSyn ( StgLiveVars, StgArg ) -import CgForeignCall ( emitForeignCall' ) -import CgBindery ( getVolatileRegs, getArgAmodes ) +import ForeignCall +import StgSyn +import CgForeignCall +import CgBindery import CgMonad -import CgInfoTbls ( getConstrTag ) -import CgUtils ( cmmOffsetW, cmmOffsetB, cmmLoadIndexW ) +import CgInfoTbls +import CgUtils import ForeignCall import Cmm -import CLabel ( mkMAP_FROZEN_infoLabel, mkMAP_DIRTY_infoLabel, - mkDirty_MUT_VAR_Label, mkRtsCodeLabel ) +import CLabel import CmmUtils import MachOp import SMRep -import PrimOp ( PrimOp(..) ) -import SMRep ( tablesNextToCode ) -import Constants ( wORD_SIZE, wORD_SIZE_IN_BITS ) -import StaticFlags ( opt_Parallel ) +import PrimOp +import SMRep +import Constants +import StaticFlags import Outputable -- --------------------------------------------------------------------------- diff --git a/compiler/codeGen/CgProf.hs b/compiler/codeGen/CgProf.hs index daff2f6665..bc5473a6e5 100644 --- a/compiler/codeGen/CgProf.hs +++ b/compiler/codeGen/CgProf.hs @@ -2,7 +2,7 @@ -- -- Code generation for profiling -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -32,30 +32,28 @@ module CgProf ( #include "../includes/DerivedConstants.h" -- For REP_xxx constants, which are MachReps -import ClosureInfo ( ClosureInfo, closureSize, - closureName, isToplevClosure, closureReEntrant, ) +import ClosureInfo import CgUtils import CgMonad -import SMRep ( StgWord, profHdrSize ) +import SMRep import Cmm import MachOp -import CmmUtils ( zeroCLit, mkIntCLit, mkLblExpr ) -import CLabel ( mkCCLabel, mkCCSLabel, mkRtsDataLabel ) +import CmmUtils +import CLabel -import Module ( moduleNameString ) -import qualified Module ( moduleName ) -- clashes with CgMonad.moduleName -import Id ( Id ) +import Id +import qualified Module import CostCentre -import StgSyn ( GenStgExpr(..), StgExpr ) -import StaticFlags ( opt_SccProfilingOn ) -import FastString ( FastString ) +import StgSyn +import StaticFlags +import FastString import Constants -- Lots of field offsets import Outputable -import Maybe -import Char ( ord ) -import Monad ( when ) +import Data.Maybe +import Data.Char +import Control.Monad ----------------------------------------------------------------------------- -- @@ -293,7 +291,8 @@ emitCostCentreDecl -> Code emitCostCentreDecl cc = do { label <- mkStringCLit (costCentreUserName cc) - ; modl <- mkStringCLit (moduleNameString (Module.moduleName (cc_mod cc))) + ; modl <- mkStringCLit (Module.moduleNameString + (Module.moduleName (cc_mod cc))) -- All cost centres will be in the main package, since we -- don't normally use -auto-all or add SCCs to other packages. -- Hence don't emit the package name in the module here. diff --git a/compiler/codeGen/CgStackery.lhs b/compiler/codeGen/CgStackery.lhs index 7cb310d521..7a510cf43e 100644 --- a/compiler/codeGen/CgStackery.lhs +++ b/compiler/codeGen/CgStackery.lhs @@ -1,8 +1,7 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgStackery.lhs,v 1.27 2004/09/30 10:35:49 simonpj Exp $ -% \section[CgStackery]{Stack management functions} Stack-twiddling operations, which are pretty low-down and grimy. @@ -24,16 +23,16 @@ module CgStackery ( #include "HsVersions.h" import CgMonad -import CgUtils ( cmmOffsetB, cmmRegOffW ) -import CgProf ( initUpdFrameProf ) +import CgUtils +import CgProf import SMRep import Cmm -import CmmUtils ( CmmStmts, mkLblExpr ) -import CLabel ( mkUpdInfoLabel ) +import CmmUtils +import CLabel import Constants -import Util ( sortLe ) -import FastString ( LitString ) -import OrdList ( toOL ) +import Util +import FastString +import OrdList import Outputable \end{code} diff --git a/compiler/codeGen/CgTailCall.lhs b/compiler/codeGen/CgTailCall.lhs index 56614a87f3..c65ec1c4b5 100644 --- a/compiler/codeGen/CgTailCall.lhs +++ b/compiler/codeGen/CgTailCall.lhs @@ -1,13 +1,8 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgTailCall.lhs,v 1.43 2005/06/21 10:44:41 simonmar Exp $ -% -%******************************************************** -%* * -\section[CgTailCall]{Tail calls: converting @StgApps@} -%* * -%******************************************************** +% Code generation for tail calls. \begin{code} module CgTailCall ( @@ -24,31 +19,27 @@ module CgTailCall ( #include "HsVersions.h" import CgMonad -import CgBindery ( getArgAmodes, getCgIdInfo, CgIdInfo, maybeLetNoEscape, - idInfoToAmode, cgIdInfoId, cgIdInfoLF, - cgIdInfoArgRep ) -import CgInfoTbls ( entryCode, emitDirectReturnInstr, dataConTagZ, - emitVectoredReturnInstr, closureInfoPtr ) +import CgBindery +import CgInfoTbls import CgCallConv -import CgStackery ( setRealSp, mkStkAmodes, adjustStackHW, - getSpRelOffset ) -import CgHeapery ( setRealHp, getHpRelOffset ) -import CgUtils ( emitSimultaneously ) +import CgStackery +import CgHeapery +import CgUtils import CgTicky import ClosureInfo -import SMRep ( CgRep, isVoidArg, separateByPtrFollowness ) +import SMRep import Cmm import CmmUtils -import CLabel ( CLabel, mkRtsPrimOpLabel, mkSeqInfoLabel ) -import Type ( isUnLiftedType ) -import Id ( Id, idName, idUnique, idType ) -import DataCon ( DataCon, dataConTyCon ) -import StgSyn ( StgArg ) -import TyCon ( TyCon ) -import PrimOp ( PrimOp ) +import CLabel +import Type +import Id +import DataCon +import StgSyn +import TyCon +import PrimOp import Outputable -import Monad ( when ) +import Control.Monad ----------------------------------------------------------------------------- -- Tail Calls diff --git a/compiler/codeGen/CgTicky.hs b/compiler/codeGen/CgTicky.hs index 3e72981c50..985ebb8626 100644 --- a/compiler/codeGen/CgTicky.hs +++ b/compiler/codeGen/CgTicky.hs @@ -2,7 +2,7 @@ -- -- Code generation for ticky-ticky profiling -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -40,32 +40,30 @@ module CgTicky ( #include "../includes/DerivedConstants.h" -- For REP_xxx constants, which are MachReps -import ClosureInfo ( ClosureInfo, closureSize, slopSize, closureSMRep, - closureUpdReqd, closureName, isStaticClosure ) +import ClosureInfo import CgUtils import CgMonad -import SMRep ( ClosureType(..), smRepClosureType, CgRep ) +import SMRep import Cmm import MachOp -import CmmUtils ( zeroCLit, mkIntCLit, mkLblExpr, cmmIndexExpr ) -import CLabel ( CLabel, mkRtsDataLabel, mkRednCountsLabel ) - -import Name ( isInternalName ) -import Id ( Id, idType ) -import StaticFlags ( opt_DoTickyProfiling ) -import BasicTypes ( Arity ) -import FastString ( FastString, mkFastString, LitString ) -import Constants -- Lots of field offsets +import CmmUtils +import CLabel + +import Name +import Id +import StaticFlags +import BasicTypes +import FastString +import Constants import Outputable -- Turgid imports for showTypeCategory import PrelNames -import TcType ( Type, isDictTy, tcSplitTyConApp_maybe, - tcSplitFunTy_maybe ) -import TyCon ( isPrimTyCon, isTupleTyCon, isEnumerationTyCon, - maybeTyConSingleCon ) -import Maybe +import TcType +import TyCon + +import Data.Maybe ----------------------------------------------------------------------------- -- @@ -83,7 +81,7 @@ staticTickyHdr emitTickyCounter :: ClosureInfo -> [Id] -> Int -> Code emitTickyCounter cl_info args on_stk = ifTicky $ - do { mod_name <- moduleName + do { mod_name <- getModuleName ; fun_descr_lit <- mkStringCLit (fun_descr mod_name) ; arg_descr_lit <- mkStringCLit arg_descr ; emitDataLits ticky_ctr_label -- Must match layout of StgEntCounter diff --git a/compiler/codeGen/CgUtils.hs b/compiler/codeGen/CgUtils.hs index 21e6d0850c..ab39080c16 100644 --- a/compiler/codeGen/CgUtils.hs +++ b/compiler/codeGen/CgUtils.hs @@ -2,7 +2,7 @@ -- -- Code generator utilities; mostly monadic -- --- (c) The University of Glasgow 2004 +-- (c) The University of Glasgow 2004-2006 -- ----------------------------------------------------------------------------- @@ -34,32 +34,29 @@ module CgUtils ( #include "HsVersions.h" import CgMonad -import TyCon ( TyCon, tyConName ) -import Id ( Id ) -import Constants ( wORD_SIZE ) -import SMRep ( CgRep, StgWord, hALF_WORD_SIZE_IN_BITS, ByteOff, - WordOff, idCgRep ) +import TyCon +import Id +import Constants +import SMRep import PprCmm ( {- instances -} ) import Cmm import CLabel import CmmUtils -import MachOp ( MachRep(..), wordRep, MachOp(..), MachHint(..), - mo_wordOr, mo_wordAnd, mo_wordNe, mo_wordEq, - mo_wordULt, mo_wordUGt, mo_wordUGe, machRepByteWidth ) -import ForeignCall ( CCallConv(..) ) -import Literal ( Literal(..) ) -import Digraph ( SCC(..), stronglyConnComp ) -import ListSetOps ( assocDefault ) -import Util ( filterOut, sortLe ) -import DynFlags ( DynFlags(..), HscTarget(..) ) -import FastString ( LitString, bytesFS ) -import PackageConfig ( PackageId ) +import MachOp +import ForeignCall +import Literal +import Digraph +import ListSetOps +import Util +import DynFlags +import FastString +import PackageConfig import Outputable -import Char ( ord ) -import DATA_BITS -import DATA_WORD ( Word8 ) -import Maybe ( isNothing ) +import Data.Char +import Data.Bits +import Data.Word +import Data.Maybe ------------------------------------------------------------------------- -- diff --git a/compiler/codeGen/ClosureInfo.lhs b/compiler/codeGen/ClosureInfo.lhs index d137d4d3ca..831e4ecf7f 100644 --- a/compiler/codeGen/ClosureInfo.lhs +++ b/compiler/codeGen/ClosureInfo.lhs @@ -1,4 +1,5 @@ % +% (c) The University of Glasgow 2006 % (c) The Univserity of Glasgow 1992-2004 % @@ -57,27 +58,25 @@ module ClosureInfo ( #include "HsVersions.h" import StgSyn -import SMRep -- all of it +import SMRep import CLabel -import Packages ( isDllName ) -import PackageConfig ( PackageId ) -import StaticFlags ( opt_SccProfilingOn, opt_OmitBlackHoling, - opt_Parallel, opt_DoTickyProfiling ) -import Id ( Id, idType, idArity, idName ) -import DataCon ( DataCon, dataConTyCon, isNullaryRepDataCon, dataConName ) -import Name ( Name, nameUnique, getOccName, getOccString ) -import OccName ( occNameString ) -import Type ( isUnLiftedType, Type, repType, splitTyConApp_maybe ) -import TcType ( tcSplitSigmaTy ) -import TyCon ( isFunTyCon, isAbstractTyCon ) -import BasicTypes ( TopLevelFlag(..), isNotTopLevel, isTopLevel, ipNameName ) +import Packages +import PackageConfig +import StaticFlags +import Id +import DataCon +import Name +import OccName +import Type +import TypeRep +import TcType +import TyCon +import BasicTypes import FastString import Outputable import Constants - -import TypeRep -- TEMP \end{code} diff --git a/compiler/codeGen/CodeGen.lhs b/compiler/codeGen/CodeGen.lhs index 4c08242612..2c4ea5cfae 100644 --- a/compiler/codeGen/CodeGen.lhs +++ b/compiler/codeGen/CodeGen.lhs @@ -1,19 +1,15 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -\section[CodeGen]{@CodeGen@: main module of the code generator} + +The Code Generator This module says how things get going at the top level. @codeGen@ is the interface to the outside world. The \tr{cgTop*} functions drive the mangling of top-level bindings. -%************************************************************************ -%* * -\subsection[codeGen-outside-interface]{The code generator's offering to the world} -%* * -%************************************************************************ - \begin{code} module CodeGen ( codeGen ) where @@ -25,35 +21,34 @@ module CodeGen ( codeGen ) where import CgExpr ( {-NOTHING!-} ) -- DO NOT DELETE THIS IMPORT import CgProf import CgMonad -import CgBindery ( CgIdInfo, addBindC, addBindsC, getCgIdInfo, - cgIdInfoId ) -import CgClosure ( cgTopRhsClosure ) -import CgCon ( cgTopRhsCon, cgTyCon ) -import CgUtils ( cmmRegOffW, emitRODataLits, cmmNeWord ) +import CgBindery +import CgClosure +import CgCon +import CgUtils import CLabel import Cmm -import CmmUtils ( zeroCLit, mkIntCLit, mkLblExpr ) -import PprCmm ( pprCmms ) -import MachOp ( wordRep ) +import CmmUtils +import PprCmm +import MachOp import StgSyn -import PrelNames ( gHC_PRIM, rOOT_MAIN, gHC_TOP_HANDLER ) -import DynFlags ( DynFlags(..), DynFlag(..), dopt ) -import StaticFlags ( opt_SccProfilingOn ) - -import PackageConfig ( PackageId ) -import HscTypes ( ForeignStubs(..) ) -import CostCentre ( CollectedCCs ) -import Id ( Id, idName, setIdName ) -import Name ( nameSrcLoc, nameOccName, nameUnique, isInternalName, mkExternalName ) -import OccName ( mkLocalOcc ) -import TyCon ( TyCon ) -import Module ( Module ) -import ErrUtils ( dumpIfSet_dyn, showPass ) +import PrelNames +import DynFlags +import StaticFlags + +import PackageConfig +import HscTypes +import CostCentre +import Id +import Name +import OccName +import TyCon +import Module +import ErrUtils #ifdef DEBUG -import Panic ( assertPanic ) +import Panic #endif \end{code} @@ -326,7 +321,7 @@ which refers to this name). maybeExternaliseId :: DynFlags -> Id -> FCode Id maybeExternaliseId dflags id | dopt Opt_SplitObjs dflags, -- Externalise the name for -split-objs - isInternalName name = do { mod <- moduleName + isInternalName name = do { mod <- getModuleName ; returnFC (setIdName id (externalise mod)) } | otherwise = returnFC id where diff --git a/compiler/codeGen/SMRep.lhs b/compiler/codeGen/SMRep.lhs index 521b62625a..2419ba1dec 100644 --- a/compiler/codeGen/SMRep.lhs +++ b/compiler/codeGen/SMRep.lhs @@ -1,7 +1,9 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -\section[SMRep]{Storage manager representations of closure} + +Storage manager representation of closures This is here, rather than in ClosureInfo, just to keep nhc happy. Other modules should access this info through ClosureInfo. @@ -38,16 +40,15 @@ module SMRep ( #include "HsVersions.h" #include "../includes/MachDeps.h" -import Id ( Id, idType ) -import Type ( Type, typePrimRep, PrimRep(..) ) -import TyCon ( TyCon, tyConPrimRep ) -import MachOp-- ( MachRep(..), MachHint(..), wordRep ) -import StaticFlags ( opt_SccProfilingOn, opt_GranMacros, - opt_Unregisterised ) +import Id +import Type +import TyCon +import MachOp +import StaticFlags import Constants import Outputable -import DATA_WORD +import Data.Word \end{code} |