Skip to content

feat(llvm)!: Upgrade to LLVM 21#2901

Merged
cgh-qtnm merged 32 commits intomainfrom
george/llvmup
Mar 9, 2026
Merged

feat(llvm)!: Upgrade to LLVM 21#2901
cgh-qtnm merged 32 commits intomainfrom
george/llvmup

Conversation

@cgh-qtnm
Copy link
Copy Markdown
Contributor

@cgh-qtnm cgh-qtnm commented Feb 25, 2026

BREAKING CHANGE: This PR upgrades the Inkwell LLVM version flag to llvm21-1 from llvm14-0 (tested with LLVM version 21.1.8). The primary breakage between these versions is the removal of typed pointers from LLVM IR. It also updates the hugr MSRV to 1.91 to avoid mysterious errors when linking the new llvm_sys with older toolchains.

Details

  • Builder functions to create loads and GEPs now need a separate type argument (they used to infer the type from the pointer).
  • The CallableValue trait was removed from Inkwell. Invocations of function pointers are now constructed using a separate build_indirect_call method which takes the function signature as a separate argument.
  • Pointer-to-pointer casts are now superfluous and have been removed.
  • The current code often uses typed pointers as the representative types for collections and aggregate types (e.g., StaticArrayCodegen::static_array_type returns the type "pointer to static_array<T>"). These pointers no longer carry type information, but are still used to determine the size in memory of a reference to these types. When type information is needed we acquire it elsewhere.
  • Similarly, the TypingSession currently maps HUGR function types to function pointers. After the upgrade, it now maps all function types to the opaque pointer type. This is unintuitive, but seems to work currently, because the output of the type mapping is only used to determine size in memory of a reference to function types (so the pointer type is correct). If this changes in future, we may need to introduce separate APIs to query the "storage type" and "underlying type" of a function.
  • After the upgrade, one JITed test case returns an incorrect value when called using ExecutionEngine::run_function. The same IR returns the correct value if called using a raw function pointer returned by ExecutionEngine::get_function. For that reason, I have changed TestContext::exec_hugr to use the raw pointer method for all JITed tests. This also requires being more specific (and accurate) about the return types of some JITed test functions.

Tip for reviewers

Screenshot 2026-02-27 at 12 20 32 PM

Closes #2886

@codecov
Copy link
Copy Markdown

codecov bot commented Feb 25, 2026

Codecov Report

❌ Patch coverage is 60.36036% with 88 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.78%. Comparing base (d503db7) to head (a4598d4).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...ugr-llvm/src/extension/collections/borrow_array.rs 52.50% 1 Missing and 37 partials ⚠️
hugr-llvm/src/extension/collections/array.rs 60.75% 0 Missing and 31 partials ⚠️
hugr-llvm/src/extension/int.rs 50.00% 0 Missing and 7 partials ⚠️
...ugr-llvm/src/extension/collections/static_array.rs 66.66% 1 Missing and 5 partials ⚠️
hugr-llvm/src/emit/ops.rs 0.00% 0 Missing and 2 partials ⚠️
hugr-llvm/src/emit/libc.rs 66.66% 0 Missing and 1 partial ⚠️
hugr-llvm/src/emit/test.rs 83.33% 0 Missing and 1 partial ⚠️
hugr-llvm/src/extension/collections/list.rs 85.71% 0 Missing and 1 partial ⚠️
hugr-llvm/src/extension/prelude.rs 75.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2901      +/-   ##
==========================================
- Coverage   83.78%   83.78%   -0.01%     
==========================================
  Files         267      267              
  Lines       52995    52975      -20     
  Branches    46934    46914      -20     
==========================================
- Hits        44401    44384      -17     
- Misses       6314     6320       +6     
+ Partials     2280     2271       -9     
Flag Coverage Δ
python 88.74% <ø> (ø)
rust 83.14% <60.36%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@hugrbot
Copy link
Copy Markdown
Collaborator

hugrbot commented Feb 25, 2026

This PR contains breaking changes to the public Rust API.

cargo-semver-checks summary
    Building hugr v0.25.7 (current)
error: running cargo-doc on crate 'hugr' failed with output:
-----
 Compiling proc-macro2 v1.0.106
 Compiling quote v1.0.45
 Compiling unicode-ident v1.0.24
 Compiling libc v0.2.183
 Compiling serde_core v1.0.228
 Compiling shlex v1.3.0
 Compiling find-msvc-tools v0.1.9
 Compiling serde v1.0.228
 Compiling memchr v2.8.0
 Compiling jobserver v0.1.34
 Compiling semver v1.0.27
 Compiling cc v1.2.56
 Compiling syn v2.0.117
 Compiling autocfg v1.5.0
 Compiling num-traits v0.2.19
  Checking once_cell v1.21.3
  Checking equivalent v1.0.2
  Checking hashbrown v0.16.1
 Compiling pkg-config v0.3.32
 Compiling anyhow v1.0.102
 Compiling zstd-sys v2.0.16+zstd.1.5.7
 Compiling serde_derive v1.0.228
  Checking indexmap v2.13.0
  Checking either v1.15.0
 Compiling thiserror v2.0.18
 Compiling ucd-trie v0.1.7
 Compiling strsim v0.11.1
 Compiling ident_case v1.0.1
 Compiling fnv v1.0.7
 Compiling pest v2.8.6
 Compiling darling_core v0.21.3
 Compiling thiserror-impl v2.0.18
  Checking foldhash v0.1.5
 Compiling typeid v1.0.3
 Compiling version_check v0.9.5
 Compiling radium v0.7.0
 Compiling zmij v1.0.21
 Compiling unicode-segmentation v1.12.0
 Compiling slotmap_fork_lmondada v1.0.8
 Compiling convert_case v0.10.0
  Checking hashbrown v0.15.5
 Compiling darling_macro v0.21.3
 Compiling pest_meta v2.8.6
 Compiling ref-cast v1.0.25
 Compiling serde_json v1.0.149
  Checking pin-project-lite v0.2.17
  Checking fixedbitset v0.5.7
  Checking tap v1.0.1
 Compiling winnow v0.7.15
 Compiling zstd-safe v7.2.4
 Compiling thiserror v1.0.69
 Compiling erased-serde v0.4.10
 Compiling unicode-xid v0.2.6
 Compiling lazy_static v1.5.0
  Checking itoa v1.0.17
 Compiling regex-lite v0.1.9
 Compiling derive_more-impl v2.1.1
 Compiling toml_parser v1.0.9+spec-1.1.0
  Checking wyz v0.5.1
  Checking petgraph v0.8.3
 Compiling llvm-sys v211.0.0
 Compiling pest_generator v2.8.6
 Compiling darling v0.21.3
  Checking itertools v0.14.0
 Compiling ref-cast-impl v1.0.25
 Compiling thiserror-impl v1.0.69
 Compiling serde_derive_internals v0.29.1
  Checking aho-corasick v1.1.4
 Compiling rustc_version v0.4.1
  Checking byteorder v1.5.0
 Compiling convert_case v0.4.0
 Compiling rustix v1.1.4
  Checking arrayvec v0.5.2
 Compiling typetag v0.2.21
  Checking unicode-width v0.2.2
  Checking funty v2.0.0
 Compiling regex-syntax v0.8.10
 Compiling cgmath v0.18.0
 Compiling heck v0.5.0
 Compiling toml_datetime v1.0.0+spec-1.1.0
 Compiling getrandom v0.4.2
  Checking typed-arena v2.0.2
  Checking regex-automata v0.4.14
 Compiling toml_edit v0.25.4+spec-1.1.0
  Checking pretty v0.12.5
 Compiling strum_macros v0.28.0
  Checking bitvec v1.0.1
 Compiling derive_more v0.99.20
  Checking fxhash v0.2.1
 Compiling rstest_macros v0.26.1
 Compiling schemars_derive v1.2.1
  Checking derive_more v2.1.1
 Compiling serde_with_macros v3.17.0
 Compiling pest_derive v2.8.6
  Checking ordered-float v5.1.0
  Checking itertools v0.13.0
  Checking approx v0.4.0
 Compiling delegate v0.13.5
 Compiling derive-where v1.6.0
 Compiling tracing-attributes v0.1.31
 Compiling typetag-impl v0.2.21
  Checking tracing-core v0.1.36
  Checking smol_str v0.3.6
  Checking rustc-hash v2.1.1
  Checking bumpalo v3.20.2
  Checking capnp v0.25.1
  Checking ryu v1.0.23
  Checking linux-raw-sys v0.12.1
  Checking unsafe-libyaml v0.2.11
  Checking base64 v0.22.1
  Checking bitflags v2.11.0
  Checking smallvec v1.15.1
  Checking inventory v0.3.22
  Checking utf8-width v0.1.8
  Checking cfg-if v1.0.4
  Checking dyn-clone v1.0.20
  Checking schemars v1.2.1
  Checking html-escape v0.2.13
  Checking hugr-model v0.25.7 (/home/runner/work/hugr/hugr/PR_BRANCH/hugr-model)
  Checking portgraph v0.15.3
  Checking serde_yaml v0.9.34+deprecated
 Compiling enum_dispatch v0.3.13
  Checking relrc v0.5.0
  Checking tracing v0.1.44
  Checking serde_with v3.17.0
  Checking zstd v0.13.3
  Checking strum v0.28.0
 Compiling regex v1.12.3
 Compiling proc-macro-crate v3.5.0
 Compiling futures-macro v0.3.32
  Checking static_assertions v1.1.0
  Checking downcast-rs v2.0.2
  Checking slab v0.4.12
 Compiling glob v0.3.3
 Compiling inkwell v0.8.0
 Compiling pastey v0.2.1
  Checking futures-core v0.3.32
  Checking fastrand v2.3.0
  Checking futures-task v0.3.32
 Compiling relative-path v1.9.3
  Checking hugr-core v0.25.7 (/home/runner/work/hugr/hugr/PR_BRANCH/hugr-core)
  Checking tempfile v3.26.0
  Checking futures-util v0.3.32
error: No suitable version of LLVM was found system-wide or pointed
            to by LLVM_SYS_211_PREFIX.
     
            Consider using `llvmenv` to compile an appropriate copy of LLVM, and
            refer to the llvm-sys documentation for more information.
     
            llvm-sys: https://crates.io/crates/llvm-sys
            llvmenv: https://crates.io/crates/llvmenv
 --> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/llvm-sys-211.0.0/src/lib.rs:532:1
  |
532 | / std::compile_error!(concat!(
533 | |     "No suitable version of LLVM was found system-wide or pointed
534 | |        to by LLVM_SYS_",
535 | |     env!("CARGO_PKG_VERSION_MAJOR"),
...   |
542 | |        llvmenv: https://crates.io/crates/llvmenv"
543 | | ));
  | |__^

error: could not compile `llvm-sys` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

-----

error: failed to build rustdoc for crate hugr v0.25.7
note: this is usually due to a compilation error in the crate,
    and is unlikely to be a bug in cargo-semver-checks
note: the following command can be used to reproduce the error:
    cargo new --lib example &&
        cd example &&
        echo '[workspace]' >> Cargo.toml &&
        cargo add --path /home/runner/work/hugr/hugr/PR_BRANCH/hugr --features declarative,default,hugr-llvm,hugr-persistent,llvm,llvm-test,persistent_unstable,zstd &&
        cargo check &&
        cargo doc

  Building hugr-cli v0.25.7 (current)
     Built [  19.292s] (current)
   Parsing hugr-cli v0.25.7 (current)
    Parsed [   0.005s] (current)
  Building hugr-cli v0.25.7 (baseline)
     Built [  18.954s] (baseline)
   Parsing hugr-cli v0.25.7 (baseline)
    Parsed [   0.006s] (baseline)
  Checking hugr-cli v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.016s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  40.007s] hugr-cli
  Building hugr-core v0.25.7 (current)
     Built [  14.933s] (current)
   Parsing hugr-core v0.25.7 (current)
    Parsed [   0.083s] (current)
  Building hugr-core v0.25.7 (baseline)
     Built [  14.409s] (baseline)
   Parsing hugr-core v0.25.7 (baseline)
    Parsed [   0.075s] (baseline)
  Checking hugr-core v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.211s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  30.903s] hugr-core
  Building hugr-llvm v0.25.7 (current)
error: running cargo-doc on crate 'hugr-llvm' failed with output:
-----
 Compiling proc-macro2 v1.0.106
 Compiling unicode-ident v1.0.24
 Compiling quote v1.0.45
 Compiling serde_core v1.0.228
 Compiling serde v1.0.228
 Compiling memchr v2.8.0
 Compiling semver v1.0.27
 Compiling autocfg v1.5.0
 Compiling shlex v1.3.0
 Compiling num-traits v0.2.19
 Compiling anyhow v1.0.102
 Compiling libc v0.2.183
  Checking once_cell v1.21.3
 Compiling syn v2.0.117
 Compiling find-msvc-tools v0.1.9
 Compiling cc v1.2.56
 Compiling serde_derive v1.0.228
 Compiling thiserror v2.0.18
 Compiling strsim v0.11.1
  Checking hashbrown v0.16.1
 Compiling ucd-trie v0.1.7
 Compiling fnv v1.0.7
 Compiling ident_case v1.0.1
  Checking equivalent v1.0.2
  Checking either v1.15.0
  Checking indexmap v2.13.0
 Compiling darling_core v0.21.3
 Compiling pest v2.8.6
 Compiling thiserror-impl v2.0.18
 Compiling typeid v1.0.3
 Compiling regex-lite v0.1.9
  Checking foldhash v0.1.5
 Compiling unicode-segmentation v1.12.0
 Compiling lazy_static v1.5.0
 Compiling winnow v0.7.15
 Compiling zmij v1.0.21
 Compiling version_check v0.9.5
 Compiling radium v0.7.0
 Compiling slotmap_fork_lmondada v1.0.8
 Compiling toml_parser v1.0.9+spec-1.1.0
 Compiling llvm-sys v211.0.0
 Compiling convert_case v0.10.0
  Checking hashbrown v0.15.5
 Compiling pest_meta v2.8.6
 Compiling darling_macro v0.21.3
 Compiling rustc_version v0.4.1
 Compiling aho-corasick v1.1.4
 Compiling thiserror v1.0.69
  Checking pin-project-lite v0.2.17
 Compiling getrandom v0.4.2
 Compiling erased-serde v0.4.10
  Checking tap v1.0.1
 Compiling rustix v1.1.4
 Compiling regex-syntax v0.8.10
 Compiling serde_json v1.0.149
 Compiling ref-cast v1.0.25
 Compiling toml_datetime v1.0.0+spec-1.1.0
 Compiling unicode-xid v0.2.6
  Checking fixedbitset v0.5.7
 Compiling toml_edit v0.25.4+spec-1.1.0
 Compiling derive_more-impl v2.1.1
  Checking petgraph v0.8.3
 Compiling regex-automata v0.4.14
  Checking wyz v0.5.1
 Compiling darling v0.21.3
 Compiling rstest_macros v0.26.1
 Compiling pest_generator v2.8.6
  Checking itertools v0.14.0
 Compiling thiserror-impl v1.0.69
 Compiling ref-cast-impl v1.0.25
 Compiling serde_derive_internals v0.29.1
  Checking unicode-width v0.2.2
 Compiling typetag v0.2.21
 Compiling cgmath v0.18.0
  Checking funty v2.0.0
  Checking itoa v1.0.17
  Checking linux-raw-sys v0.12.1
  Checking byteorder v1.5.0
  Checking cfg-if v1.0.4
 Compiling convert_case v0.4.0
  Checking bitflags v2.11.0
  Checking arrayvec v0.5.2
 Compiling heck v0.5.0
  Checking typed-arena v2.0.2
 Compiling strum_macros v0.28.0
  Checking derive_more v2.1.1
  Checking pretty v0.12.5
 Compiling derive_more v0.99.20
  Checking fxhash v0.2.1
  Checking bitvec v1.0.1
 Compiling schemars_derive v1.2.1
 Compiling pest_derive v2.8.6
 Compiling regex v1.12.3
 Compiling serde_with_macros v3.17.0
 Compiling proc-macro-crate v3.5.0
  Checking ordered-float v5.1.0
  Checking smol_str v0.3.6
  Checking itertools v0.13.0
  Checking approx v0.4.0
 Compiling derive-where v1.6.0
 Compiling typetag-impl v0.2.21
 Compiling delegate v0.13.5
 Compiling futures-macro v0.3.32
 Compiling tracing-attributes v0.1.31
  Checking tracing-core v0.1.36
  Checking bumpalo v3.20.2
  Checking futures-task v0.3.32
  Checking slab v0.4.12
 Compiling glob v0.3.3
  Checking rustc-hash v2.1.1
  Checking base64 v0.22.1
  Checking dyn-clone v1.0.20
 Compiling relative-path v1.9.3
  Checking fastrand v2.3.0
 Compiling inkwell v0.8.0
  Checking inventory v0.3.22
  Checking utf8-width v0.1.8
  Checking smallvec v1.15.1
  Checking futures-core v0.3.32
  Checking capnp v0.25.1
  Checking futures-util v0.3.32
  Checking portgraph v0.15.3
  Checking hugr-model v0.25.7 (/home/runner/work/hugr/hugr/PR_BRANCH/hugr-model)
 Compiling enum_dispatch v0.3.13
  Checking html-escape v0.2.13
  Checking tracing v0.1.44
  Checking tempfile v3.26.0
  Checking schemars v1.2.1
  Checking relrc v0.5.0
  Checking serde_with v3.17.0
  Checking strum v0.28.0
error: No suitable version of LLVM was found system-wide or pointed
            to by LLVM_SYS_211_PREFIX.
     
            Consider using `llvmenv` to compile an appropriate copy of LLVM, and
            refer to the llvm-sys documentation for more information.
     
            llvm-sys: https://crates.io/crates/llvm-sys
            llvmenv: https://crates.io/crates/llvmenv
 --> /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/llvm-sys-211.0.0/src/lib.rs:532:1
  |
532 | / std::compile_error!(concat!(
533 | |     "No suitable version of LLVM was found system-wide or pointed
534 | |        to by LLVM_SYS_",
535 | |     env!("CARGO_PKG_VERSION_MAJOR"),
...   |
542 | |        llvmenv: https://crates.io/crates/llvmenv"
543 | | ));
  | |__^

error: could not compile `llvm-sys` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...

-----

error: failed to build rustdoc for crate hugr-llvm v0.25.7
note: this is usually due to a compilation error in the crate,
    and is unlikely to be a bug in cargo-semver-checks
note: the following command can be used to reproduce the error:
    cargo new --lib example &&
        cd example &&
        echo '[workspace]' >> Cargo.toml &&
        cargo add --path /home/runner/work/hugr/hugr/PR_BRANCH/hugr-llvm --features default,insta,llvm21-1,portgraph,rstest,test-utils &&
        cargo check &&
        cargo doc

  Building hugr-model v0.25.7 (current)
     Built [  11.407s] (current)
   Parsing hugr-model v0.25.7 (current)
    Parsed [   0.015s] (current)
  Building hugr-model v0.25.7 (baseline)
     Built [   4.626s] (baseline)
   Parsing hugr-model v0.25.7 (baseline)
    Parsed [   0.015s] (baseline)
  Checking hugr-model v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.031s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  16.733s] hugr-model
  Building hugr-passes v0.25.7 (current)
     Built [  18.868s] (current)
   Parsing hugr-passes v0.25.7 (current)
    Parsed [   0.023s] (current)
  Building hugr-passes v0.25.7 (baseline)
     Built [  33.587s] (baseline)
   Parsing hugr-passes v0.25.7 (baseline)
    Parsed [   0.023s] (baseline)
  Checking hugr-passes v0.25.7 -> v0.25.7 (assume minor change)
   Checked [   0.039s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  53.583s] hugr-passes
  Building hugr-persistent v0.4.7 (current)
     Built [  16.069s] (current)
   Parsing hugr-persistent v0.4.7 (current)
    Parsed [   0.007s] (current)
  Building hugr-persistent v0.4.7 (baseline)
     Built [  15.404s] (baseline)
   Parsing hugr-persistent v0.4.7 (baseline)
    Parsed [   0.007s] (baseline)
  Checking hugr-persistent v0.4.7 -> v0.4.7 (assume minor change)
   Checked [   0.013s] 196 checks: 196 pass, 56 skip
   Summary no semver update required
  Finished [  33.050s] hugr-persistent
error: aborting due to failure to build rustdoc for crate hugr v0.25.7

@cgh-qtnm cgh-qtnm changed the title feat!: Upgrade hugr-llvm to LLVM 21 feat(llvm)!: Upgrade to LLVM 21 Feb 25, 2026
@cgh-qtnm cgh-qtnm requested a review from ss2165 February 27, 2026 22:18
@aborgna-q aborgna-q added S-breaking-change Status: Need a breaking change release to progress A-llvm Area: LLVM lowering labels Mar 2, 2026
@aborgna-q
Copy link
Copy Markdown
Collaborator

aborgna-q commented Mar 2, 2026

It also updates the hugr MSRV to 1.91 to avoid mysterious errors when linking the new llvm_sys with older toolchains.

Any clues on the reason behind it? 1.91 updates the LLVM version used by rustc itself to v21, but this shouldn't be affected by that. inkwell states it works well with rust ≥1.56

@cgh-qtnm
Copy link
Copy Markdown
Contributor Author

cgh-qtnm commented Mar 2, 2026

Any clues on the reason behind it? 1.91 updates the LLVM version used by rustc itself to v21, but this shouldn't be affected by that. inkwell states it works well with rust ≥1.56

Not really - I can't reproduce the error in a local x86 Ubuntu container so it's hard for me to see what's going on. Seems to be some issues with the libllvm_sys rlib provided by cargo. With 1.89 we get:

/usr/bin/ld: /home/runner/work/hugr/hugr/target/debug/deps/libllvm_sys-1967b83fda25957a.rlib: error adding symbols: file format not recognized

And with 1.90:

rust-lld: error: undefined symbol: llvm.modf.f64
            >>> referenced by TensorSpec.cpp
            >>>               /home/runner/work/hugr/hugr/target/debug/deps/hugr_llvm-d11b9b6dc5aa3e14.lto.libllvm_sys-d0c9d0ebb9dbb840.rlib(TensorSpec.cpp.o at 342884558).o:(llvm::json::Value::getAsInteger() const)

Copy link
Copy Markdown
Member

@ss2165 ss2165 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great thank you, ready to go I think really just a couple of minor clarifications + double check we want to merge the breaking change

.add_default_int_extensions()
});
assert_eq!(i, exec_ctx.exec_hugr_u64(hugr, "main"));
assert_eq!(i != 0, exec_ctx.exec_hugr::<bool>(hugr, "main"));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't track where this change comes from?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is from changing the JIT tests to call raw function pointers - that path is somewhat pickier about integer width than the old ExecutionEngine::run_function approach. Previously we were calling exec_hugr_u64 on things that didn't return i64 and it just happened to work. Added a note about this in the description


#[rstest]
#[case("inarrow_s", 6, 2, 4)]
#[case("inarrow_s", 6, 3, 4)]
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this reflecting a bug in the original test?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think so - log width 2 would be an i4 but LLVM has no such type?

inputs:
nixpkgs:
url: github:NixOS/nixpkgs/nixpkgs-unstable
nixpkgs-2505:
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@ss2165 ss2165 added this to the hugr-rs 0.26.0 milestone Mar 6, 2026
Copy link
Copy Markdown
Member

@ss2165 ss2165 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aborgna-q
Copy link
Copy Markdown
Collaborator

We're now merging the breaking PRs from the milestone, so feel free to queue this

and apply/ignore some new lints
@cgh-qtnm cgh-qtnm enabled auto-merge March 9, 2026 15:25
@aborgna-q aborgna-q disabled auto-merge March 9, 2026 15:43
};
let nval = n.value_u();
let mval = m.value_u();
#[allow(clippy::manual_checked_ops)]
Copy link
Copy Markdown
Collaborator

@aborgna-q aborgna-q Mar 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These do not exist in stable rust

@cgh-qtnm cgh-qtnm enabled auto-merge March 9, 2026 16:15
@cgh-qtnm cgh-qtnm added this pull request to the merge queue Mar 9, 2026
Merged via the queue into main with commit 61aba25 Mar 9, 2026
29 of 30 checks passed
@cgh-qtnm cgh-qtnm deleted the george/llvmup branch March 9, 2026 17:29
@hugrbot hugrbot mentioned this pull request Mar 9, 2026
github-merge-queue bot pushed a commit that referenced this pull request Mar 11, 2026
Build times for `--workspace --all-features` went from >2mins to over
30mins after we merged #2901.
It affected not only `hugr-llvm` every crate, but every dependant too;


| Unit | Total | Features
| -- | -- | --
| hugr-cli v0.25.7 describe "test" (test) | 1265.1s | default, tracing
| hugr-cli v0.25.7 validate "test" (test) | 1261.7s | default, tracing
| hugr-cli v0.25.7 hugr "bin" | 1260.8s | default, tracing
| hugr-cli v0.25.7 convert "test" (test) | 1253.3s | default, tracing
| hugr-core v0.25.7 hugr_core "lib" (test) | 633.8s | declarative,
default, serde_yaml, zstd
| hugr-core v0.25.7 model "test" (test) | 607.4s | declarative, default,
serde_yaml, zstd


We are tracking down this issue, but in the meantime this PR removes the
`hugr-llvm` feature from the stable required checks, so we can continue
doing development without waiting hours to merge stuff.

Here is a `cargo test --timings` example:

[cargo-timing.html](https://github.com/user-attachments/files/25884694/cargo-timing.html)

I made a couple drive-byes to help with the still slow cases:

drive-by: Remove unneeded transitive `aws-lc-sys` dependency, that was
slow to compile.
drive-by: Fix `rs-semver-checks`. #2901 updated it in an incorrect way
drive-by: Add a concurrency limit to the rust checks workflow, so
pushing new changes to a PR stops existing runs.

---------

Co-authored-by: Alec Edgington <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request Mar 16, 2026
## 🤖 New release

* `hugr-model`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-core`: 0.25.7 -> 0.26.0 (⚠ API breaking changes)
* `hugr-llvm`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-persistent`: 0.4.7 -> 0.5.0 (✓ API compatible changes)
* `hugr`: 0.25.7 -> 0.26.0 (✓ API compatible changes)
* `hugr-passes`: 0.25.7 -> 0.26.0 (⚠ API breaking changes)
* `hugr-cli`: 0.25.7 -> 0.26.0 (✓ API compatible changes)

### ⚠ `hugr-core` breaking changes

```text
--- failure enum_struct_variant_field_added: pub enum struct variant field added ---

Description:
An enum's exhaustive struct variant has a new field, which has to be included when constructing or matching on this variant.
        ref: https://doc.rust-lang.org/reference/attributes/type_system.html#the-non_exhaustive-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_field_added.ron

Failed in:
  field pkg of variant LowerFunc::FixedHugr in /tmp/.tmpGqHhMb/hugr/hugr-core/src/extension/op_def.rs:312

--- failure enum_struct_variant_field_missing: pub enum struct variant's field removed or renamed ---

Description:
A publicly-visible enum has a struct variant whose field is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_field_missing.ron

Failed in:
  field hugr of variant LowerFunc::FixedHugr, previously in file /tmp/.tmpqeiszk/hugr-core/src/extension/op_def.rs:303

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_missing.ron

Failed in:
  variant BuildError::HugrInsertionError, previously in file /tmp/.tmpqeiszk/hugr-core/src/builder.rs:186
  variant EnvelopeFormat::ModelText, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope/header.rs:60
  variant EnvelopeFormat::ModelTextWithExtensions, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope/header.rs:70
  variant Value::Function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:169
  variant Value::Function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:169

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function hugr_core::envelope::read_described_envelope, previously in file /tmp/.tmpqeiszk/hugr-core/src/envelope.rs:98

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  Value::function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:380
  Value::function, previously in file /tmp/.tmpqeiszk/hugr-core/src/ops/constant.rs:380
```

### ⚠ `hugr-passes` breaking changes

```text
--- failure derive_trait_impl_removed: built-in derived trait no longer implemented ---

Description:
A public type has stopped deriving one or more traits. This can break downstream code that depends on those types implementing those traits.
        ref: https://doc.rust-lang.org/reference/attributes/derive.html#derive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/derive_trait_impl_removed.ron

Failed in:
  type RedundantOrderEdgesPass no longer derives Copy, in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/redundant_order_edges.rs:26

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_missing.ron

Failed in:
  enum hugr_passes::untuple::UntupleRecursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:23

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function hugr_passes::remove_dead_funcs, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dead_funcs.rs:179
  function hugr_passes::const_fold::constant_fold_pass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/const_fold.rs:224
  function hugr_passes::non_local::nonlocal_edges, previously in file /tmp/.tmpqeiszk/hugr-passes/src/non_local.rs:39
  function hugr_passes::nonlocal_edges, previously in file /tmp/.tmpqeiszk/hugr-passes/src/non_local.rs:39
  function hugr_passes::monomorphize, previously in file /tmp/.tmpqeiszk/hugr-passes/src/monomorphize.rs:36

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  UntuplePass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:102
  UntuplePass::set_parent, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:114
  UntuplePass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:136
  UntuplePass::find_rewrites, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:151
  UntuplePass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:102
  UntuplePass::set_parent, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:114
  UntuplePass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:136
  UntuplePass::find_rewrites, previously in file /tmp/.tmpqeiszk/hugr-passes/src/untuple.rs:151
  RedundantOrderEdgesPass::new, previously in file /tmp/.tmpqeiszk/hugr-passes/src/redundant_order_edges.rs:39
  RedundantOrderEdgesPass::recursive, previously in file /tmp/.tmpqeiszk/hugr-passes/src/redundant_order_edges.rs:44
  RemoveDeadFuncsPass::with_module_entry_points, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dead_funcs.rs:75
  NormalizeCFGPass::cfgs, previously in file /tmp/.tmpqeiszk/hugr-passes/src/normalize_cfgs.rs:121
  ValueHandle::new_const_hugr, previously in file /tmp/.tmpqeiszk/hugr-passes/src/const_fold/value_handle.rs:95

--- failure trait_added_supertrait: non-sealed trait added new supertraits ---

Description:
A non-sealed trait added one or more supertraits, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#generic-bounds-tighten
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_added_supertrait.ron

Failed in:
  trait hugr_passes::composable::ComposablePass gained WithScope in file /tmp/.tmpGqHhMb/hugr/hugr-passes/src/composable.rs:25
  trait hugr_passes::ComposablePass gained WithScope in file /tmp/.tmpGqHhMb/hugr/hugr-passes/src/composable.rs:25

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/trait_method_missing.ron

Failed in:
  method value_from_const_hugr of trait ConstLoader, previously in file /tmp/.tmpqeiszk/hugr-passes/src/dataflow.rs:73
  method with_scope_internal of trait ComposablePass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/composable.rs:45
  method with_scope_internal of trait ComposablePass, previously in file /tmp/.tmpqeiszk/hugr-passes/src/composable.rs:45

--- failure type_allows_fewer_generic_type_params: type now allows fewer generic type parameters ---

Description:
A type now allows fewer generic type parameters than it used to. Uses of this type that supplied all previously-supported generic types will be broken.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-parameter-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/type_allows_fewer_generic_type_params.ron

Failed in:
  Struct NormalizeCFGPass allows 1 -> 0 generic types in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/normalize_cfgs.rs:101

--- failure unit_struct_changed_kind: unit struct changed kind ---

Description:
A public unit struct has been changed to a normal (curly-braces) struct, which cannot be constructed using the same struct literal syntax.
        ref: rust-lang/cargo#10871
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/unit_struct_changed_kind.ron

Failed in:
  struct MonomorphizePass in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/monomorphize.rs:178
  struct InlineDFGsPass in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/inline_dfgs.rs:17
  struct LocalizeEdges in /tmp/.tmpGqHhMb/hugr/hugr-passes/src/non_local.rs:23
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `hugr-model`

<blockquote>

##
[0.26.0](hugr-model-v0.25.7...hugr-model-v0.26.0)
- 2026-03-16

### Testing

- Replace model text snapshots with roundtrip tests
([#2933](#2933))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-core`

<blockquote>

##
[0.26.0](hugr-core-v0.25.7...hugr-core-v0.26.0)
- 2026-03-16

### Bug Fixes

- Keep declared used_extensions in envelope description
([#2932](#2932))

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### Miscellaneous Tasks

- [**breaking**] Fix new clippy warning on rust 1.94
([#2912](#2912))

### New Features

- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] Fix lower_funcs with custom extensions failing to load
([#2925](#2925))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
- Deprecate HugrView::as_petgraph
([#2944](#2944))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated definitions
([#2930](#2930))

### Testing

- Fix type_row intos in doctests
([#2941](#2941))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-llvm`

<blockquote>

##
[0.26.0](hugr-llvm-v0.25.7...hugr-llvm-v0.26.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- Include private HUGR functions in the local symbol table
([#2831](#2831))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated stack_array codegen
([#2929](#2929))
</blockquote>

## `hugr-persistent`

<blockquote>

##
[0.5.0](hugr-persistent-v0.4.7...hugr-persistent-v0.5.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>

## `hugr`

<blockquote>

##
[0.26.0](hugr-v0.25.7...hugr-v0.26.0)
- 2026-03-16

### Bug Fixes

- Keep declared used_extensions in envelope description
([#2932](#2932))

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### Miscellaneous Tasks

- [**breaking**] Fix new clippy warning on rust 1.94
([#2912](#2912))

### New Features

- [**breaking**] Update remainder of passes to use PassScope, drop
default with_scope
([#2871](#2871))
- [**breaking**] Make `WithScope` a supertrait of `ComposablePass`
([#2921](#2921))
- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] Fix lower_funcs with custom extensions failing to load
([#2925](#2925))
- Deprecate HugrView::as_petgraph
([#2944](#2944))
- [**breaking**] `hugr-passes` is no longer reexported from
`hugr::algorithms`
([#2922](#2922))
- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))

### Refactor

- [**breaking**] Remove deprecated pass configuration
([#2938](#2938))
- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated definitions
([#2930](#2930))

### Testing

- Fix type_row intos in doctests
([#2941](#2941))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-passes`

<blockquote>

##
[0.26.0](hugr-passes-v0.25.7...hugr-passes-v0.26.0)
- 2026-03-16

### New Features

- [**breaking**] `hugr-passes` is no longer reexported from
`hugr::algorithms`
([#2922](#2922))
- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] Update remainder of passes to use PassScope, drop
default with_scope
([#2871](#2871))
- [**breaking**] Make `WithScope` a supertrait of `ComposablePass`
([#2921](#2921))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
- Deprecate HugrView::as_petgraph
([#2944](#2944))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated pass configuration
([#2938](#2938))
</blockquote>

## `hugr-cli`

<blockquote>

##
[0.26.0](hugr-cli-v0.25.7...hugr-cli-v0.26.0)
- 2026-03-16

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### New Features

- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).

---------

Co-authored-by: Agustín Borgna <[email protected]>
Co-authored-by: Alec Edgington <[email protected]>
aborgna-q added a commit to Quantinuum/tket2 that referenced this pull request Mar 17, 2026
BREAKING CHANGE: The hugr-llvm LLVM version is being upgraded to 21.1,
and code that depends on it here needs to be updated as well. This also
includes an MSRV change to 1.91 to match hugr. See [the hugr
PR](Quantinuum/hugr#2901) for details.

Closes #1421

---------

Co-authored-by: Jake Arkinstall <[email protected]>
Co-authored-by: Agustín Borgna <[email protected]>
@hugrbot hugrbot mentioned this pull request Mar 17, 2026
github-merge-queue bot pushed a commit that referenced this pull request Mar 19, 2026
## 🤖 New release

* `hugr-model`: 0.26.0 -> 0.26.1
* `hugr-core`: 0.26.0 -> 0.26.1 (✓ API compatible changes)
* `hugr-llvm`: 0.26.0 -> 0.26.1
* `hugr`: 0.26.0 -> 0.26.1 (✓ API compatible changes)
* `hugr-passes`: 0.26.0 -> 0.26.1 (✓ API compatible changes)
* `hugr-cli`: 0.26.0 -> 0.26.1
* `hugr-persistent`: 0.5.0 -> 0.5.1

<details><summary><i><b>Changelog</b></i></summary><p>

## `hugr-model`

<blockquote>

##
[0.26.0](hugr-model-v0.25.7...hugr-model-v0.26.0)
- 2026-03-16

### Testing

- Replace model text snapshots with roundtrip tests
([#2933](#2933))
- Add missing width arg in model-call example
([#2945](#2945))
</blockquote>

## `hugr-core`

<blockquote>

##
[0.26.1](hugr-core-v0.26.0...hugr-core-v0.26.1)
- 2026-03-18

### New Features

- *(hugr-py)* Allow linking packages and modules from Python
([#2947](#2947))

### Refactor

- start cleaning up SiblingSubgraph convexity checking
([#2956](#2956))
</blockquote>

## `hugr-llvm`

<blockquote>

##
[0.26.0](hugr-llvm-v0.25.7...hugr-llvm-v0.26.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- Include private HUGR functions in the local symbol table
([#2831](#2831))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))

### Refactor

- [**breaking**] Remove deprecated Value::Function
([#2928](#2928))
- [**breaking**] Remove deprecated stack_array codegen
([#2929](#2929))
</blockquote>

## `hugr`

<blockquote>

##
[0.26.1](hugr-v0.26.0...hugr-v0.26.1)
- 2026-03-18

### Bug Fixes

- ConstantFold fails when the module contains function declarations
([#2954](#2954))

### New Features

- *(hugr-py)* Allow linking packages and modules from Python
([#2947](#2947))

### Refactor

- start cleaning up SiblingSubgraph convexity checking
([#2956](#2956))
</blockquote>

## `hugr-passes`

<blockquote>

##
[0.26.1](hugr-passes-v0.26.0...hugr-passes-v0.26.1)
- 2026-03-18

### Bug Fixes

- ConstantFold fails when the module contains function declarations
([#2954](#2954))
</blockquote>

## `hugr-cli`

<blockquote>

##
[0.26.0](hugr-cli-v0.25.7...hugr-cli-v0.26.0)
- 2026-03-16

### Documentation

- Move `spec/schema` and `spec/std_extensions` to `resources/`
([#2897](#2897))

### New Features

- [**breaking**] Rename ModelText envelope format to SExpression
([#2927](#2927))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>

## `hugr-persistent`

<blockquote>

##
[0.5.0](hugr-persistent-v0.4.7...hugr-persistent-v0.5.0)
- 2026-03-16

### New Features

- *(llvm)* [**breaking**] Upgrade to LLVM 21
([#2901](#2901))
- [**breaking**] TypeRow: add impl From array of Type, remove From<Type>
([#2784](#2784))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
@hugrbot hugrbot mentioned this pull request Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-llvm Area: LLVM lowering S-breaking-change Status: Need a breaking change release to progress

Projects

None yet

Development

Successfully merging this pull request may close these issues.

hugr-llvm: Upgrade to LLVM 21

5 participants