summaryrefslogtreecommitdiff
path: root/includes/CodeGen.Platform.hs
diff options
context:
space:
mode:
authorThomas Miedema <thomasmiedema@gmail.com>2015-08-21 10:38:06 +0200
committerBen Gamari <ben@smart-cactus.org>2015-08-21 12:10:07 +0200
commit3452473b4bb180ba327520067b8c6f2a8d6c4f4b (patch)
tree9ff61fd6658051170001ea806ad2c60086083a27 /includes/CodeGen.Platform.hs
parent9e8562ae02701270e2c1dfcee3279d862dc5b7b6 (diff)
downloadhaskell-3452473b4bb180ba327520067b8c6f2a8d6c4f4b.tar.gz
Delete FastBool
This reverses some of the work done in Trac #1405, and assumes GHC is smart enough to do its own unboxing of booleans now. I would like to do some more performance measurements, but the code changes can be reviewed already. Test Plan: With a perf build: ./inplace/bin/ghc-stage2 nofib/spectral/simple/Main.hs -fforce-recomp +RTS -t --machine-readable before: ``` [("bytes allocated", "1300744864") ,("num_GCs", "302") ,("average_bytes_used", "8811118") ,("max_bytes_used", "24477464") ,("num_byte_usage_samples", "9") ,("peak_megabytes_allocated", "64") ,("init_cpu_seconds", "0.001") ,("init_wall_seconds", "0.001") ,("mutator_cpu_seconds", "2.833") ,("mutator_wall_seconds", "4.283") ,("GC_cpu_seconds", "0.960") ,("GC_wall_seconds", "0.961") ] ``` after: ``` [("bytes allocated", "1301088064") ,("num_GCs", "310") ,("average_bytes_used", "8820253") ,("max_bytes_used", "24539904") ,("num_byte_usage_samples", "9") ,("peak_megabytes_allocated", "64") ,("init_cpu_seconds", "0.001") ,("init_wall_seconds", "0.001") ,("mutator_cpu_seconds", "2.876") ,("mutator_wall_seconds", "4.474") ,("GC_cpu_seconds", "0.965") ,("GC_wall_seconds", "0.979") ] ``` CPU time seems to be up a bit, but I'm not sure. Unfortunately CPU time measurements are rather noisy. Reviewers: austin, bgamari, rwbarton Subscribers: nomeata Differential Revision: https://phabricator.haskell.org/D1143 GHC Trac Issues: #1405
Diffstat (limited to 'includes/CodeGen.Platform.hs')
-rw-r--r--includes/CodeGen.Platform.hs187
1 files changed, 93 insertions, 94 deletions
diff --git a/includes/CodeGen.Platform.hs b/includes/CodeGen.Platform.hs
index 1ff888af91..b93f0074fd 100644
--- a/includes/CodeGen.Platform.hs
+++ b/includes/CodeGen.Platform.hs
@@ -1,6 +1,5 @@
import CmmExpr
-import FastBool
#if !(MACHREGS_i386 || MACHREGS_x86_64 || MACHREGS_sparc || MACHREGS_powerpc)
import Panic
#endif
@@ -823,17 +822,17 @@ globalRegMaybe _ = Nothing
globalRegMaybe = panic "globalRegMaybe not defined for this platform"
#endif
-freeReg :: RegNo -> FastBool
+freeReg :: RegNo -> Bool
#if MACHREGS_i386 || MACHREGS_x86_64
# if MACHREGS_i386
-freeReg esp = fastBool False -- %esp is the C stack pointer
-freeReg esi = fastBool False -- Note [esi/edi not allocatable]
-freeReg edi = fastBool False
+freeReg esp = False -- %esp is the C stack pointer
+freeReg esi = False -- Note [esi/edi not allocatable]
+freeReg edi = False
# endif
# if MACHREGS_x86_64
-freeReg rsp = fastBool False -- %rsp is the C stack pointer
+freeReg rsp = False -- %rsp is the C stack pointer
# endif
{-
@@ -853,158 +852,158 @@ Hence, on x86 esi and edi are treated as not allocatable.
-- split patterns in two functions to prevent overlaps
freeReg r = freeRegBase r
-freeRegBase :: RegNo -> FastBool
+freeRegBase :: RegNo -> Bool
# ifdef REG_Base
-freeRegBase REG_Base = fastBool False
+freeRegBase REG_Base = False
# endif
# ifdef REG_Sp
-freeRegBase REG_Sp = fastBool False
+freeRegBase REG_Sp = False
# endif
# ifdef REG_SpLim
-freeRegBase REG_SpLim = fastBool False
+freeRegBase REG_SpLim = False
# endif
# ifdef REG_Hp
-freeRegBase REG_Hp = fastBool False
+freeRegBase REG_Hp = False
# endif
# ifdef REG_HpLim
-freeRegBase REG_HpLim = fastBool False
+freeRegBase REG_HpLim = False
# endif
-- All other regs are considered to be "free", because we can track
-- their liveness accurately.
-freeRegBase _ = fastBool True
+freeRegBase _ = True
#elif MACHREGS_powerpc
-freeReg 0 = fastBool False -- Hack: r0 can't be used in all insns,
- -- but it's actually free
-freeReg 1 = fastBool False -- The Stack Pointer
+freeReg 0 = False -- Hack: r0 can't be used in all insns,
+ -- but it's actually free
+freeReg 1 = False -- The Stack Pointer
# if !MACHREGS_darwin
-- most non-darwin powerpc OSes use r2 as a TOC pointer or something like that
-freeReg 2 = fastBool False
+freeReg 2 = False
-- TODO: make this conditonal for ppc64 ELF
-freeReg 13 = fastBool False -- reserved for system thread ID
+freeReg 13 = False -- reserved for system thread ID
-- TODO: do not reserve r30 in ppc64 ELF
-- at least linux in -fPIC relies on r30 in PLT stubs
-freeReg 30 = fastBool False
+freeReg 30 = False
# endif
# ifdef REG_Base
-freeReg REG_Base = fastBool False
+freeReg REG_Base = False
# endif
# ifdef REG_R1
-freeReg REG_R1 = fastBool False
+freeReg REG_R1 = False
# endif
# ifdef REG_R2
-freeReg REG_R2 = fastBool False
+freeReg REG_R2 = False
# endif
# ifdef REG_R3
-freeReg REG_R3 = fastBool False
+freeReg REG_R3 = False
# endif
# ifdef REG_R4
-freeReg REG_R4 = fastBool False
+freeReg REG_R4 = False
# endif
# ifdef REG_R5
-freeReg REG_R5 = fastBool False
+freeReg REG_R5 = False
# endif
# ifdef REG_R6
-freeReg REG_R6 = fastBool False
+freeReg REG_R6 = False
# endif
# ifdef REG_R7
-freeReg REG_R7 = fastBool False
+freeReg REG_R7 = False
# endif
# ifdef REG_R8
-freeReg REG_R8 = fastBool False
+freeReg REG_R8 = False
# endif
# ifdef REG_R9
-freeReg REG_R9 = fastBool False
+freeReg REG_R9 = False
# endif
# ifdef REG_R10
-freeReg REG_R10 = fastBool False
+freeReg REG_R10 = False
# endif
# ifdef REG_F1
-freeReg REG_F1 = fastBool False
+freeReg REG_F1 = False
# endif
# ifdef REG_F2
-freeReg REG_F2 = fastBool False
+freeReg REG_F2 = False
# endif
# ifdef REG_F3
-freeReg REG_F3 = fastBool False
+freeReg REG_F3 = False
# endif
# ifdef REG_F4
-freeReg REG_F4 = fastBool False
+freeReg REG_F4 = False
# endif
# ifdef REG_F5
-freeReg REG_F5 = fastBool False
+freeReg REG_F5 = False
# endif
# ifdef REG_F6
-freeReg REG_F6 = fastBool False
+freeReg REG_F6 = False
# endif
# ifdef REG_D1
-freeReg REG_D1 = fastBool False
+freeReg REG_D1 = False
# endif
# ifdef REG_D2
-freeReg REG_D2 = fastBool False
+freeReg REG_D2 = False
# endif
# ifdef REG_D3
-freeReg REG_D3 = fastBool False
+freeReg REG_D3 = False
# endif
# ifdef REG_D4
-freeReg REG_D4 = fastBool False
+freeReg REG_D4 = False
# endif
# ifdef REG_D5
-freeReg REG_D5 = fastBool False
+freeReg REG_D5 = False
# endif
# ifdef REG_D6
-freeReg REG_D6 = fastBool False
+freeReg REG_D6 = False
# endif
# ifdef REG_Sp
-freeReg REG_Sp = fastBool False
+freeReg REG_Sp = False
# endif
# ifdef REG_Su
-freeReg REG_Su = fastBool False
+freeReg REG_Su = False
# endif
# ifdef REG_SpLim
-freeReg REG_SpLim = fastBool False
+freeReg REG_SpLim = False
# endif
# ifdef REG_Hp
-freeReg REG_Hp = fastBool False
+freeReg REG_Hp = False
# endif
# ifdef REG_HpLim
-freeReg REG_HpLim = fastBool False
+freeReg REG_HpLim = False
# endif
-freeReg _ = fastBool True
+freeReg _ = True
#elif MACHREGS_sparc
-- SPARC regs used by the OS / ABI
-- %g0(r0) is always zero
-freeReg g0 = fastBool False
+freeReg g0 = False
-- %g5(r5) - %g7(r7)
-- are reserved for the OS
-freeReg g5 = fastBool False
-freeReg g6 = fastBool False
-freeReg g7 = fastBool False
+freeReg g5 = False
+freeReg g6 = False
+freeReg g7 = False
-- %o6(r14)
-- is the C stack pointer
-freeReg o6 = fastBool False
+freeReg o6 = False
-- %o7(r15)
-- holds the C return address
-freeReg o7 = fastBool False
+freeReg o7 = False
-- %i6(r30)
-- is the C frame pointer
-freeReg i6 = fastBool False
+freeReg i6 = False
-- %i7(r31)
-- is used for C return addresses
-freeReg i7 = fastBool False
+freeReg i7 = False
-- %f0(r32) - %f1(r32)
-- are C floating point return regs
-freeReg f0 = fastBool False
-freeReg f1 = fastBool False
+freeReg f0 = False
+freeReg f1 = False
{-
freeReg regNo
@@ -1012,112 +1011,112 @@ freeReg regNo
| regNo >= f0
, regNo < NCG_FirstFloatReg
, regNo `mod` 2 /= 0
- = fastBool False
+ = False
-}
# ifdef REG_Base
-freeReg REG_Base = fastBool False
+freeReg REG_Base = False
# endif
# ifdef REG_R1
-freeReg REG_R1 = fastBool False
+freeReg REG_R1 = False
# endif
# ifdef REG_R2
-freeReg REG_R2 = fastBool False
+freeReg REG_R2 = False
# endif
# ifdef REG_R3
-freeReg REG_R3 = fastBool False
+freeReg REG_R3 = False
# endif
# ifdef REG_R4
-freeReg REG_R4 = fastBool False
+freeReg REG_R4 = False
# endif
# ifdef REG_R5
-freeReg REG_R5 = fastBool False
+freeReg REG_R5 = False
# endif
# ifdef REG_R6
-freeReg REG_R6 = fastBool False
+freeReg REG_R6 = False
# endif
# ifdef REG_R7
-freeReg REG_R7 = fastBool False
+freeReg REG_R7 = False
# endif
# ifdef REG_R8
-freeReg REG_R8 = fastBool False
+freeReg REG_R8 = False
# endif
# ifdef REG_R9
-freeReg REG_R9 = fastBool False
+freeReg REG_R9 = False
# endif
# ifdef REG_R10
-freeReg REG_R10 = fastBool False
+freeReg REG_R10 = False
# endif
# ifdef REG_F1
-freeReg REG_F1 = fastBool False
+freeReg REG_F1 = False
# endif
# ifdef REG_F2
-freeReg REG_F2 = fastBool False
+freeReg REG_F2 = False
# endif
# ifdef REG_F3
-freeReg REG_F3 = fastBool False
+freeReg REG_F3 = False
# endif
# ifdef REG_F4
-freeReg REG_F4 = fastBool False
+freeReg REG_F4 = False
# endif
# ifdef REG_F5
-freeReg REG_F5 = fastBool False
+freeReg REG_F5 = False
# endif
# ifdef REG_F6
-freeReg REG_F6 = fastBool False
+freeReg REG_F6 = False
# endif
# ifdef REG_D1
-freeReg REG_D1 = fastBool False
+freeReg REG_D1 = False
# endif
# ifdef REG_D1_2
-freeReg REG_D1_2 = fastBool False
+freeReg REG_D1_2 = False
# endif
# ifdef REG_D2
-freeReg REG_D2 = fastBool False
+freeReg REG_D2 = False
# endif
# ifdef REG_D2_2
-freeReg REG_D2_2 = fastBool False
+freeReg REG_D2_2 = False
# endif
# ifdef REG_D3
-freeReg REG_D3 = fastBool False
+freeReg REG_D3 = False
# endif
# ifdef REG_D3_2
-freeReg REG_D3_2 = fastBool False
+freeReg REG_D3_2 = False
# endif
# ifdef REG_D4
-freeReg REG_D4 = fastBool False
+freeReg REG_D4 = False
# endif
# ifdef REG_D4_2
-freeReg REG_D4_2 = fastBool False
+freeReg REG_D4_2 = False
# endif
# ifdef REG_D5
-freeReg REG_D5 = fastBool False
+freeReg REG_D5 = False
# endif
# ifdef REG_D5_2
-freeReg REG_D5_2 = fastBool False
+freeReg REG_D5_2 = False
# endif
# ifdef REG_D6
-freeReg REG_D6 = fastBool False
+freeReg REG_D6 = False
# endif
# ifdef REG_D6_2
-freeReg REG_D6_2 = fastBool False
+freeReg REG_D6_2 = False
# endif
# ifdef REG_Sp
-freeReg REG_Sp = fastBool False
+freeReg REG_Sp = False
# endif
# ifdef REG_Su
-freeReg REG_Su = fastBool False
+freeReg REG_Su = False
# endif
# ifdef REG_SpLim
-freeReg REG_SpLim = fastBool False
+freeReg REG_SpLim = False
# endif
# ifdef REG_Hp
-freeReg REG_Hp = fastBool False
+freeReg REG_Hp = False
# endif
# ifdef REG_HpLim
-freeReg REG_HpLim = fastBool False
+freeReg REG_HpLim = False
# endif
-freeReg _ = fastBool True
+freeReg _ = True
#else