View patterns, record wildcards, and record puns
[ghc-hetmet.git] / compiler / nativeGen / PprMach.hs
index a376989..5115955 100644 (file)
@@ -1,3 +1,10 @@
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 -----------------------------------------------------------------------------
 --
 -- Pretty-printing assembly language
 -- (e.g., 'pprReg'); we conclude with the no-commonality monster,
 -- 'pprInstr'.
 
-{-# OPTIONS -w #-}
--- The above warning supression flag is a temporary kludge.
--- While working on this module you are encouraged to remove it and fix
--- any warnings in the module. See
---     http://hackage.haskell.org/trac/ghc/wiki/CodingStyle#Warnings
--- for details
-
 #include "nativeGen/NCG.h"
 
 module PprMach ( 
@@ -68,27 +68,23 @@ pprNatCmmTop (CmmData section dats) =
   pprSectionHeader section $$ vcat (map pprData dats)
 
  -- special case for split markers:
-pprNatCmmTop (CmmProc [] lbl _ []) = pprLabel lbl
+pprNatCmmTop (CmmProc [] lbl _ (ListGraph [])) = pprLabel lbl
 
-pprNatCmmTop (CmmProc info lbl params blocks) = 
+pprNatCmmTop (CmmProc info lbl params (ListGraph blocks)) = 
   pprSectionHeader Text $$
-  (if not (null info)
-       then
+  (if null info then -- blocks guaranteed not null, so label needed
+       pprLabel lbl
+   else
 #if HAVE_SUBSECTIONS_VIA_SYMBOLS
             pprCLabel_asm (mkDeadStripPreventer $ entryLblToInfoLbl lbl)
                 <> char ':' $$
 #endif
-            vcat (map pprData info) $$
-            pprLabel (entryLblToInfoLbl lbl)
-       else empty) $$
-  (case blocks of
-       [] -> empty
-       (BasicBlock _ instrs : rest) -> 
-               (if null info then pprLabel lbl else empty) $$
-               -- the first block doesn't get a label:
-               vcat (map pprInstr instrs) $$
-               vcat (map pprBasicBlock rest)
-  )
+       vcat (map pprData info) $$
+       pprLabel (entryLblToInfoLbl lbl)
+  ) $$
+  vcat (map pprBasicBlock blocks)
+     -- ^ Even the first block gets a label, because with branch-chain
+     -- elimination, it might be the target of a goto.
 #if HAVE_SUBSECTIONS_VIA_SYMBOLS
         -- If we are using the .subsections_via_symbols directive
         -- (available on recent versions of Darwin),