[GHC] #8903: Add dead store elimination
GHC
ghc-devs at haskell.org
Sun Mar 16 17:22:44 UTC 2014
#8903: Add dead store elimination
------------------------------------+-------------------------------------
Reporter: tibbe | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
We could use some dead store elimination in the code generator. Here's
some Cmm that has redundant stores to the same locations:
{{{
// thawArray#:
I64[Hp - 168] = I64[PicBaseReg + stg_MUT_ARR_PTRS_DIRTY_info at GOTPCREL];
I64[Hp - 160] = 16;
I64[Hp - 152] = 17;
_c2nT::I64 = Hp - 168;
call MO_Memcpy(_c2nT::I64 + 24, _s2cx::P64 + 24, 128, 8);
// writeArray#:
P64[(_c2nT::I64 + 24) + (_s2cy::I64 << 3)] = _s2cE::P64;
I64[_c2nT::I64] = I64[PicBaseReg + stg_MUT_ARR_PTRS_DIRTY_info at GOTPCREL];
I8[(_c2nT::I64 + 24) + ((I64[_c2nT::I64 + 8] << 3) + (_s2cy::I64 >> 7))] =
1 :: W8;
// unsafeFreeze#
I64[_c2nT::I64] = I64[PicBaseReg +
stg_MUT_ARR_PTRS_FROZEN0_info at GOTPCREL];
}}}
There are three stores to the same location (`I64[_c2nT::I64]`).
(There's also one much less obvious double store to another location,
which will probably be much harder to address: the store to
`P64[(_c2nT::I64 + 24) + (_s2cy::I64 << 3)]` overwrites a word previous
written by the `MO_Memcpy`. Getting to that one will be hard as the memcoy
callish !MachOp only gets expanded in the backend.)
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8903>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list