[project @ 1999-06-24 13:04:13 by simonmar]
[ghc-hetmet.git] / ghc / compiler / codeGen / CgExpr.lhs
index 5c4cd9b..e12979d 100644 (file)
@@ -1,7 +1,7 @@
 %
 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
 %
-% $Id: CgExpr.lhs,v 1.24 1999/05/07 13:44:00 simonm Exp $
+% $Id: CgExpr.lhs,v 1.28 1999/06/24 13:04:18 simonmar Exp $
 %
 %********************************************************
 %*                                                     *
@@ -22,10 +22,10 @@ import AbsCUtils    ( mkAbstractCs )
 import CLabel          ( mkClosureTblLabel )
 
 import SMRep           ( fixedHdrSize )
-import CgBindery       ( getArgAmodes, getArgAmode, CgIdInfo, nukeDeadBindings)
+import CgBindery       ( getArgAmodes, getArgAmode, CgIdInfo, 
+                         nukeDeadBindings, addBindC, addBindsC )
 import CgCase          ( cgCase, saveVolatileVarsAndRegs, 
-                         restoreCurrentCostCentre, freeCostCentreSlot,
-                         splitTyConAppThroughNewTypes )
+                         restoreCurrentCostCentre )
 import CgClosure       ( cgRhsClosure, cgStdRhsClosure )
 import CgCon           ( buildDynCon, cgReturnDataCon )
 import CgLetNoEscape   ( cgLetNoEscapeClosure )
@@ -48,7 +48,7 @@ import PrimOp         ( primOpOutOfLine,
 import PrimRep         ( getPrimRepSize, PrimRep(..), isFollowableRep )
 import TyCon           ( maybeTyConSingleCon,
                          isUnboxedTupleTyCon, isEnumerationTyCon )
-import Type            ( Type, typePrimRep, splitTyConApp_maybe )
+import Type            ( Type, typePrimRep, splitTyConApp_maybe, splitRepTyConApp_maybe )
 import Maybes          ( assocMaybe, maybeToBool )
 import Unique          ( mkBuiltinUnique )
 import BasicTypes      ( TopLevelFlag(..), RecFlag(..) )
@@ -133,9 +133,9 @@ cgExpr (StgCon (PrimOp TagToEnumOp) [arg] res_ty)
     absC (CAssign dyn_tag amode)       `thenC`
     performReturn (
                CAssign (CReg node) 
-                       (CTableEntry 
+                       (CVal (CIndex
                          (CLbl (mkClosureTblLabel tycon) PtrRep)
-                         dyn_tag PtrRep))
+                         dyn_tag PtrRep) PtrRep))
            (\ sequel -> mkDynamicAlgReturnCode tycon dyn_tag sequel)
    where
         dyn_tag = CTemp (mkBuiltinUnique 0) IntRep
@@ -177,9 +177,9 @@ cgExpr x@(StgCon (PrimOp op) args res_ty)
               -- about to return anyway.
               dyn_tag = CTemp (mkBuiltinUnique 0) IntRep
 
-              closure_lbl = CTableEntry 
+              closure_lbl = CVal (CIndex
                               (CLbl (mkClosureTblLabel tycon) PtrRep)
-                              dyn_tag PtrRep
+                              dyn_tag PtrRep) PtrRep
 
 \end{code}
 
@@ -226,7 +226,6 @@ cgExpr (StgLetNoEscape live_in_whole_let live_in_rhss bindings body)
     saveVolatileVarsAndRegs live_in_rhss
            `thenFC` \ (save_assts, rhs_eob_info, maybe_cc_slot) ->
     -- ToDo: cost centre???
-    freeCostCentreSlot maybe_cc_slot      `thenC`
     restoreCurrentCostCentre maybe_cc_slot `thenFC` \ restore_cc ->
 
        -- Save those variables right now!
@@ -463,7 +462,7 @@ primRetUnboxedTuple op args res_ty
       allocate some temporaries for the return values.
     -}
     let
-      (tc,ty_args)      = case splitTyConAppThroughNewTypes res_ty of
+      (tc,ty_args)      = case splitRepTyConApp_maybe res_ty of
                            Nothing -> pprPanic "primRetUnboxedTuple" (ppr res_ty)
                            Just pr -> pr
       prim_reps          = map typePrimRep ty_args