Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghc
authorIan Lynagh <ian@well-typed.com>
Sat, 6 Apr 2013 18:03:42 +0000 (19:03 +0100)
committerIan Lynagh <ian@well-typed.com>
Sat, 6 Apr 2013 18:03:42 +0000 (19:03 +0100)
compiler/cmm/CmmNode.hs
compiler/cmm/CmmPipeline.hs

index b3adefe..61c0b80 100644 (file)
@@ -1,6 +1,7 @@
 -- CmmNode type for representation using Hoopl graphs.
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE GADTs #-}
+{-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE UndecidableInstances #-}
 
 {-# OPTIONS -fno-warn-tabs #-}
@@ -199,20 +200,8 @@ way is done in cmm/CmmOpt.hs currently.  We should fix this!
 
 ---------------------------------------------
 -- Eq instance of CmmNode
--- It is a shame GHC cannot infer it by itself :(
-
-instance Eq (CmmNode e x) where
-  (CmmEntry a)                 == (CmmEntry a')                   = a==a'
-  (CmmComment a)               == (CmmComment a')                 = a==a'
-  (CmmAssign a b)              == (CmmAssign a' b')               = a==a' && b==b'
-  (CmmStore a b)               == (CmmStore a' b')                = a==a' && b==b'
-  (CmmUnsafeForeignCall a b c) == (CmmUnsafeForeignCall a' b' c') = a==a' && b==b' && c==c'
-  (CmmBranch a)                == (CmmBranch a')                  = a==a'
-  (CmmCondBranch a b c)        == (CmmCondBranch a' b' c')        = a==a' && b==b' && c==c'
-  (CmmSwitch a b)              == (CmmSwitch a' b')               = a==a' && b==b'
-  (CmmCall a b c d e f)          == (CmmCall a' b' c' d' e' f')   = a==a' && b==b' && c==c' && d==d' && e==e' && f==f'
-  (CmmForeignCall a b c d e f) == (CmmForeignCall a' b' c' d' e' f') = a==a' && b==b' && c==c' && d==d' && e==e' && f==f'
-  _                            == _                               = False
+
+deriving instance Eq (CmmNode e x)
 
 ----------------------------------------------
 -- Hoopl instances of CmmNode
index 78fed22..5e9bca3 100644 (file)
@@ -184,11 +184,11 @@ cpsTop hsc_env proc =
                              || not (tablesNextToCode dflags)
                              || -- Note [inconsistent-pic-reg]
                                 usingInconsistentPicReg
-        usingInconsistentPicReg = ( platformArch platform == ArchX86 ||
-                                    platformArch platform == ArchPPC
-                                  )
-                               && platformOS platform == OSDarwin
-                               && gopt Opt_PIC dflags
+        usingInconsistentPicReg
+           = case (platformArch platform, platformOS platform, gopt Opt_PIC dflags)
+             of   (ArchX86, OSDarwin, pic) -> pic
+                  (ArchPPC, OSDarwin, pic) -> pic
+                  _                        -> False
 
 {- Note [inconsistent-pic-reg]