diff options
author | Peter Trommler <ptrommler@acm.org> | 2018-12-11 16:43:49 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-03-15 10:30:08 -0400 |
commit | 83e09d3c2b2e84b85fa25e271eff2747fc783f09 (patch) | |
tree | f7969d07d5a1cccd58893fd47aa133b0c7464211 /includes/CodeGen.Platform.hs | |
parent | 97032ed9b2594c8939cab776ff871051d6dba30a (diff) | |
download | haskell-83e09d3c2b2e84b85fa25e271eff2747fc783f09.tar.gz |
PPC NCG: Use liveness information in CmmCall
We make liveness information for global registers
available on `JMP` and `BCTR`, which were the last instructions
missing. With complete liveness information we do not need to
reserve global registers in `freeReg` anymore. Moreover we
assign R9 and R10 to callee saves registers.
Cleanup by removing `Reg_Su`, which was unused, from `freeReg`
and removing unused register definitions.
The calculation of the number of floating point registers is too
conservative. Just follow X86 and specify the constants directly.
Overall on PowerPC this results in 0.3 % smaller code size in nofib
while runtime is slightly better in some tests.
Diffstat (limited to 'includes/CodeGen.Platform.hs')
-rw-r--r-- | includes/CodeGen.Platform.hs | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/includes/CodeGen.Platform.hs b/includes/CodeGen.Platform.hs index 6c00597764..2a373283d4 100644 --- a/includes/CodeGen.Platform.hs +++ b/includes/CodeGen.Platform.hs @@ -904,78 +904,9 @@ freeReg 30 = False # if defined(REG_Base) freeReg REG_Base = False # endif -# if defined(REG_R1) -freeReg REG_R1 = False -# endif -# if defined(REG_R2) -freeReg REG_R2 = False -# endif -# if defined(REG_R3) -freeReg REG_R3 = False -# endif -# if defined(REG_R4) -freeReg REG_R4 = False -# endif -# if defined(REG_R5) -freeReg REG_R5 = False -# endif -# if defined(REG_R6) -freeReg REG_R6 = False -# endif -# if defined(REG_R7) -freeReg REG_R7 = False -# endif -# if defined(REG_R8) -freeReg REG_R8 = False -# endif -# if defined(REG_R9) -freeReg REG_R9 = False -# endif -# if defined(REG_R10) -freeReg REG_R10 = False -# endif -# if defined(REG_F1) -freeReg REG_F1 = False -# endif -# if defined(REG_F2) -freeReg REG_F2 = False -# endif -# if defined(REG_F3) -freeReg REG_F3 = False -# endif -# if defined(REG_F4) -freeReg REG_F4 = False -# endif -# if defined(REG_F5) -freeReg REG_F5 = False -# endif -# if defined(REG_F6) -freeReg REG_F6 = False -# endif -# if defined(REG_D1) -freeReg REG_D1 = False -# endif -# if defined(REG_D2) -freeReg REG_D2 = False -# endif -# if defined(REG_D3) -freeReg REG_D3 = False -# endif -# if defined(REG_D4) -freeReg REG_D4 = False -# endif -# if defined(REG_D5) -freeReg REG_D5 = False -# endif -# if defined(REG_D6) -freeReg REG_D6 = False -# endif # if defined(REG_Sp) freeReg REG_Sp = False # endif -# if defined(REG_Su) -freeReg REG_Su = False -# endif # if defined(REG_SpLim) freeReg REG_SpLim = False # endif @@ -1119,9 +1050,6 @@ freeReg REG_D6_2 = False # if defined(REG_Sp) freeReg REG_Sp = False # endif -# if defined(REG_Su) -freeReg REG_Su = False -# endif # if defined(REG_SpLim) freeReg REG_SpLim = False # endif |