Opened 6 years ago

Last modified 2 years 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 4 years ago by thomie

Type of failure: None/UnknownRuntime performance bug

comment:2 Changed 3 years ago by simonpj

comment:3 Changed 3 years ago by simonpj

Keywords: CodeGen added

comment:4 Changed 2 years 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 years ago by srb (previous) (diff)

comment:5 Changed 2 years 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.