Skip to content

Commit a6bd593

Browse files
Merge branch 'main' into fold-transfer-partial-tests
2 parents dd52c87 + 6722331 commit a6bd593

6,992 files changed

Lines changed: 396347 additions & 201640 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
/libcxx/ @llvm/reviewers-libcxx
1616
/libcxxabi/ @llvm/reviewers-libcxxabi
1717
/libunwind/ @llvm/reviewers-libunwind
18-
/runtimes/ @llvm/reviewers-libcxx
1918

2019
/llvm/lib/Analysis/BasicAliasAnalysis.cpp @nikic
2120
/llvm/lib/Analysis/HashRecognize.cpp @artagnon @pfusik

.github/new-prs-labeler.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,7 @@ backend:SPIR-V:
961961
- llvm/test/CodeGen/SPIRV/**
962962
- llvm/test/Frontend/HLSL/**
963963
- llvm/docs/SPIRVUsage.rst
964+
- llvm/tools/spirv-tools/**
964965

965966
mlgo:
966967
- changed-files:

.github/workflows/libc-fullbuild-tests.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,20 @@ jobs:
8888
cpp_compiler: clang++-23
8989
target: armv7em-none-eabi
9090
testing: SKIP
91-
- name: baremetal-armv8m
91+
- name: baremetal-armv8m-softfp
9292
os: ubuntu-24.04
9393
build_type: MinSizeRel
9494
c_compiler: clang-23
9595
cpp_compiler: clang++-23
9696
target: armv8m.main-none-eabi
9797
testing: SKIP
98+
- name: baremetal-armv8m-hard
99+
os: ubuntu-24.04
100+
build_type: MinSizeRel
101+
c_compiler: clang-23
102+
cpp_compiler: clang++-23
103+
target: armv8m.main-none-eabihf
104+
testing: SKIP
98105
- name: baremetal-armv8.1m
99106
os: ubuntu-24.04
100107
build_type: MinSizeRel

.github/workflows/libc-overlay-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
native:
1313
if: github.repository_owner == 'llvm'
1414
name: ${{ matrix.os }} - ${{ matrix.compiler.c_compiler }}
15-
timeout-minutes: 30
15+
timeout-minutes: 60
1616
runs-on: ${{ matrix.os }}
1717
container: ${{ matrix.container || null }}
1818
strategy:

.github/workflows/libcxx-benchmark-commit.yml

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# it requires several inputs that allow customizing its behavior.
44

55
name: "[libc++] Run benchmark suite against commit"
6+
7+
# Keep in sync with libcxx/utils/ci/lnt/dispatch-benchmarks
68
run-name: "[libc++] Run benchmark suite against ${{ inputs.commit }} on ${{ inputs.lnt-machine }}"
79

810
permissions:
@@ -18,15 +20,11 @@ on:
1820
lnt-machine:
1921
description: 'The LNT machine to run the benchmarks on'
2022
required: true
21-
type: choice
22-
options:
23-
- macos-26.5-arm64
24-
- linux-x86_64
23+
type: string
2524
benchmark-suite-version:
2625
description: 'The version of the benchmark suite to use (a LLVM monorepo SHA)'
27-
required: false
26+
required: true
2827
type: string
29-
default: 0eefb2682bf8c04954c46e91916b5164d8424702
3028
filter:
3129
description: 'An optional filter to determine which benchmarks to run'
3230
required: false
@@ -49,33 +47,27 @@ jobs:
4947
outputs:
5048
matrix: ${{ steps.select.outputs.matrix }}
5149
steps:
50+
- name: Checkout the machine definitions
51+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
52+
with:
53+
persist-credentials: false
54+
# Disabling cone mode allows checking out exactly the single file we need.
55+
sparse-checkout: libcxx/utils/ci/lnt/machines.json
56+
sparse-checkout-cone-mode: false
57+
5258
- name: Select the configuration to benchmark on
5359
id: select
5460
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
5561
env:
5662
LNT_MACHINE: ${{ inputs.lnt-machine }}
5763
with:
5864
script: |
59-
const MACHINES = [
60-
{
61-
'lnt-machine': 'macos-26.5-arm64',
62-
runner: ['self-hosted', 'macOS', 'ARM64', '26', '26.5'],
63-
cxx: 'clang++',
64-
'running-on': 'macos',
65-
'xcode-version': '26.5',
66-
},
67-
{
68-
'lnt-machine': 'linux-x86_64',
69-
runner: 'llvm-premerge-libcxx-runners',
70-
cxx: 'clang++-22',
71-
'running-on': 'linux',
72-
},
73-
];
65+
const config = JSON.parse(require('fs').readFileSync('libcxx/utils/ci/lnt/machines.json', 'utf8'));
7466
7567
const requested = process.env.LNT_MACHINE;
76-
const selected = MACHINES.filter(m => m['lnt-machine'] === requested);
68+
const selected = config.filter(cfg => cfg['lnt-machine'] === requested);
7769
if (selected.length === 0) {
78-
const known = MACHINES.map(m => m['lnt-machine']).join(', ');
70+
const known = config.map(cfg => cfg['lnt-machine']).join(', ');
7971
core.setFailed(`Unknown LNT machine '${requested}' (known machines: ${known})`);
8072
return;
8173
}
@@ -125,13 +117,20 @@ jobs:
125117
"${COMPILER}" --version
126118
python3 --version
127119
120+
- name: Setup virtual environment
121+
run: |
122+
python3 -m venv .venv
123+
source .venv/bin/activate
124+
pip install -r libcxx/utils/requirements.txt
125+
128126
- name: Run the benchmarks
129127
env:
130128
COMMIT: ${{ inputs.commit }}
131129
BENCHMARK_SUITE_VERSION: ${{ inputs.benchmark-suite-version }}
132130
FILTER: ${{ inputs.filter }}
133131
LNT_MACHINE: ${{ matrix.lnt-machine }}
134132
run: |
133+
source .venv/bin/activate
135134
filter_arg=()
136135
if [ -n "${FILTER}" ]; then
137136
filter_arg=(--filter "${FILTER}")
@@ -152,6 +151,7 @@ jobs:
152151
COMMIT: ${{ inputs.commit }}
153152
LNT_URL: ${{ inputs.lnt-url }}
154153
run: |
154+
source .venv/bin/activate
155155
libcxx/utils/ci/lnt/submit-benchmarks \
156156
--lnt-url "${LNT_URL}" \
157157
--test-suite libcxx \
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# This file defines a workflow that periodically requests benchmark runs for the commits
2+
# that should have historical performance data but don't yet.
3+
#
4+
# The workflow keeps no state: on every invocation, the commits that should be benchmarked
5+
# are recomputed from Git and the ones that have been benchmarked are recomputed from LNT
6+
# and from the Github Actions API. It then dispatches libcxx-benchmark-commit.yml for the
7+
# difference, within a budget. This makes the system converge towards having data for all
8+
# the desired commits, without necessarily ever reaching that state (as new commits land).
9+
#
10+
# The actual configuration driving this job is in libcxx/utils/ci/lnt/machines.json.
11+
12+
name: "[libc++] Request historical benchmark data"
13+
14+
permissions:
15+
contents: read
16+
17+
on:
18+
schedule:
19+
# Trigger every hour, off the hour boundary to avoid popular times.
20+
- cron: '37 * * * *'
21+
workflow_dispatch:
22+
inputs:
23+
dry-run:
24+
description: 'Report what would be requested, but request nothing'
25+
required: false
26+
type: boolean
27+
default: false
28+
allow-missing-machine:
29+
description: 'Plan for machines that have no data in LNT yet. Needed to seed a new machine.'
30+
required: false
31+
type: boolean
32+
default: false
33+
34+
concurrency:
35+
group: ${{ github.workflow }}
36+
cancel-in-progress: false
37+
38+
jobs:
39+
# Turn the machine definitions stored in libcxx/utils/ci/lnt/machines.json into actual
40+
# dispatch jobs.
41+
select-machines:
42+
if: github.repository_owner == 'llvm'
43+
runs-on: ubuntu-24.04
44+
outputs:
45+
matrix: ${{ steps.select.outputs.matrix }}
46+
steps:
47+
- name: Checkout the machine definitions
48+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
49+
with:
50+
persist-credentials: false
51+
# Disabling cone mode allows checking out exactly the single file we need.
52+
sparse-checkout: libcxx/utils/ci/lnt/machines.json
53+
sparse-checkout-cone-mode: false
54+
55+
- name: Select the machines to request runs for
56+
id: select
57+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
58+
with:
59+
script: |
60+
const config = JSON.parse(require('fs').readFileSync('libcxx/utils/ci/lnt/machines.json', 'utf8'));
61+
core.setOutput('matrix', JSON.stringify(config.map(cfg => ({
62+
machine: cfg['lnt-machine'],
63+
...cfg.coverage,
64+
}))));
65+
66+
request-runs:
67+
permissions:
68+
contents: read
69+
actions: write # to dispatch libcxx-benchmark-commit.yml
70+
needs:
71+
- select-machines
72+
strategy:
73+
matrix:
74+
include: ${{ fromJSON(needs.select-machines.outputs.matrix) }}
75+
fail-fast: false
76+
name: "Request ${{ matrix.machine }}"
77+
runs-on: ubuntu-24.04
78+
timeout-minutes: 30
79+
env:
80+
MACHINE: ${{ matrix.machine }}
81+
SINCE: ${{ matrix.since }}
82+
EVERY: ${{ matrix.every }}
83+
SAMPLES: ${{ matrix.samples }}
84+
MAX_IN_FLIGHT: ${{ matrix.max-in-flight }}
85+
BENCHMARK_SUITE_VERSION: ${{ matrix.benchmark-suite-version }}
86+
LNT_URL: ${{ matrix.lnt-url }}
87+
88+
ALLOW_MISSING_MACHINE: ${{ inputs.allow-missing-machine || 'false' }}
89+
DRY_RUN: ${{ inputs.dry-run || 'false' }}
90+
steps:
91+
- name: Checkout the LLVM monorepo
92+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
93+
with:
94+
persist-credentials: false
95+
# Selecting anchor commits requires full Git history, but not the blob content.
96+
fetch-depth: 0
97+
filter: blob:none
98+
99+
- name: Install Python
100+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
101+
with:
102+
python-version: '3.14'
103+
cache: pip
104+
cache-dependency-path: libcxx/utils/requirements.txt
105+
106+
- name: Install dependencies
107+
run: pip install -r libcxx/utils/requirements.txt
108+
109+
- name: Determine which commits should have benchmark data
110+
run: |
111+
libcxx/utils/ci/lnt/select-anchor-commits --since "${SINCE}" --every "${EVERY}" --output anchors.txt
112+
# Anchor commits go from oldest to newest. Reverse them to prioritize newer commits first.
113+
tac anchors.txt > tmp.txt
114+
mv tmp.txt anchors.txt
115+
116+
- name: Determine which of them are missing from LNT
117+
run: |
118+
allow_missing=()
119+
if [ "${ALLOW_MISSING_MACHINE}" = "true" ]; then
120+
allow_missing=(--allow-missing-machine)
121+
fi
122+
123+
libcxx/utils/ci/lnt/plan-benchmarks --commit-list anchors.txt --lnt-url "${LNT_URL}" --test-suite libcxx \
124+
--machine "${MACHINE}" --samples "${SAMPLES}" "${allow_missing[@]}" \
125+
--output plan.jsonl
126+
127+
- name: Request the missing runs
128+
env:
129+
GITHUB_TOKEN: ${{ github.token }}
130+
run: |
131+
dry_run=()
132+
if [ "${DRY_RUN}" = "true" ]; then
133+
dry_run=(--dry-run)
134+
fi
135+
136+
libcxx/utils/ci/lnt/dispatch-benchmarks --work-items plan.jsonl --test-suite-commit "${BENCHMARK_SUITE_VERSION}" \
137+
--max-in-flight "${MAX_IN_FLIGHT}" --lnt-url "${LNT_URL}" \
138+
--output dispatched.jsonl "${dry_run[@]}"

0 commit comments

Comments
 (0)