Opened 16 months ago

Closed 16 months ago

Last modified 16 months ago

#7796 closed bug (fixed)

improve dead code elimination in CorePrep

Reported by: nfrisby Owned by: nfrisby
Priority: normal Milestone:
Component: Compiler Version: 7.6.2
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Difficulty: Unknown
Test Case: simplCore/should_compile/T7796 Blocked By:
Blocking: Related Tickets: #4962 #5433

Description (last modified by simonpj)

#4962 is about generating code for (and allocating at runtime!) bindings that are kept alive only by RULEs even though the RULEs are useless downstream of .hi file generation.

Simon Marlow's patch for #5433 switched to a custom dead code eliminator, since the "(case) binder swap" in OccurAnal was creating breaking some code generator invariants.

However, that custom dead code generator doesn't do a dependency analysis, so a letrec like this

let f = [g] \r [...] -> ...
    g = [g] \r [...] -> ...
in ... g ...

is sent to the code generator without dropping f.

A patch to use a dependency analysis in CorePrep's dead code eliminator improves allocation for several nofib programs (largest: cryptarithm2, knights, fem).

            Min          -0.0%     -4.2%     -7.7%     -7.7%     -5.9%
            Max          +0.0%     +0.0%     +4.3%     +4.3%    +14.3%
 Geometric Mean          -0.0%     -0.1%     -0.2%     -0.2%     +0.2%

Change History (4)

comment:1 Changed 16 months ago by nfrisby

SPJ suggested it'd be simpler to parameterize the occurrence analyser to disable the binder swap. I'm validating that patch now.

comment:2 Changed 16 months ago by nicolas.frisby@…

commit c7d80c6524390551b64e9c1d651e1a03ed3c7617

Author: Nicolas Frisby <>
Date:   Wed Mar 27 20:25:28 2013 +0000

    improve dead code elimination in CorePrep (fixes #7796)

 compiler/coreSyn/CorePrep.lhs    |   72 ++++++--------------------------------
 compiler/simplCore/OccurAnal.lhs |   38 +++++++++++++-------
 2 files changed, 36 insertions(+), 74 deletions(-)

comment:3 Changed 16 months ago by nfrisby

  • Resolution set to fixed
  • Status changed from new to closed

I added the test case simplCore/should_compile/T7796 to test for this.

For whatever reason, my "Test Case:" box on this form is greyed out... harumph.

comment:4 Changed 16 months ago by simonpj

  • Description modified (diff)
  • Difficulty set to Unknown
  • Test Case set to simplCore/should_compile/T7796
Note: See TracTickets for help on using tickets.