diff --git a/triage/2026/2026-07-21.md b/triage/2026/2026-07-21.md
new file mode 100644
index 000000000..d46c6533e
--- /dev/null
+++ b/triage/2026/2026-07-21.md
@@ -0,0 +1,172 @@
+# 2026-07-21 Triage Log
+
+The two most notable changes this week were [#159115](https://github.com/rust-lang/rust/pull/159115),
+which resulted in pretty nice instruction count wins for full incremental builds on several benchmarks,
+and [#159091](https://github.com/rust-lang/rust/pull/159091), which enabled PGO for rustdoc, which
+makes it ~3-4% faster across the board.
+
+There were two large rollups with tiny performance regressions, which made it difficult to find
+the offending PRs.
+
+Triage done by **@Kobzol**.
+Revision range: [5503df87..d527bc9b](https://perf.rust-lang.org/?start=5503df87342a73d0c29126a7e08dc9c1255c46ad&end=d527bc9bfa297ca7fd7f5ae93781eeec42073170&absolute=false&stat=instructions%3Au)
+
+**Summary**:
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | 0.4% | [0.2%, 1.0%] | 40 |
+| Regressions ❌
(secondary) | 0.7% | [0.2%, 4.6%] | 69 |
+| Improvements ✅
(primary) | -2.0% | [-6.2%, -0.2%] | 136 |
+| Improvements ✅
(secondary) | -2.6% | [-8.4%, -0.2%] | 119 |
+| All ❌✅ (primary) | -1.4% | [-6.2%, 1.0%] | 176 |
+
+
+2 Regressions, 3 Improvements, 6 Mixed; 4 of them in rollups
+34 artifact comparisons made in total
+
+#### Regressions
+
+Rollup of 13 pull requests [#159246](https://github.com/rust-lang/rust/pull/159246) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=225e91c03da22cd4b9792b83c1cfc97967101614&end=daf2e5e18b3abc4311d9da3d96fd64138f43d508&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | 0.3% | [0.3%, 0.3%] | 3 |
+| Regressions ❌
(secondary) | 0.3% | [0.2%, 0.5%] | 20 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | -0.6% | [-0.6%, -0.6%] | 1 |
+| All ❌✅ (primary) | 0.3% | [0.3%, 0.3%] | 3 |
+
+- The regressions are tiny, but across the board.
+- Started several performance runs.
+- Not marking as triaged yet.
+
+Shrink `ast::Expr64` [#158720](https://github.com/rust-lang/rust/pull/158720) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=38a0576951fb5f7209c892b030f40ac166ae86b4&end=470556c8c1c21a736c90deea5c70d093ffa4e762&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:----:|:------------:|:-----:|
+| Regressions ❌
(primary) | 0.4% | [0.3%, 0.6%] | 3 |
+| Regressions ❌
(secondary) | 0.6% | [0.3%, 1.3%] | 25 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | - | - | 0 |
+| All ❌✅ (primary) | 0.4% | [0.3%, 0.6%] | 3 |
+
+- This change resulted in instruction count regressions, but cycle count and wall-time wins.
+- Already marked as triaged.
+
+#### Improvements
+
+Rollup of 3 pull requests [#159367](https://github.com/rust-lang/rust/pull/159367) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=ab4bbeb07dc7dc2d30e9f83d3e0326df981e0ee2&end=d62fb1c8a007f6967376a52da8315ae51b64a70c&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | - | - | 0 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | -1.9% | [-2.5%, -1.5%] | 13 |
+| All ❌✅ (primary) | - | - | 0 |
+
+
+Overhaul `CfgTrace`/`CfgAttrTrace` handling [#159266](https://github.com/rust-lang/rust/pull/159266) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=4a9d5368df6450bbd2fc8dde4508c3e5d83bb19d&end=656ccbe796ff98def9b555c118e1620c5389e3b2&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | - | - | 0 |
+| Improvements ✅
(primary) | -0.4% | [-0.6%, -0.2%] | 11 |
+| Improvements ✅
(secondary) | -0.2% | [-0.2%, -0.2%] | 1 |
+| All ❌✅ (primary) | -0.4% | [-0.6%, -0.2%] | 11 |
+
+
+Get rid of `StructurallyRelateAliases` [#158731](https://github.com/rust-lang/rust/pull/158731) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=14ead7d3d509f50efe9afb84673e65885dfd4d07&end=9e71b3bc704eea68d39bd0f6a46703c7d22f5d3b&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | - | - | 0 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | -1.4% | [-4.7%, -0.2%] | 24 |
+| All ❌✅ (primary) | - | - | 0 |
+
+
+#### Mixed
+
+Eagerly check for ambiguity in macro parsing [#158976](https://github.com/rust-lang/rust/pull/158976) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=da80ed0708a09dc096c184345d6eb42cbcd50a1e&end=2f5253f0087ee60faab7dbe7c9002163c605ac7e&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | 0.3% | [0.2%, 0.4%] | 10 |
+| Improvements ✅
(primary) | -0.9% | [-2.3%, -0.3%] | 29 |
+| Improvements ✅
(secondary) | -0.6% | [-0.9%, -0.4%] | 5 |
+| All ❌✅ (primary) | -0.9% | [-2.3%, -0.3%] | 29 |
+
+- More wins than regressions.
+- Already marked as triaged.
+
+Rollup of 22 pull requests [#159293](https://github.com/rust-lang/rust/pull/159293) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=2f5253f0087ee60faab7dbe7c9002163c605ac7e&end=38a0576951fb5f7209c892b030f40ac166ae86b4&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | 0.5% | [0.2%, 0.8%] | 13 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | -0.3% | [-0.3%, -0.2%] | 2 |
+| All ❌✅ (primary) | - | - | 0 |
+
+- There seems to be a very tiny regression across the board, which is a bit larger (but still small) on some secondary benchmarks.
+- The `wg-grammar` tiny regression was likely caused by [#158993](https://github.com/rust-lang/rust/pull/158993).
+- Marked as triaged.
+
+Rollup of 2 pull requests [#159350](https://github.com/rust-lang/rust/pull/159350) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=2118366bbfe2e57ec0e8417ea270833e9f013640&end=d0babd8b6b05ef9bb65d42f928cef4129d64cf65&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | 0.3% | [0.2%, 0.5%] | 7 |
+| Regressions ❌
(secondary) | 0.3% | [0.2%, 0.5%] | 26 |
+| Improvements ✅
(primary) | -0.8% | [-0.9%, -0.8%] | 4 |
+| Improvements ✅
(secondary) | -2.9% | [-5.1%, -0.7%] | 2 |
+| All ❌✅ (primary) | -0.1% | [-0.9%, 0.5%] | 11 |
+
+- Small regression caused by standard library dependency upgrades in [#159345](https://github.com/rust-lang/rust/pull/159345).
+- Already marked as triaged.
+
+Move fast paths around to gain a bit of new-solver perf [#158249](https://github.com/rust-lang/rust/pull/158249) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=d62fb1c8a007f6967376a52da8315ae51b64a70c&end=a6050b7ea848e25289bf097c606e0611c58ef4f3&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | 1.2% | [0.2%, 2.2%] | 11 |
+| Improvements ✅
(primary) | - | - | 0 |
+| Improvements ✅
(secondary) | -5.1% | [-8.4%, -1.5%] | 6 |
+| All ❌✅ (primary) | - | - | 0 |
+
+- Only affects the next trait solver. Some benchmarks regressed, but there are larger wins.
+- Marked as triaged.
+
+Use PGO for rustdoc [#159091](https://github.com/rust-lang/rust/pull/159091) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=421875f8d2bbb9a9a47db179092a3266b87106d4&end=b6839f4d0e2bd63b960bbff8619c6fdea27d81e5&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | - | - | 0 |
+| Regressions ❌
(secondary) | 4.5% | [4.5%, 4.5%] | 1 |
+| Improvements ✅
(primary) | -4.1% | [-6.3%, -1.6%] | 20 |
+| Improvements ✅
(secondary) | -5.1% | [-8.1%, -2.0%] | 23 |
+| All ❌✅ (primary) | -4.1% | [-6.3%, -1.6%] | 20 |
+
+- Many wins on `doc` benchmarks, expectedly, as this PR enabled PGO for rustdoc.
+- Only one regression on a secondary benchmark.
+- Marked as triaged.
+
+perf: dep_graph: deduplicate task reads with an epoch-filtered index recorder [#159115](https://github.com/rust-lang/rust/pull/159115) [(Comparison Link)](https://perf.rust-lang.org/compare.html?start=c904ba32e22c9d6fd31140b4283c5cc6c6b2fb5c&end=c7d7da3428c0e8b261e1ce1687e7228cf053cc62&stat=instructions:u)
+
+| (instructions:u) | mean | range | count |
+|:----------------------------------:|:-----:|:--------------:|:-----:|
+| Regressions ❌
(primary) | 0.3% | [0.1%, 0.5%] | 11 |
+| Regressions ❌
(secondary) | 0.2% | [0.2%, 0.3%] | 4 |
+| Improvements ✅
(primary) | -1.8% | [-6.4%, -0.3%] | 101 |
+| Improvements ✅
(secondary) | -1.5% | [-4.9%, -0.1%] | 96 |
+| All ❌✅ (primary) | -1.6% | [-6.4%, 0.5%] | 112 |
+
+- A lot of big wins, and only a few tiny regressions.
+- Marked as triaged.