2022-07-19 Triage Log

A rather rough week for compiler performance with regressions outweighing improvements by a considerable margin, in particular in real world crates. To add insult to injury, the biggest regressions came in rollups which make it difficult to trace the cause.

Triage done by @rylev. Revision range: b3f4c3119957aa0a250cab08ab586b7a9a680ef1..8bd12e8cca3f28f302b9cc0f1f47bb64bd1f98fd

Summary:

meanmaxcount
Regressions 😿
(primary)
1.5%4.0%176
Regressions 😿
(secondary)
1.8%6.4%147
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-1.6%-4.1%9
All πŸ˜ΏπŸŽ‰ (primary)1.5%4.0%176

7 Regressions, 5 Improvements, 3 Mixed; 4 of them in rollups 48 artifact comparisons made in total

Regressions

Rollup of 6 pull requests #99177 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
0.5%0.6%9
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)N/AN/A0
  • Relatively small regression in secondary benchmarks. Nothing stands out as an obvious culprit, so we can mark as triaged.

Pull Derefer before ElaborateDrops #98145 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.5%0.8%13
Regressions 😿
(secondary)
0.7%1.1%20
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.5%0.8%13
  • Slowdowns are happening in MIR borrow checking which this PR directly changes, so regressions are not surprising.
  • An issue should be opened to look into whether this can be improved.
  • A comment was left asking for a follow up.

Rollup of 5 pull requests #99210 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
2.6%4.5%7
Regressions 😿
(secondary)
1.6%4.1%55
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)2.6%4.5%7
  • Seems the issue comes from calling an LLVM API more often due to needing to have unstable feature information kept around longer for use with the asm! macro.
  • Ran a cachegrind diff and found that the likely culprit is #99155 calling LLVMRustHasFeature more often.
  • Left a comment asking for a follow up.

Rollup of 5 pull requests #99231 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
1.2%3.2%117
Regressions 😿
(secondary)
1.7%6.4%35
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-0.3%-0.3%1
All πŸ˜ΏπŸŽ‰ (primary)1.2%3.2%117
  • It's very hard to tell which PR might be responsible. Luckily, there are only 5 PRs in total so it should be possible to track the issue down.
  • Left a comment suggesting as much.

Support unstable moves via stable in unstable items #95956 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.5%0.9%13
Regressions 😿
(secondary)
0.6%1.2%10
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.5%0.9%13
  • The change seems to be localized to incremental compilation scenarios.
  • It seems queries like incr_comp_encode_dep_graph are being hit more often. I‘m unsure whether this is simply because of the additional pass that’s happening or something else.
  • Left a comment asking for more insight.

Rollup of 10 pull requests #99346 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.6%2.6%136
Regressions 😿
(secondary)
1.0%5.8%100
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.6%2.6%136

Use ICF (identical code folding) for building rustc #99062 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.3%0.4%2
Regressions 😿
(secondary)
2.6%2.6%3
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)0.3%0.4%2

Improvements

gather body owners #98203 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
0.6%0.6%1
Improvements πŸŽ‰
(primary)
-0.4%-0.7%30
Improvements πŸŽ‰
(secondary)
-0.5%-0.8%18
All πŸ˜ΏπŸŽ‰ (primary)-0.4%-0.7%30

interpret: get rid of MemPlaceMeta::Poison #99013 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
0.5%0.5%1
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-1.6%-2.5%12
All πŸ˜ΏπŸŽ‰ (primary)N/AN/A0

stop using FnCtxt outside of hir typeck #99015 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.6%-0.9%11
Improvements πŸŽ‰
(secondary)
-0.4%-0.6%11
All πŸ˜ΏπŸŽ‰ (primary)-0.6%-0.9%11

Use constant eval to do strict mem::uninit/zeroed validity checks #99033 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
N/AN/A0
Improvements πŸŽ‰
(secondary)
-2.2%-2.9%6
All πŸ˜ΏπŸŽ‰ (primary)N/AN/A0

replace_bound_vars fast path: check predicates, don't check consts #99232 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.6%-0.7%6
Improvements πŸŽ‰
(secondary)
N/AN/A0
All πŸ˜ΏπŸŽ‰ (primary)-0.6%-0.7%6

Mixed

Stop keeping metadata in memory before writing it to disk #96544 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
N/AN/A0
Regressions 😿
(secondary)
0.3%0.4%3
Improvements πŸŽ‰
(primary)
-0.3%-0.3%1
Improvements πŸŽ‰
(secondary)
-4.1%-4.1%2
All πŸ˜ΏπŸŽ‰ (primary)-0.3%-0.3%1
  • The perf here is a wash.

Final derive output improvements #99046 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
0.5%0.6%8
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.6%-0.9%19
Improvements πŸŽ‰
(secondary)
-2.8%-3.7%6
All πŸ˜ΏπŸŽ‰ (primary)-0.2%-0.9%27
  • Improvements much outweigh the regressions as noted here.

proc_macro/bridge: stop using a remote object handle for proc_macro Ident and Literal #98189 (Comparison Link)

meanmaxcount
Regressions 😿
(primary)
1.0%2.2%4
Regressions 😿
(secondary)
N/AN/A0
Improvements πŸŽ‰
(primary)
-0.7%-1.7%19
Improvements πŸŽ‰
(secondary)
-3.0%-3.1%3
All πŸ˜ΏπŸŽ‰ (primary)-0.4%2.2%23
  • Still more improvements than regressions, and this is an active area of performance work as noted here.