Skip to content

Perf: fix strictness in OccurAnal (#19989)

Sylvain Henry requested to merge hsyl20/ghc:hsyl20/perf-occur-anal into master
Perf: fix strictness in OccurAnal

This patch enhances OccurAnal perf by using a dedicated WithUsageDetails
datatype instead of a tuple (similarly to what has been done in
demand-analysis) with strict fields.

OccEnv is also passed strictly with more strict fields as it improves
results even more.

Perf results on x86-64/Linux:

  -0.1     T11545              compile_time/bytes allocated
   0.2     T1969               compile_time/max_bytes_used
  -0.2     T13719              compile_time/bytes allocated
  -0.3     hie002              compile_time/bytes allocated
  -0.3     T18223              compile_time/bytes allocated
  -0.3     T14683              compile_time/bytes allocated
  -0.3     MultiLayerModules   compile_time/bytes allocated
  -0.3     T12545              compile_time/bytes allocated
  -0.3     T3294               compile_time/bytes allocated
  -0.4     MultiLayerModulesRecompcompile_time/bytes allocated
  -0.4     T9872d              compile_time/bytes allocated
   0.4     T4029               runtime/max_bytes_used
  -0.5     T16190              compile_time/bytes allocated
   0.5     T3294               compile_time/max_bytes_used
  -0.6     T5030               compile_time/bytes allocated
  -0.6     T14697              compile_time/bytes allocated
  -0.6     T17836              compile_time/bytes allocated
  -0.6     T10370              compile_time/max_bytes_used
  -0.7     T13701              compile_time/bytes allocated
  -0.7     T18698b             compile_time/max_bytes_used
   0.8     T3064               compile_time/max_bytes_used
   0.9     T9630               compile_time/max_bytes_used
  -0.9     T14052              compile_time/bytes allocated
   0.9     T9630               compile_time/peak_megabytes_allocated
  -1.0     T3064               compile_time/bytes allocated
  -1.0     T5631               compile_time/bytes allocated
   1.0     T10370              compile_time/peak_megabytes_allocated
  -1.0     T15630              compile_time/max_bytes_used
   1.1     T3294               compile_time/peak_megabytes_allocated
  -1.3     T18478              compile_time/bytes allocated
  -1.3     T13379              compile_time/bytes allocated
  -1.3     T12227              compile_time/bytes allocated
  -1.5     T11374              compile_time/bytes allocated
  -1.5     PmSeriesT           compile_time/bytes allocated
  -1.5     T17836b             compile_time/bytes allocated
  -1.5     PmSeriesS           compile_time/bytes allocated
  -1.5     PmSeriesV           compile_time/bytes allocated
  -1.5     T11195              compile_time/bytes allocated
  -1.6     T11276              compile_time/bytes allocated
  -1.6     T11822              compile_time/bytes allocated
  -1.6     T12707              compile_time/bytes allocated
  -1.6     T9198               compile_time/bytes allocated
   1.6     T1969               compile_time/peak_megabytes_allocated
  -1.6     T5321Fun            compile_time/bytes allocated
  -1.7     T17096              compile_time/bytes allocated
  -1.7     T783                compile_time/bytes allocated
  -1.8     T5321FD             compile_time/bytes allocated
  -1.8     ManyAlternatives    compile_time/bytes allocated
  -1.9     T17977              compile_time/bytes allocated
  -1.9     T11303b             compile_time/bytes allocated
  -1.9     T17977b             compile_time/bytes allocated
  -1.9     T5837               compile_time/bytes allocated
  -2.0     T10547              compile_time/bytes allocated
  -2.0     PmSeriesG           compile_time/bytes allocated
  -2.1     T18698b             compile_time/bytes allocated
  -2.1     T18140              compile_time/bytes allocated
  -2.2     T10858              compile_time/bytes allocated
  -2.3     T18698a             compile_time/bytes allocated
  -2.3     T9675               compile_time/max_bytes_used
  -2.4     T13035              compile_time/bytes allocated
  -2.4     T18698b             compile_time/peak_megabytes_allocated
  -2.6     T18923              compile_time/bytes allocated
  -2.6     T6048               compile_time/bytes allocated
  -2.6     T1969               compile_time/bytes allocated
  -2.8     WWRec               compile_time/bytes allocated
  -3.0     T5642               compile_time/bytes allocated
  -3.0     T10421a             compile_time/bytes allocated
  -3.1     ManyConstructors    compile_time/bytes allocated
  -3.1     T4801               compile_time/bytes allocated
  -3.1     T10421              compile_time/bytes allocated
  -3.1     T9630               compile_time/bytes allocated
  -3.2     T18304              compile_time/bytes allocated
  -3.2     T12234              compile_time/bytes allocated
  -3.3     T13253-spj          compile_time/bytes allocated
  -3.5     T9675               compile_time/bytes allocated
  -3.5     T18282              compile_time/bytes allocated
  -3.5     T9020               compile_time/bytes allocated
  -3.6     T15630              compile_time/bytes allocated
  -3.7     T15164              compile_time/bytes allocated
  -3.8     T9233               compile_time/bytes allocated
  -3.8     T13253              compile_time/bytes allocated
  -4.0     T17516              compile_time/bytes allocated
  -4.1     T12425              compile_time/bytes allocated
  -4.1     T16577              compile_time/bytes allocated
  -4.6     T13056              compile_time/bytes allocated
  -5.0     T15304              compile_time/bytes allocated
  -5.3     T9961               compile_time/bytes allocated
  -6.2     T12150              compile_time/bytes allocated
Edited by Sylvain Henry

Merge request reports