Opened 4 years ago

Last modified 2 months ago

#8903 new feature request

Add dead store elimination

Reported by: tibbe Owned by:
Priority: normal Milestone:
Component: Compiler Version: 7.9
Keywords: CodeGen Cc: email@…, michal.terepeta@…, kavon@…
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Runtime performance bug Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:


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@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@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@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.)

Change History (5)

comment:1 Changed 20 months ago by thomie

Type of failure: None/UnknownRuntime performance bug

comment:2 Changed 5 months ago by simonpj

comment:3 Changed 5 months ago by simonpj

Keywords: CodeGen added

comment:4 Changed 2 months ago by srb

Im willing to take this on, although I still haven't fully wrapped my head around Hoopl. If it's OK for me to have a go, I would appreciate it if I could have some advice on a few issues:

1) This proposed analysis seems quite similar to what's being done in CmmLive/CmmSink. Would it be worthwhile to incorporate it into those passes?

2) The liveness analysis is also used for inlining assignments which are used once, propagating constants, and pushing down assigments. Is it a good idea to do the same thing with stores?

Thanks, Sean

Last edited 2 months ago by srb (previous) (diff)

comment:5 Changed 2 months ago by simonpj

Cc: email@… michal.terepeta@… kavon@… added

cc'ing folk interested in Hoopl, who may be able to help.

Note: See TracTickets for help on using tickets.