summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Capriotti <p.capriotti@gmail.com>2012-07-10 10:36:03 +0100
committerPaolo Capriotti <p.capriotti@gmail.com>2012-07-11 08:46:26 +0100
commit6ed684b35af3045a41e34b4f8a0b6dd05a6eb700 (patch)
treef33d56599f9e771c84e9bd56e8caa1a749d224c4
parent4f764d06f3b9899c09a6a459a22d4be694ee45d9 (diff)
downloadhaskell-6ed684b35af3045a41e34b4f8a0b6dd05a6eb700.tar.gz
Fix overlapping patterns warning (#7065)
-rw-r--r--compiler/nativeGen/X86/Regs.hs18
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/nativeGen/X86/Regs.hs b/compiler/nativeGen/X86/Regs.hs
index b2b6a3413a..ea0fd61a97 100644
--- a/compiler/nativeGen/X86/Regs.hs
+++ b/compiler/nativeGen/X86/Regs.hs
@@ -404,7 +404,7 @@ xmm n = regSingle (firstxmm+n)
-- horror show -----------------------------------------------------------------
-freeReg :: RegNo -> FastBool
+freeReg, freeRegBase :: RegNo -> FastBool
globalRegMaybe :: GlobalReg -> Maybe RealReg
allArgRegs :: [(Reg, Reg)]
allIntArgRegs :: [Reg]
@@ -480,26 +480,28 @@ freeReg edi = fastBool False
freeReg rsp = fastBool False -- %rsp is the C stack pointer
#endif
+-- split patterns in two functions to prevent overlaps
+freeReg r = freeRegBase r
+
#ifdef REG_Base
-freeReg REG_Base = fastBool False
+freeRegBase REG_Base = fastBool False
#endif
#ifdef REG_Sp
-freeReg REG_Sp = fastBool False
+freeRegBase REG_Sp = fastBool False
#endif
#ifdef REG_SpLim
-freeReg REG_SpLim = fastBool False
+freeRegBase REG_SpLim = fastBool False
#endif
#ifdef REG_Hp
-freeReg REG_Hp = fastBool False
+freeRegBase REG_Hp = fastBool False
#endif
#ifdef REG_HpLim
-freeReg REG_HpLim = fastBool False
+freeRegBase REG_HpLim = fastBool False
#endif
-- All other regs are considered to be "free", because we can track
-- their liveness accurately.
-freeReg _ = fastBool True
-
+freeRegBase _ = fastBool True
-- | Returns 'Nothing' if this global register is not stored
-- in a real machine register, otherwise returns @'Just' reg@, where