projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2000-10-16 13:13:41 by sewardj]
[ghc-hetmet.git]
/
ghc
/
compiler
/
codeGen
/
CgCase.lhs
diff --git
a/ghc/compiler/codeGen/CgCase.lhs
b/ghc/compiler/codeGen/CgCase.lhs
index
b9c3149
..
481ef02
100644
(file)
--- a/
ghc/compiler/codeGen/CgCase.lhs
+++ b/
ghc/compiler/codeGen/CgCase.lhs
@@
-1,7
+1,7
@@
%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-% $Id: CgCase.lhs,v 1.41 2000/04/13 20:41:30 panne Exp $
+% $Id: CgCase.lhs,v 1.46 2000/09/06 12:21:15 simonmar Exp $
%
%********************************************************
%* *
%
%********************************************************
%* *
@@
-25,7
+25,7
@@
import AbsCUtils ( mkAbstractCs, mkAbsCStmts, mkAlgAltsCSwitch,
getAmodeRep, nonemptyAbsC
)
import CgUpdate ( reserveSeqFrame )
getAmodeRep, nonemptyAbsC
)
import CgUpdate ( reserveSeqFrame )
-import CgBindery ( getVolatileRegs, getArgAmodes, getArgAmode,
+import CgBindery ( getVolatileRegs, getArgAmodes,
bindNewToReg, bindNewToTemp,
bindNewPrimToAmode,
rebindToStack, getCAddrMode,
bindNewToReg, bindNewToTemp,
bindNewPrimToAmode,
rebindToStack, getCAddrMode,
@@
-48,7
+48,6
@@
import CLabel ( CLabel, mkVecTblLabel, mkReturnPtLabel,
)
import ClosureInfo ( mkLFArgument )
import CmdLineOpts ( opt_SccProfilingOn, opt_GranMacros )
)
import ClosureInfo ( mkLFArgument )
import CmdLineOpts ( opt_SccProfilingOn, opt_GranMacros )
-import CostCentre ( CostCentre )
import Id ( Id, idPrimRep, isDeadBinder )
import DataCon ( DataCon, dataConTag, fIRST_TAG, ConTag,
isUnboxedTupleCon )
import Id ( Id, idPrimRep, isDeadBinder )
import DataCon ( DataCon, dataConTag, fIRST_TAG, ConTag,
isUnboxedTupleCon )
@@
-59,11
+58,10
@@
import PrimRep ( getPrimRepSize, retPrimRepSize, PrimRep(..)
)
import TyCon ( TyCon, isEnumerationTyCon, isUnboxedTupleTyCon,
isNewTyCon, isAlgTyCon, isFunTyCon, isPrimTyCon,
)
import TyCon ( TyCon, isEnumerationTyCon, isUnboxedTupleTyCon,
isNewTyCon, isAlgTyCon, isFunTyCon, isPrimTyCon,
- tyConDataCons, tyConFamilySize )
+ )
import Type ( Type, typePrimRep, splitAlgTyConApp,
splitTyConApp_maybe, repType )
import Type ( Type, typePrimRep, splitAlgTyConApp,
splitTyConApp_maybe, repType )
-import PprType ( {- instance Outputable Type -} )
-import Unique ( Unique, Uniquable(..), mkPseudoUnique1 )
+import Unique ( Unique, Uniquable(..), newTagUnique )
import Maybes ( maybeToBool )
import Util
import Outputable
import Maybes ( maybeToBool )
import Util
import Outputable
@@
-145,9
+143,10
@@
alternatives (in which case we lookup the tag in the relevant closure
table to get the closure).
Being a bit short of uniques for temporary variables here, we use
table to get the closure).
Being a bit short of uniques for temporary variables here, we use
-mkPseudoUnique1 to generate a temporary for the tag. We can't use
-mkBuiltinUnique, because that occasionally clashes with some
-temporaries generated for _ccall_GC, amongst others (see CgExpr.lhs).
+newTagUnique to generate a new unique from the case binder. The case
+binder's unique will presumably have the 'c' tag (generated by
+CoreToStg), so we just change its tag to 'C' (for 'case') to ensure it
+doesn't clash with anything else.
\begin{code}
cgCase (StgPrimApp op args res_ty)
\begin{code}
cgCase (StgPrimApp op args res_ty)
@@
-157,7
+156,7
@@
cgCase (StgPrimApp op args res_ty)
let tag_amode = case op of
TagToEnumOp -> only arg_amodes
let tag_amode = case op of
TagToEnumOp -> only arg_amodes
- _ -> CTemp (mkPseudoUnique1{-see above-} 1) IntRep
+ _ -> CTemp (newTagUnique (getUnique bndr) 'C') IntRep
closure = CVal (CIndex (CLbl (mkClosureTblLabel tycon) PtrRep) tag_amode PtrRep) PtrRep
in
closure = CVal (CIndex (CLbl (mkClosureTblLabel tycon) PtrRep) tag_amode PtrRep) PtrRep
in
@@
-901,8
+900,6
@@
mkReturnVector :: Unique
mkReturnVector uniq tagged_alt_absCs deflt_absC srt liveness ret_conv
= getSRTLabel `thenFC` \srt_label ->
let
mkReturnVector uniq tagged_alt_absCs deflt_absC srt liveness ret_conv
= getSRTLabel `thenFC` \srt_label ->
let
- srt_info = (srt_label, srt)
-
(return_vec_amode, vtbl_body) = case ret_conv of {
-- might be a polymorphic case...
(return_vec_amode, vtbl_body) = case ret_conv of {
-- might be a polymorphic case...
@@
-950,7
+947,7
@@
mkReturnVector uniq tagged_alt_absCs deflt_absC srt liveness ret_conv
deflt_lbl =
case nonemptyAbsC deflt_absC of
-- the simplifier might have eliminated a case
deflt_lbl =
case nonemptyAbsC deflt_absC of
-- the simplifier might have eliminated a case
- Nothing -> CLbl mkErrorStdEntryLabel CodePtrRep
+ Nothing -> mkIntCLit 0 -- CLbl mkErrorStdEntryLabel CodePtrRep
Just absC@(CCodeBlock lbl _) -> CLbl lbl CodePtrRep
mk_vector_entry :: ConTag -> (CAddrMode, AbstractC)
Just absC@(CCodeBlock lbl _) -> CLbl lbl CodePtrRep
mk_vector_entry :: ConTag -> (CAddrMode, AbstractC)