X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmm.hs;h=74387504c51b1cff56e6311f6bc6aae05b37607f;hb=b3ccd6d5a4366dc8089fd9c49f5edf43077de009;hp=c2f8d48e73b4f180ebd575ec3802f0e1cae0448e;hpb=f2cc8b5bc34519a65581dc40b7bfebac97bffd73;p=ghc-hetmet.git diff --git a/compiler/cmm/Cmm.hs b/compiler/cmm/Cmm.hs index c2f8d48..7438750 100644 --- a/compiler/cmm/Cmm.hs +++ b/compiler/cmm/Cmm.hs @@ -10,17 +10,17 @@ module Cmm ( GenCmm(..), Cmm, GenCmmTop(..), CmmTop, GenBasicBlock(..), CmmBasicBlock, blockId, blockStmts, - CmmStmt(..), + CmmStmt(..), CmmActuals, CmmFormals, CmmCallTarget(..), CmmStatic(..), Section(..), CmmExpr(..), cmmExprRep, CmmReg(..), cmmRegRep, CmmLit(..), cmmLitRep, LocalReg(..), localRegRep, - BlockId(..), + BlockId(..), BlockEnv, GlobalReg(..), globalRegRep, - node, nodeReg, spReg, hpReg, + node, nodeReg, spReg, hpReg, spLimReg ) where #include "HsVersions.h" @@ -29,6 +29,7 @@ import MachOp import CLabel import ForeignCall import Unique +import UniqFM import FastString import Data.Word @@ -57,7 +58,7 @@ data GenCmmTop d i = CmmProc [d] -- Info table, may be empty CLabel -- Used to generate both info & entry labels - [LocalReg] -- Argument locals live on entry (C-- procedure params) + CmmFormals -- Argument locals live on entry (C-- procedure params) [GenBasicBlock i] -- Code, may be empty. The first block is -- the entry point. The order is otherwise initially -- unimportant, but at some point the code gen will @@ -113,8 +114,8 @@ data CmmStmt | CmmCall -- A foreign call, with CmmCallTarget - [(CmmReg,MachHint)] -- zero or more results - [(CmmExpr,MachHint)] -- zero or more arguments + CmmFormals -- zero or more results + CmmActuals -- zero or more arguments (Maybe [GlobalReg]) -- Global regs that may need to be saved -- if they will be clobbered by the call. -- Nothing <=> save *all* globals that @@ -131,10 +132,13 @@ data CmmStmt -- Undefined outside range, and when there's a Nothing | CmmJump CmmExpr -- Jump to another function, - [(CmmExpr, MachHint)] -- with these parameters. + CmmActuals -- with these parameters. | CmmReturn -- Return from a function, - [(CmmExpr, MachHint)] -- with these return values. + CmmActuals -- with these return values. + +type CmmActuals = [(CmmExpr,MachHint)] +type CmmFormals = [(CmmReg,MachHint)] {- Discussion @@ -272,6 +276,8 @@ newtype BlockId = BlockId Unique instance Uniquable BlockId where getUnique (BlockId u) = u +type BlockEnv a = UniqFM {- BlockId -} a + ----------------------------------------------------------------------------- -- Static Data ----------------------------------------------------------------------------- @@ -348,9 +354,10 @@ data GlobalReg ) -- convenient aliases -spReg, hpReg, nodeReg :: CmmReg +spReg, hpReg, spLimReg, nodeReg :: CmmReg spReg = CmmGlobal Sp hpReg = CmmGlobal Hp +spLimReg = CmmGlobal SpLim nodeReg = CmmGlobal node node :: GlobalReg