[GHC] #14399: NCG: dead code stripping prevention wastes space
GHC
ghc-devs at haskell.org
Sun Oct 29 14:24:24 UTC 2017
#14399: NCG: dead code stripping prevention wastes space
-------------------------------------+-------------------------------------
Reporter: heisenbug | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.1
Keywords: low-hanging | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
= Symptom
Consider this NCG-generated code:
{{{
.long _T5001a_zdp1Comorphism_info -
_T5001a_zdp1Comorphism_info_dsp
.data
.align 3
.align 0
.globl _T5001a_mapzusentence_closure
_T5001a_mapzusentence_closure:
.quad _T5001a_mapzusentence_info
.text
.align 3
_T5001a_mapzusentence_info_dsp:
.align 3
.quad 4294967301
.quad 0
.quad 14
.globl _T5001a_mapzusentence_info
_T5001a_mapzusentence_info:
}}}
There is an inert `.long` at the end of each Cmm procedure. This fills up
precious instruction cache and wastes space.
= Potential solutions
Some ideas to improve the situation follow:
1. Move all those longs to a "table" at the end of the compilation unit
(idea by Henning Thielemann),
2. coalesce the relocation into the previous instruction by explicitly
calculating the opcode (craziness by me),
3. coalesce the relocation into the following info table like this:
{{{
.quad 4294967301 - 24 + _T5001a_zdp1Comorphism_info -
_T5001a_zdp1Comorphism_info_dsp
}}}
4. Instead of exporting `_T5001a_mapzusentence_info` export
`_T5001a_mapzusentence_info_dsp` and jump/call
`_T5001a_mapzusentence_info_dsp + 24` instead. (Idea by Henning
Thielemann.)
== Discussion
1. Improves instruction cache only
2. hard to implement, leads to ugly assembly
3. wastes a long per compilation unit (at the end), needs a new state in
the assembly writer
4. leads to unintuitive (ugly?) assembly.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14399>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list