Add optional eager black-holing, with new flag -feager-blackholing
[ghc-hetmet.git] / compiler / nativeGen / AsmCodeGen.lhs
index 6d3bf7c..ee39dcd 100644 (file)
@@ -363,10 +363,7 @@ cmmNativeGen dflags us cmm count
 x86fp_kludge :: NatCmmTop -> NatCmmTop
 x86fp_kludge top@(CmmData _ _) = top
 x86fp_kludge top@(CmmProc info lbl params (ListGraph code)) = 
-       CmmProc info lbl params (ListGraph $ map bb_i386_insert_ffrees code)
-       where
-               bb_i386_insert_ffrees (BasicBlock id instrs) =
-                       BasicBlock id (i386_insert_ffrees instrs)
+       CmmProc info lbl params (ListGraph $ i386_insert_ffrees code)
 #endif
 
 
@@ -456,7 +453,7 @@ sequenceBlocks (entry:blocks) =
   -- the first block is the entry point ==> it must remain at the start.
 
 sccBlocks :: [NatBasicBlock] -> [SCC (NatBasicBlock,Unique,[Unique])]
-sccBlocks blocks = stronglyConnCompR (map mkNode blocks)
+sccBlocks blocks = stronglyConnCompFromEdgedVerticesR (map mkNode blocks)
 
 getOutEdges :: [Instr] -> [Unique]
 getOutEdges instrs = case jumpDests (last instrs) [] of
@@ -719,9 +716,9 @@ cmmStmtConFold stmt
                                e' <- cmmExprConFold CallReference e
                                return $ CmmCallee e' conv
                              other -> return other
-                 args' <- mapM (\(CmmHinted arg hint) -> do
+                 args' <- mapM (\(CmmKinded arg hint) -> do
                                   arg' <- cmmExprConFold DataReference arg
-                                  return (CmmHinted arg' hint)) args
+                                  return (CmmKinded arg' hint)) args
                 return $ CmmCall target' regs args' srt returns
 
         CmmCondBranch test dest
@@ -771,14 +768,18 @@ cmmExprConFold referenceKind expr
            -- On powerpc (non-PIC), it's easier to jump directly to a label than
            -- to use the register table, so we replace these registers
            -- with the corresponding labels:
+        CmmReg (CmmGlobal EagerBlackholeInfo)
+          | not opt_PIC
+          -> cmmExprConFold referenceKind $
+             CmmLit (CmmLabel (mkRtsCodeLabel (sLit "__stg_EAGER_BLACKHOLE_INFO"))) 
         CmmReg (CmmGlobal GCEnter1)
           | not opt_PIC
           -> cmmExprConFold referenceKind $
-             CmmLit (CmmLabel (mkRtsCodeLabel SLIT( "__stg_gc_enter_1"))) 
+             CmmLit (CmmLabel (mkRtsCodeLabel (sLit "__stg_gc_enter_1"))) 
         CmmReg (CmmGlobal GCFun)
           | not opt_PIC
           -> cmmExprConFold referenceKind $
-             CmmLit (CmmLabel (mkRtsCodeLabel SLIT( "__stg_gc_fun")))
+             CmmLit (CmmLabel (mkRtsCodeLabel (sLit "__stg_gc_fun")))
 #endif
 
         CmmReg (CmmGlobal mid)