X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FcoreSyn%2FAnnCoreSyn.lhs;h=b5ce22a731d9a67322089fbefd81949fbf902d45;hb=26741ec416bae2c502ef00a2ba0e79050a32cb67;hp=25ba46c6c9737a147df1449e057c2447e7f1b142;hpb=e7d21ee4f8ac907665a7e170c71d59e13a01da09;p=ghc-hetmet.git diff --git a/ghc/compiler/coreSyn/AnnCoreSyn.lhs b/ghc/compiler/coreSyn/AnnCoreSyn.lhs index 25ba46c..b5ce22a 100644 --- a/ghc/compiler/coreSyn/AnnCoreSyn.lhs +++ b/ghc/compiler/coreSyn/AnnCoreSyn.lhs @@ -1,5 +1,5 @@ % -% (c) The GRASP/AQUA Project, Glasgow University, 1992-1994 +% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996 % \section[AnnCoreSyntax]{Annotated core syntax} @@ -11,175 +11,101 @@ really is} just like @CoreSyntax@.) #include "HsVersions.h" module AnnCoreSyn ( - AnnCoreBinding(..), AnnCoreExpr(..), + AnnCoreBinding(..), SYN_IE(AnnCoreExpr), AnnCoreExpr'(..), -- v sad that this must be exported - AnnCoreCaseAlternatives(..), AnnCoreCaseDefault(..), -#ifdef DPH - AnnCoreParQuals(..), - AnnCoreParCommunicate(..), -#endif {- Data Parallel Haskell -} - - deAnnotate, -- we may eventually export some of the other deAnners - - -- and to make the interface self-sufficient - BasicLit, Id, PrimOp, TyCon, TyVar, UniType, CostCentre - IF_ATTACK_PRAGMAS(COMMA cmpTyCon COMMA cmpTyVar) - IF_ATTACK_PRAGMAS(COMMA cmpUniType) + AnnCoreCaseAlts(..), AnnCoreCaseDefault(..), + + deAnnotate -- we may eventually export some of the other deAnners ) where -import AbsPrel ( PrimOp(..), PrimKind - IF_ATTACK_PRAGMAS(COMMA tagOf_PrimOp) - IF_ATTACK_PRAGMAS(COMMA pprPrimOp) - ) -import AbsUniType ( Id, TyVar, TyCon, UniType - IF_ATTACK_PRAGMAS(COMMA cmpTyCon COMMA cmpTyVar) - IF_ATTACK_PRAGMAS(COMMA cmpUniType) - ) -import BasicLit ( BasicLit ) +IMP_Ubiq(){-uitous-} + import CoreSyn -import Outputable -import CostCentre ( CostCentre ) -#if USE_ATTACK_PRAGMAS -import Util -#endif \end{code} \begin{code} -data AnnCoreBinding binder bindee annot - = AnnCoNonRec binder (AnnCoreExpr binder bindee annot) - | AnnCoRec [(binder, AnnCoreExpr binder bindee annot)] +data AnnCoreBinding val_bdr val_occ tyvar uvar annot + = AnnNonRec val_bdr (AnnCoreExpr val_bdr val_occ tyvar uvar annot) + | AnnRec [(val_bdr, AnnCoreExpr val_bdr val_occ tyvar uvar annot)] \end{code} \begin{code} -type AnnCoreExpr binder bindee annot = (annot, AnnCoreExpr' binder bindee annot) - -data AnnCoreExpr' binder bindee annot - = AnnCoVar bindee - | AnnCoLit BasicLit - - | AnnCoCon Id [UniType] [CoreAtom bindee] - - | AnnCoPrim PrimOp [UniType] [CoreAtom bindee] +type AnnCoreExpr val_bdr val_occ tyvar uvar annot + = (annot, AnnCoreExpr' val_bdr val_occ tyvar uvar annot) - | AnnCoLam [binder] - (AnnCoreExpr binder bindee annot) - | AnnCoTyLam TyVar - (AnnCoreExpr binder bindee annot) +data AnnCoreExpr' val_bdr val_occ tyvar uvar annot + = AnnVar val_occ + | AnnLit Literal - | AnnCoApp (AnnCoreExpr binder bindee annot) - (CoreAtom bindee) - | AnnCoTyApp (AnnCoreExpr binder bindee annot) - UniType + | AnnCon Id [GenCoreArg val_occ tyvar uvar] + | AnnPrim PrimOp [GenCoreArg val_occ tyvar uvar] - | AnnCoCase (AnnCoreExpr binder bindee annot) - (AnnCoreCaseAlternatives binder bindee annot) + | AnnLam (GenCoreBinder val_bdr tyvar uvar) + (AnnCoreExpr val_bdr val_occ tyvar uvar annot) - | AnnCoLet (AnnCoreBinding binder bindee annot) - (AnnCoreExpr binder bindee annot) + | AnnApp (AnnCoreExpr val_bdr val_occ tyvar uvar annot) + (GenCoreArg val_occ tyvar uvar) - | AnnCoSCC CostCentre - (AnnCoreExpr binder bindee annot) -#ifdef DPH - | AnnCoZfExpr (AnnCoreExpr binder bindee annot) - (AnnCoreParQuals binder bindee annot) + | AnnCase (AnnCoreExpr val_bdr val_occ tyvar uvar annot) + (AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot) - | AnnCoParCon Id Int [UniType] [AnnCoreExpr binder bindee annot] + | AnnLet (AnnCoreBinding val_bdr val_occ tyvar uvar annot) + (AnnCoreExpr val_bdr val_occ tyvar uvar annot) - | AnnCoParComm - Int - (AnnCoreExpr binder bindee annot) - (AnnCoreParCommunicate binder bindee annot) - | AnnCoParZipWith - Int - (AnnCoreExpr binder bindee annot) - [AnnCoreExpr binder bindee annot] -#endif {- Data Parallel Haskell -} -\end{code} + | AnnSCC CostCentre + (AnnCoreExpr val_bdr val_occ tyvar uvar annot) -\begin{code} -#ifdef DPH -data AnnCoreParQuals binder bindee annot - = AnnCoAndQuals (AnnCoreParQuals binder bindee annot) - (AnnCoreParQuals binder bindee annot) - | AnnCoParFilter (AnnCoreExpr binder bindee annot) - | AnnCoDrawnGen [binder] - (binder) - (AnnCoreExpr binder bindee annot) - | AnnCoIndexGen [AnnCoreExpr binder bindee annot] - (binder) - (AnnCoreExpr binder bindee annot) -#endif {- Data Parallel Haskell -} -\end{code} - -\begin{code} -data AnnCoreCaseAlternatives binder bindee annot - = AnnCoAlgAlts [(Id, - [binder], - AnnCoreExpr binder bindee annot)] - (AnnCoreCaseDefault binder bindee annot) - | AnnCoPrimAlts [(BasicLit, - AnnCoreExpr binder bindee annot)] - (AnnCoreCaseDefault binder bindee annot) -#ifdef DPH - | AnnCoParAlgAlts TyCon - Int - [binder] - [(Id, - AnnCoreExpr binder bindee annot)] - (AnnCoreCaseDefault binder bindee annot) - | AnnCoParPrimAlts TyCon - Int - [(BasicLit, - AnnCoreExpr binder bindee annot)] - (AnnCoreCaseDefault binder bindee annot) -#endif {- Data Parallel Haskell -} - -data AnnCoreCaseDefault binder bindee annot - = AnnCoNoDefault - | AnnCoBindDefault binder - (AnnCoreExpr binder bindee annot) + | AnnCoerce Coercion + (GenType tyvar uvar) + (AnnCoreExpr val_bdr val_occ tyvar uvar annot) \end{code} \begin{code} -#ifdef DPH -data AnnCoreParCommunicate binder bindee annot - = AnnCoParSend [AnnCoreExpr binder bindee annot] - | AnnCoParFetch [AnnCoreExpr binder bindee annot] - | AnnCoToPodized - | AnnCoFromPodized -#endif {- Data Parallel Haskell -} +data AnnCoreCaseAlts val_bdr val_occ tyvar uvar annot + = AnnAlgAlts [(Id, + [val_bdr], + AnnCoreExpr val_bdr val_occ tyvar uvar annot)] + (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot) + | AnnPrimAlts [(Literal, + AnnCoreExpr val_bdr val_occ tyvar uvar annot)] + (AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot) + +data AnnCoreCaseDefault val_bdr val_occ tyvar uvar annot + = AnnNoDefault + | AnnBindDefault val_bdr + (AnnCoreExpr val_bdr val_occ tyvar uvar annot) \end{code} \begin{code} -deAnnotate :: AnnCoreExpr bndr bdee ann -> CoreExpr bndr bdee - -deAnnotate (_, AnnCoVar v) = CoVar v -deAnnotate (_, AnnCoLit lit) = CoLit lit -deAnnotate (_, AnnCoCon con tys args) = CoCon con tys args -deAnnotate (_, AnnCoPrim op tys args) = CoPrim op tys args -deAnnotate (_, AnnCoLam binders body) = CoLam binders (deAnnotate body) -deAnnotate (_, AnnCoTyLam tyvar body) = CoTyLam tyvar (deAnnotate body) -deAnnotate (_, AnnCoApp fun arg) = CoApp (deAnnotate fun) arg -deAnnotate (_, AnnCoTyApp fun ty) = CoTyApp (deAnnotate fun) ty -deAnnotate (_, AnnCoSCC lbl body) = CoSCC lbl (deAnnotate body) - -deAnnotate (_, AnnCoLet bind body) - = CoLet (deAnnBind bind) (deAnnotate body) +deAnnotate :: AnnCoreExpr val_bdr val_occ tyvar uvar ann + -> GenCoreExpr val_bdr val_occ tyvar uvar + +deAnnotate (_, AnnVar v) = Var v +deAnnotate (_, AnnLit lit) = Lit lit +deAnnotate (_, AnnCon con args) = Con con args +deAnnotate (_, AnnPrim op args) = Prim op args +deAnnotate (_, AnnLam binder body)= Lam binder (deAnnotate body) +deAnnotate (_, AnnApp fun arg) = App (deAnnotate fun) arg +deAnnotate (_, AnnSCC lbl body) = SCC lbl (deAnnotate body) +deAnnotate (_, AnnCoerce c ty body) = Coerce c ty (deAnnotate body) + +deAnnotate (_, AnnLet bind body) + = Let (deAnnBind bind) (deAnnotate body) where - deAnnBind (AnnCoNonRec var rhs) = CoNonRec var (deAnnotate rhs) - deAnnBind (AnnCoRec pairs) = CoRec [(v,deAnnotate rhs) | (v,rhs) <- pairs] + deAnnBind (AnnNonRec var rhs) = NonRec var (deAnnotate rhs) + deAnnBind (AnnRec pairs) = Rec [(v,deAnnotate rhs) | (v,rhs) <- pairs] -deAnnotate (_, AnnCoCase scrut alts) - = CoCase (deAnnotate scrut) (deAnnAlts alts) +deAnnotate (_, AnnCase scrut alts) + = Case (deAnnotate scrut) (deAnnAlts alts) where - deAnnAlts (AnnCoAlgAlts alts deflt) - = CoAlgAlts [(con,args,deAnnotate rhs) | (con,args,rhs) <- alts] + deAnnAlts (AnnAlgAlts alts deflt) + = AlgAlts [(con,args,deAnnotate rhs) | (con,args,rhs) <- alts] (deAnnDeflt deflt) - deAnnAlts (AnnCoPrimAlts alts deflt) - = CoPrimAlts [(lit,deAnnotate rhs) | (lit,rhs) <- alts] + deAnnAlts (AnnPrimAlts alts deflt) + = PrimAlts [(lit,deAnnotate rhs) | (lit,rhs) <- alts] (deAnnDeflt deflt) - deAnnDeflt AnnCoNoDefault = CoNoDefault - deAnnDeflt (AnnCoBindDefault var rhs) = CoBindDefault var (deAnnotate rhs) + deAnnDeflt AnnNoDefault = NoDefault + deAnnDeflt (AnnBindDefault var rhs) = BindDefault var (deAnnotate rhs) \end{code}