diff options
author | Paolo Capriotti <p.capriotti@gmail.com> | 2012-07-10 10:36:03 +0100 |
---|---|---|
committer | Paolo Capriotti <p.capriotti@gmail.com> | 2012-07-11 08:46:26 +0100 |
commit | 6ed684b35af3045a41e34b4f8a0b6dd05a6eb700 (patch) | |
tree | f33d56599f9e771c84e9bd56e8caa1a749d224c4 | |
parent | 4f764d06f3b9899c09a6a459a22d4be694ee45d9 (diff) | |
download | haskell-6ed684b35af3045a41e34b4f8a0b6dd05a6eb700.tar.gz |
Fix overlapping patterns warning (#7065)
-rw-r--r-- | compiler/nativeGen/X86/Regs.hs | 18 |
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 |