X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fcmm%2FCmmNode.hs;h=e67321c0b0fd462349ddddf282012ea28b248009;hb=6cec61d14a324285dbb8ce73d4c7215f1f8d6766;hp=12d534ea5323935720f17af5f3ce7c94778c2b29;hpb=889c084e943779e76d19f2ef5e970ff655f511eb;p=ghc-hetmet.git diff --git a/compiler/cmm/CmmNode.hs b/compiler/cmm/CmmNode.hs index 12d534e..e67321c 100644 --- a/compiler/cmm/CmmNode.hs +++ b/compiler/cmm/CmmNode.hs @@ -1,5 +1,12 @@ -- CmmNode type for representation using Hoopl graphs. {-# LANGUAGE GADTs #-} + +{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-} +#if __GLASGOW_HASKELL__ >= 701 +-- GHC 7.0.1 improved incomplete pattern warnings with GADTs +{-# OPTIONS_GHC -fwarn-incomplete-patterns #-} +#endif + module CmmNode ( CmmNode(..) , UpdFrameOffset, Convention(..), ForeignConvention(..), ForeignTarget(..) @@ -85,6 +92,8 @@ data CmmNode e x where A MidForeign call is used for *unsafe* foreign calls; a LastForeign call is used for *safe* foreign calls. Unsafe ones are easy: think of them as a "fat machine instruction". +In particular, they do *not* kill all live registers (there was a bit +of code in GHC that conservatively assumed otherwise.) Safe ones are trickier. A safe foreign call r = f(x) @@ -129,14 +138,12 @@ instance Eq (CmmNode e x) where instance NonLocal CmmNode where entryLabel (CmmEntry l) = l - -- entryLabel _ = error "CmmNode.entryLabel" successors (CmmBranch l) = [l] successors (CmmCondBranch {cml_true=t, cml_false=f}) = [f, t] -- meets layout constraint successors (CmmSwitch _ ls) = catMaybes ls successors (CmmCall {cml_cont=l}) = maybeToList l successors (CmmForeignCall {succ=l}) = [l] - -- successors _ = error "CmmNode.successors" instance HooplNode CmmNode where