Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions benchmarks/compiler_output/workloads.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1570,16 +1570,27 @@ min_vectorized_loops = 0
scalar_baseline = "allowed: native-owned typed view fixture gates proof records and fallback reasons"
allowed_missed_reason_kinds = [
"call_instruction",
# #8489: three loops here now miss vectorization for `control_flow` on the
# Linux/release configuration this gate runs in (not reproducible on a
# macOS perry-dev build). It is pre-existing — it fails identically on the
# pre-merge baseline 3627657c7 and still fails after #8484 — so it is NOT
# the `extern "C-unwind"` unwind edges. This workload requires no
# vectorization (`min_vectorized_loops = 0`, explicit scalar baseline), so
# the list is a change detector rather than a performance floor, and the
# #8489: three loops here miss vectorization for `control_flow`. ATTRIBUTED
# to 40e2ce86d (#8457, "make -Os the default native optimization level"),
# and it is legitimate rather than a codegen regression: perry's emitted IR
# is byte-identical across that commit (same sha256 at 526e0b502,
# f14a9e262 and 40e2ce86d). Only the clang args changed, -O3 -> -Os, and
# the harness's remark pass reuses the compile's own args. At -Os LLVM
# declines the SimplifyCFG speculation and if-conversion that at -O3
# flattened these branches into selects before the vectorizer ran, so the
# loops genuinely carry control flow it cannot if-convert — and vectorizing
# them would grow code size, which is exactly what -Os asks it not to do.
# This workload requires no vectorization (`min_vectorized_loops = 0`,
# explicit scalar baseline), so this list is a change detector, and the
# sibling `native_abi_packet_control` / `native_pod_layout_constants`
# workloads already accept this reason. Widened to unblock the release
# gate; #8489 stays open to attribute the codegen change that caused it.
# workloads already accept the same reason.
#
# Earlier notes here said Linux-only, release-config, and caused by the
# string-codegen work. All three were wrong: the gate builds with
# `cargo build -p perry` (a DEBUG build, test.yml:1809), it reproduces on
# macOS with that profile, and control_flow=3 predates #8448/#8450/#8453/
# #8454. 40e2ce86d is an ancestor of the 3627657c7 baseline, which is why
# that baseline looked "pre-existing".
"control_flow",
"generic_not_vectorized",
"not_beneficial",
Expand Down
2 changes: 1 addition & 1 deletion changelog.d/8490-vectorization-allow-control-flow.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ci: `native_owned_typed_views` accepts `control_flow` as a missed-vectorization reason (#8489). Three of its loops began reporting that reason on the Linux/release configuration the `compiler-output-regression` gate runs in, failing one of `full-suite-gate`'s required jobs. It is pre-existing (identical on the pre-merge baseline `3627657c7`, and still present after #8484 reverted the `extern "C-unwind"` conversions) and not reproducible on a macOS `perry-dev` build. The workload requires no vectorization — `min_vectorized_loops = 0` with an explicit scalar baseline — so this list is a change detector, and its sibling workloads already accept the same reason. #8489 stays open to attribute the codegen change behind it.
ci: `native_owned_typed_views` accepts `control_flow` as a missed-vectorization reason (#8489). Attributed to `40e2ce86d` (#8457, "make `-Os` the default native optimization level"), and legitimate rather than a codegen regression — perry's emitted IR is byte-identical across that commit, so only the clang args changed (`-O3` → `-Os`), and at `-Os` LLVM declines the SimplifyCFG speculation and if-conversion that previously flattened these branches into selects before the vectorizer. The loops genuinely carry control flow, and vectorizing them would grow code size. The workload requires no vectorization (`min_vectorized_loops = 0` with an explicit scalar baseline), so the list is a change detector, and its sibling workloads already accept the same reason. Corrects the earlier rationale, which recorded three claims that were all false: it is not Linux-only (the gate builds `cargo build -p perry`, a debug build, and it reproduces on macOS with that profile), not release-configuration-specific, and not caused by the string-codegen work (`control_flow=3` predates #8448/#8450/#8453/#8454).
Loading