Skip to content

Commit c782f56

Browse files
committed
linux-amd64: park -fbasic-block-sections=all until Propeller ships
Per-BB sections only pay off when paired with a Propeller-style symbol- ordering file at the consumer's final link; without that the flag is pure overhead (codesize growth + per-block section relocations). Move to labs.disabled.txt and re-enable once we're sure we ship Propeller in the linux-amd64 pipeline. Note that the `=all` form is x86-ELF-only, so when re-enabled the flag belongs in linux-amd64.txt, not linux.txt.
1 parent f7ba0d2 commit c782f56

2 files changed

Lines changed: 19 additions & 12 deletions

File tree

labs.disabled.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,14 @@
6464
# when the linux-amd64 deployment floor moves to Tiger Lake+ / Zen 4+
6565
# and the userspace runtime contract is ready to require CET support.
6666
-fcf-protection=full
67+
#
68+
# Per-basic-block sections — prerequisite for a Propeller-style
69+
# symbol-ordering pass at the consumer's final link, where hot blocks
70+
# get reordered across function boundaries to shrink the icache
71+
# working set. Without the ordering file the flag is pure overhead
72+
# (codesize growth + per-block section relocations), so we keep it
73+
# disabled until Propeller is actually wired into the linux-amd64
74+
# pipeline. clang's `=all` form is x86 ELF only — AArch64 clang
75+
# rejects `all`, darwin clang doesn't implement BB sections — so when
76+
# re-enabled it belongs in linux-amd64.txt, not linux.txt.
77+
-fbasic-block-sections=all

linux-amd64.txt

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,11 @@
4444
# linux-amd64 deployment floor moves to Tiger Lake+ / Zen 4+ and the
4545
# userspace runtime contract is ready to require CET support.
4646

47-
# Emit per-basic-block sections so a future Propeller pass can feed a
48-
# symbol-ordering file into the linker and reorder hot blocks across
49-
# function boundaries. Without that ordering file the linker keeps
50-
# blocks in source order and the flag is overhead, but the per-BB
51-
# sections are a prerequisite for Propeller, so we eat the cost now to
52-
# avoid a rebuild-the-world later.
53-
#
54-
# clang's `=all` form is gated to x86 ELF; AArch64 clang on Alpine
55-
# rejects `all` ('invalid value all') even though it accepts `=labels`.
56-
# Darwin's clang doesn't implement BB sections at all. Pinning this to
57-
# linux-amd64 avoids both failure modes.
58-
-fbasic-block-sections=all
47+
# NOTE: -fbasic-block-sections=all is parked in labs.disabled.txt.
48+
# Per-BB sections only pay off when paired with a Propeller-style
49+
# symbol-ordering file at the consumer's final link; without that the
50+
# flag is pure overhead (codesize growth + per-block section relocation
51+
# noise). Re-enable here once we are sure we ship Propeller in the
52+
# linux-amd64 pipeline. The flag is x86-ELF-only — AArch64 clang rejects
53+
# `=all` and darwin clang doesn't implement BB sections — so it stays
54+
# scoped to linux-amd64 when re-enabled.

0 commit comments

Comments
 (0)