├── .git-blame-ignore-revs
├── .gitattributes
├── .github
├── CODEOWNERS
├── change-filters.yml
├── dependabot.yml
└── workflows
│ ├── breaking-change-to-main.yml
│ ├── ci-py.yml
│ ├── ci-rs.yml
│ ├── docs.yml
│ ├── drop-cache.yml
│ ├── notify-coverage.yml
│ ├── pr-title.yml
│ ├── python-wheels.yml
│ ├── release-please.yml
│ ├── release-plz.yml
│ ├── semver-checks.yml
│ └── unsoundness.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .release-please-manifest.json
├── Cargo.lock
├── Cargo.toml
├── DEVELOPMENT.md
├── LICENCE
├── README.md
├── _typos.toml
├── codecov.yml
├── devenv.lock
├── devenv.nix
├── devenv.yaml
├── hugr-cli
├── CHANGELOG.md
├── Cargo.toml
├── README.md
├── src
│ ├── extensions.rs
│ ├── hugr_io.rs
│ ├── lib.rs
│ ├── main.rs
│ ├── mermaid.rs
│ └── validate.rs
└── tests
│ ├── external.rs
│ ├── gen_extensions.rs
│ └── validate.rs
├── hugr-core
├── CHANGELOG.md
├── Cargo.toml
├── README.md
├── examples
│ └── extension
│ │ └── declarative.yaml
├── resources
├── src
│ ├── builder.rs
│ ├── builder
│ │ ├── build_traits.rs
│ │ ├── cfg.rs
│ │ ├── circuit.rs
│ │ ├── conditional.rs
│ │ ├── dataflow.rs
│ │ ├── handle.rs
│ │ ├── module.rs
│ │ └── tail_loop.rs
│ ├── core.rs
│ ├── envelope.rs
│ ├── envelope
│ │ ├── header.rs
│ │ ├── package_json.rs
│ │ └── serde_with.rs
│ ├── export.rs
│ ├── extension.rs
│ ├── extension
│ │ ├── const_fold.rs
│ │ ├── declarative.rs
│ │ ├── declarative
│ │ │ ├── ops.rs
│ │ │ ├── signature.rs
│ │ │ └── types.rs
│ │ ├── op_def.rs
│ │ ├── op_def
│ │ │ └── serialize_signature_func.rs
│ │ ├── prelude.rs
│ │ ├── prelude
│ │ │ ├── generic.rs
│ │ │ └── unwrap_builder.rs
│ │ ├── resolution.rs
│ │ ├── resolution
│ │ │ ├── extension.rs
│ │ │ ├── ops.rs
│ │ │ ├── test.rs
│ │ │ ├── types.rs
│ │ │ ├── types_mut.rs
│ │ │ └── weak_registry.rs
│ │ ├── simple_op.rs
│ │ └── type_def.rs
│ ├── hugr.rs
│ ├── hugr
│ │ ├── hugrmut.rs
│ │ ├── ident.rs
│ │ ├── internal.rs
│ │ ├── patch.rs
│ │ ├── patch
│ │ │ ├── consts.rs
│ │ │ ├── inline_call.rs
│ │ │ ├── inline_dfg.rs
│ │ │ ├── insert_cut.rs
│ │ │ ├── insert_identity.rs
│ │ │ ├── outline_cfg.rs
│ │ │ ├── port_types.rs
│ │ │ ├── replace.rs
│ │ │ ├── simple_replace.rs
│ │ │ └── simple_replace
│ │ │ │ └── serial.rs
│ │ ├── persistent
│ │ │ └── state_space
│ │ │ │ └── serial.rs
│ │ ├── serialize.rs
│ │ ├── serialize
│ │ │ ├── test.rs
│ │ │ ├── upgrade.rs
│ │ │ └── upgrade
│ │ │ │ ├── test.rs
│ │ │ │ └── testcases
│ │ │ │ ├── empty_hugr.json
│ │ │ │ └── hugr_with_named_op.json
│ │ ├── validate.rs
│ │ ├── validate
│ │ │ └── test.rs
│ │ ├── views.rs
│ │ └── views
│ │ │ ├── impls.rs
│ │ │ ├── petgraph.rs
│ │ │ ├── render.rs
│ │ │ ├── rerooted.rs
│ │ │ ├── root_checked.rs
│ │ │ ├── root_checked
│ │ │ ├── dfg.rs
│ │ │ └── snapshots
│ │ │ │ ├── hugr_core__hugr__views__root_checked__dfg__test__map_io_cx_gate.snap
│ │ │ │ ├── hugr_core__hugr__views__root_checked__dfg__test__map_io_cycle_3qb.snap
│ │ │ │ ├── hugr_core__hugr__views__root_checked__dfg__test__map_io_duplicate_output.snap
│ │ │ │ └── hugr_core__hugr__views__root_checked__dfg__test__map_io_recursive.snap
│ │ │ ├── sibling_subgraph.rs
│ │ │ ├── snapshots
│ │ │ ├── hugr_core__hugr__views__render__tests__custom_node_labels.snap
│ │ │ ├── hugr_core__hugr__views__tests__dot_cfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__dot_dfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__dot_empty_dfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__dot_func.snap
│ │ │ ├── hugr_core__hugr__views__tests__dot_module.snap
│ │ │ ├── hugr_core__hugr__views__tests__mmd_cfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__mmd_dfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__mmd_empty_dfg.snap
│ │ │ ├── hugr_core__hugr__views__tests__mmd_func.snap
│ │ │ └── hugr_core__hugr__views__tests__mmd_module.snap
│ │ │ └── tests.rs
│ ├── import.rs
│ ├── lib.rs
│ ├── macros.rs
│ ├── ops.rs
│ ├── ops
│ │ ├── constant.rs
│ │ ├── constant
│ │ │ └── custom.rs
│ │ ├── controlflow.rs
│ │ ├── custom.rs
│ │ ├── dataflow.rs
│ │ ├── handle.rs
│ │ ├── module.rs
│ │ ├── sum.rs
│ │ ├── tag.rs
│ │ └── validate.rs
│ ├── package.rs
│ ├── proptest.rs
│ ├── snapshots
│ │ ├── hugr_core__package__test__cfg.snap
│ │ ├── hugr_core__package__test__dfg.snap
│ │ ├── hugr_core__package__test__funcdef.snap
│ │ └── hugr_core__package__test__module.snap
│ ├── std_extensions.rs
│ ├── std_extensions
│ │ ├── arithmetic
│ │ │ ├── conversions.rs
│ │ │ ├── conversions
│ │ │ │ └── const_fold.rs
│ │ │ ├── float_ops.rs
│ │ │ ├── float_ops
│ │ │ │ └── const_fold.rs
│ │ │ ├── float_types.rs
│ │ │ ├── int_ops.rs
│ │ │ ├── int_ops
│ │ │ │ └── const_fold.rs
│ │ │ ├── int_types.rs
│ │ │ └── mod.rs
│ │ ├── collections.rs
│ │ ├── collections
│ │ │ ├── array.rs
│ │ │ ├── array
│ │ │ │ ├── array_clone.rs
│ │ │ │ ├── array_conversion.rs
│ │ │ │ ├── array_discard.rs
│ │ │ │ ├── array_kind.rs
│ │ │ │ ├── array_op.rs
│ │ │ │ ├── array_repeat.rs
│ │ │ │ ├── array_scan.rs
│ │ │ │ ├── array_value.rs
│ │ │ │ └── op_builder.rs
│ │ │ ├── list.rs
│ │ │ ├── list
│ │ │ │ └── list_fold.rs
│ │ │ ├── static_array.rs
│ │ │ └── value_array.rs
│ │ ├── logic.rs
│ │ └── ptr.rs
│ ├── types.rs
│ ├── types
│ │ ├── check.rs
│ │ ├── custom.rs
│ │ ├── poly_func.rs
│ │ ├── row_var.rs
│ │ ├── serialize.rs
│ │ ├── signature.rs
│ │ ├── type_param.rs
│ │ └── type_row.rs
│ └── utils.rs
└── tests
│ ├── model.rs
│ └── snapshots
│ ├── model__roundtrip_add.snap
│ ├── model__roundtrip_alias.snap
│ ├── model__roundtrip_call.snap
│ ├── model__roundtrip_cfg.snap
│ ├── model__roundtrip_cond.snap
│ ├── model__roundtrip_const.snap
│ ├── model__roundtrip_constraints.snap
│ ├── model__roundtrip_entrypoint.snap
│ ├── model__roundtrip_loop.snap
│ ├── model__roundtrip_order.snap
│ └── model__roundtrip_params.snap
├── hugr-llvm
├── CHANGELOG.md
├── Cargo.toml
├── README.md
├── default.nix
├── nix
│ ├── sources.json
│ └── sources.nix
└── src
│ ├── custom.rs
│ ├── custom
│ ├── extension_op.rs
│ ├── load_constant.rs
│ └── types.rs
│ ├── emit.rs
│ ├── emit
│ ├── args.rs
│ ├── func.rs
│ ├── func
│ │ └── mailbox.rs
│ ├── libc.rs
│ ├── namer.rs
│ ├── ops.rs
│ ├── ops
│ │ ├── cfg.rs
│ │ └── snapshots
│ │ │ ├── hugr_llvm__emit__ops__cfg__test__diverse_outputs@llvm14.snap
│ │ │ ├── hugr_llvm__emit__ops__cfg__test__diverse_outputs@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__emit__ops__cfg__test__nested@llvm14.snap
│ │ │ └── hugr_llvm__emit__ops__cfg__test__nested@pre-mem2reg@llvm14.snap
│ ├── snapshots
│ │ ├── hugr_llvm__emit__test__test_fns__diverse_cfg_children@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__diverse_cfg_children@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__diverse_module_children@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__diverse_module_children@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_call@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_call@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_call_indirect@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_call_indirect@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_conditional@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_conditional@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_custom_op@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_custom_op@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_dfg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_dfg@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_load_constant@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_load_constant@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_tag@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__emit_hugr_tag@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__load_function@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__load_function@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__tail_loop@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__tail_loop@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__emit__test__test_fns__tail_loop_simple@llvm14.snap
│ │ └── hugr_llvm__emit__test__test_fns__tail_loop_simple@pre-mem2reg@llvm14.snap
│ └── test.rs
│ ├── extension.rs
│ ├── extension
│ ├── collections.rs
│ ├── collections
│ │ ├── array.rs
│ │ ├── list.rs
│ │ ├── snapshots
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_all_ops@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_all_ops@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_array_value@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_array_value@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_clone@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_clone@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_get@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__array__test__emit_get@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__const@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__const@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__get@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__get@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__insert@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__insert@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__length@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__length@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__pop@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__pop@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__push@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__push@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__set@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__list__test__set@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_all_ops@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_all_ops@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_array_value@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_array_value@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_clone@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_clone@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_get@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__stack_array__test__emit_get@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__emit_static_array_of_static_array@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__emit_static_array_of_static_array@pre-mem2reg@llvm14.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_0.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_1.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_2.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_3.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_0.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_1.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_2.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_3.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_0.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_1.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_2.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_3.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_0.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_1.snap
│ │ │ ├── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_2.snap
│ │ │ └── hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_3.snap
│ │ ├── stack_array.rs
│ │ └── static_array.rs
│ ├── conversions.rs
│ ├── float.rs
│ ├── int.rs
│ ├── logic.rs
│ ├── prelude.rs
│ └── snapshots
│ │ ├── hugr_llvm__extension__conversions__test__convert_s@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__convert_s@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__convert_u@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__convert_u@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__ifrombool@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__ifrombool@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__itobool@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__itobool@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__trunc_s@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__trunc_s@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__trunc_u@llvm14.snap
│ │ ├── hugr_llvm__extension__conversions__test__trunc_u@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__const_float@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__const_float@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fadd@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fadd@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fdiv@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fdiv@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__feq@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__feq@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fge@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fge@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fgt@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fgt@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fle@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fle@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__flt@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__flt@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fmul@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fmul@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fne@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fne@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fneg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fneg@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fpow@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fpow@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fsub@llvm14.snap
│ │ ├── hugr_llvm__extension__float__test__fsub@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idiv_checked_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idiv_checked_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idivmod_checked_s_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idivmod_checked_u_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idivmod_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_idivmod_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_imod_checked_s_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_imod_checked_u_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_ineg_[2].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_is_to_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@llvm14_iu_to_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idiv_checked_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idiv_checked_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idivmod_checked_s_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idivmod_checked_u_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idivmod_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_idivmod_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_imod_checked_s_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_imod_checked_u_[6].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_ineg_[2].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_is_to_u_[3].snap
│ │ ├── hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_iu_to_s_[3].snap
│ │ ├── hugr_llvm__extension__int__test__iadd@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iadd@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__idiv_s@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__idiv_s@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__idiv_u@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__idiv_u@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ieq@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ieq@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ilt_s@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ilt_s@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__imod_s@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__imod_s@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__imod_u@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__imod_u@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__inarrow_s_3_2@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__inarrow_s_3_2@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__inarrow_u_6_4@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__inarrow_u_6_4@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ipow@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__ipow@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__isub@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__isub@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_s_1_6@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_s_1_6@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_s_2_3@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_s_2_3@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_u_1_6@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_u_1_6@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_u_2_3@llvm14.snap
│ │ ├── hugr_llvm__extension__int__test__iwiden_u_2_3@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__and@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__and@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__eq@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__eq@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__not@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__not@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__or@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__or@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__xor@llvm14.snap
│ │ ├── hugr_llvm__extension__logic__test__xor@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_barrier@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_barrier@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_const_external_symbol@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_const_external_symbol@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_const_usize@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_const_usize@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_exit@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_exit@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_load_nat@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_load_nat@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_make_tuple@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_make_tuple@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_noop@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_noop@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_panic@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_panic@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_print@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_print@pre-mem2reg@llvm14.snap
│ │ ├── hugr_llvm__extension__prelude__test__prelude_unpack_tuple@llvm14.snap
│ │ └── hugr_llvm__extension__prelude__test__prelude_unpack_tuple@pre-mem2reg@llvm14.snap
│ ├── lib.rs
│ ├── snapshots
│ ├── hugr_llvm__sum__test__build_untag_tag@nofields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@nofields_elided_fields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@one_variant_one_field.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@one_variant_one_field_elided_fields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@one_variant_two_fields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@one_variant_two_fields_elided_fields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@two_variant_one_field.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@two_variant_one_field_elided_fields.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@unit.snap
│ ├── hugr_llvm__sum__test__build_untag_tag@unit_elided_fields.snap
│ ├── hugr_llvm__types__test__func_type_to_llvm@llvm14_0.snap
│ ├── hugr_llvm__types__test__func_type_to_llvm@llvm14_1.snap
│ ├── hugr_llvm__types__test__func_type_to_llvm@llvm14_2.snap
│ ├── hugr_llvm__types__test__sum_type_to_llvm@llvm14_0.snap
│ ├── hugr_llvm__types__test__sum_type_to_llvm@llvm14_1.snap
│ ├── hugr_llvm__types__test__sum_type_to_llvm@llvm14_2.snap
│ ├── hugr_llvm__types__test__sum_type_to_llvm@llvm14_3.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_0.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_1.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_2.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_3.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_4.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_5.snap
│ ├── hugr_llvm__types__test__type_to_llvm@llvm14_6.snap
│ └── hugr_llvm__types__test__type_to_llvm@llvm14_7.snap
│ ├── sum.rs
│ ├── sum
│ └── layout.rs
│ ├── test.rs
│ ├── types.rs
│ ├── utils.rs
│ └── utils
│ ├── fat.rs
│ ├── inline_constant_functions.rs
│ ├── int_op_builder.rs
│ ├── logic_op_builder.rs
│ └── type_map.rs
├── hugr-model
├── CHANGELOG.md
├── Cargo.toml
├── README.md
├── capnp
│ └── hugr-v0.capnp
├── src
│ ├── capnp
│ │ ├── hugr_v0_capnp.rs
│ │ └── mod.rs
│ ├── lib.rs
│ └── v0
│ │ ├── ast
│ │ ├── hugr.pest
│ │ ├── mod.rs
│ │ ├── parse.rs
│ │ ├── print.rs
│ │ ├── python.rs
│ │ ├── resolve.rs
│ │ └── view.rs
│ │ ├── binary
│ │ ├── mod.rs
│ │ ├── read.rs
│ │ └── write.rs
│ │ ├── mod.rs
│ │ ├── scope
│ │ ├── link.rs
│ │ ├── mod.rs
│ │ ├── symbol.rs
│ │ └── vars.rs
│ │ └── table
│ │ ├── mod.rs
│ │ └── view.rs
└── tests
│ ├── binary.rs
│ ├── fixtures
│ ├── model-add.edn
│ ├── model-alias.edn
│ ├── model-call.edn
│ ├── model-cfg.edn
│ ├── model-cond.edn
│ ├── model-const.edn
│ ├── model-constraints.edn
│ ├── model-decl-exts.edn
│ ├── model-entrypoint.edn
│ ├── model-lists.edn
│ ├── model-literals.edn
│ ├── model-loop.edn
│ ├── model-order.edn
│ └── model-params.edn
│ ├── snapshots
│ ├── text__declarative_extensions.snap
│ └── text__literals.snap
│ └── text.rs
├── hugr-passes
├── CHANGELOG.md
├── Cargo.toml
├── README.md
└── src
│ ├── call_graph.rs
│ ├── composable.rs
│ ├── const_fold.rs
│ ├── const_fold
│ ├── test.rs
│ └── value_handle.rs
│ ├── dataflow.rs
│ ├── dataflow
│ ├── datalog.rs
│ ├── partial_value.rs
│ ├── results.rs
│ ├── test.rs
│ └── value_row.rs
│ ├── dead_code.rs
│ ├── dead_funcs.rs
│ ├── force_order.rs
│ ├── half_node.rs
│ ├── lib.rs
│ ├── linearize_array.rs
│ ├── lower.rs
│ ├── merge_bbs.rs
│ ├── monomorphize.rs
│ ├── nest_cfgs.rs
│ ├── non_local.rs
│ ├── non_local
│ └── localize.rs
│ ├── replace_types.rs
│ ├── replace_types
│ ├── handlers.rs
│ └── linearize.rs
│ ├── untuple.rs
│ └── validation.rs
├── hugr-persistent
├── Cargo.toml
├── src
│ ├── lib.rs
│ ├── parents_view.rs
│ ├── persistent_hugr.rs
│ ├── resolver.rs
│ ├── state_space.rs
│ ├── tests.rs
│ ├── trait_impls.rs
│ ├── walker.rs
│ └── walker
│ │ └── pinned.rs
└── tests
│ └── persistent_walker_example.rs
├── hugr-py
├── .gitignore
├── CHANGELOG.md
├── Cargo.toml
├── LICENCE
├── README.md
├── docs
│ ├── .gitignore
│ ├── _static
│ │ ├── _redirect.html
│ │ └── hugr_logo_no_bg.svg
│ ├── api-docs
│ │ ├── .gitignore
│ │ ├── _templates
│ │ │ ├── autosummary
│ │ │ │ ├── base.rst
│ │ │ │ ├── class.rst
│ │ │ │ └── module.rst
│ │ │ └── versioning.html
│ │ ├── conf.py
│ │ └── index.rst
│ └── build.sh
├── pyproject.toml
├── rust
│ └── lib.rs
├── src
│ └── hugr
│ │ ├── __init__.py
│ │ ├── _hugr
│ │ └── __init__.pyi
│ │ ├── _serialization
│ │ ├── __init__.py
│ │ ├── extension.py
│ │ ├── ops.py
│ │ ├── serial_hugr.py
│ │ ├── testing_hugr.py
│ │ └── tys.py
│ │ ├── build
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── cfg.py
│ │ ├── cond_loop.py
│ │ ├── dfg.py
│ │ ├── function.py
│ │ └── tracked_dfg.py
│ │ ├── conftest.py
│ │ ├── envelope.py
│ │ ├── exceptions.py
│ │ ├── ext.py
│ │ ├── hugr
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── node_port.py
│ │ └── render.py
│ │ ├── model
│ │ ├── __init__.py
│ │ └── export.py
│ │ ├── ops.py
│ │ ├── package.py
│ │ ├── py.typed
│ │ ├── qsystem
│ │ ├── __init__.py
│ │ └── result.py
│ │ ├── std
│ │ ├── __init__.py
│ │ ├── _json_defs
│ │ │ ├── README.md
│ │ │ ├── arithmetic
│ │ │ │ ├── conversions.json
│ │ │ │ ├── float.json
│ │ │ │ ├── float
│ │ │ │ │ └── types.json
│ │ │ │ ├── int.json
│ │ │ │ └── int
│ │ │ │ │ └── types.json
│ │ │ ├── collections
│ │ │ │ ├── array.json
│ │ │ │ ├── list.json
│ │ │ │ ├── static_array.json
│ │ │ │ └── value_array.json
│ │ │ ├── logic.json
│ │ │ ├── prelude.json
│ │ │ └── ptr.json
│ │ ├── collections
│ │ │ ├── __init__.py
│ │ │ ├── array.py
│ │ │ ├── list.py
│ │ │ ├── static_array.py
│ │ │ └── value_array.py
│ │ ├── float.py
│ │ ├── int.py
│ │ ├── logic.py
│ │ └── prelude.py
│ │ ├── tys.py
│ │ ├── utils.py
│ │ └── val.py
└── tests
│ ├── __init__.py
│ ├── __snapshots__
│ └── test_hugr_build.ambr
│ ├── conftest.py
│ ├── serialization
│ ├── __init__.py
│ ├── test_basic.py
│ └── test_extension.py
│ ├── test_bimap.py
│ ├── test_cfg.py
│ ├── test_cond_loop.py
│ ├── test_custom.py
│ ├── test_envelope.py
│ ├── test_hugr_build.py
│ ├── test_nodes.py
│ ├── test_ops.py
│ ├── test_package.py
│ ├── test_prelude.py
│ ├── test_qsys_result.py
│ ├── test_tracked_dfg.py
│ ├── test_tys.py
│ ├── test_val.py
│ └── test_version.py
├── hugr
├── CHANGELOG.md
├── Cargo.toml
├── README.md
├── assets
│ ├── LICENCE.md
│ └── hugr_logo.svg
├── benches
│ ├── bench_main.rs
│ └── benchmarks
│ │ ├── hugr.rs
│ │ ├── hugr
│ │ └── examples.rs
│ │ ├── mod.rs
│ │ ├── subgraph.rs
│ │ └── types.rs
└── src
│ ├── hugr.rs
│ └── lib.rs
├── justfile
├── pyproject.toml
├── release-please-config.json
├── release-plz.toml
├── resources
└── test
│ ├── hugr-0.hugr
│ ├── hugr-1.hugr
│ ├── hugr-2.hugr
│ ├── hugr-3.hugr
│ └── issue-1189.hugr
├── ruff.toml
├── scripts
├── __init__.py
└── generate_schema.py
├── specification
├── hugr.md
├── schema
│ ├── .gitattributes
│ ├── hugr_schema_live.json
│ ├── hugr_schema_strict_live.json
│ ├── serialization.md
│ ├── testing_hugr_schema_live.json
│ └── testing_hugr_schema_strict_live.json
└── std_extensions
│ ├── arithmetic
│ ├── conversions.json
│ ├── float.json
│ ├── float
│ │ └── types.json
│ ├── int.json
│ └── int
│ │ └── types.json
│ ├── collections
│ ├── array.json
│ ├── list.json
│ ├── static_array.json
│ └── value_array.json
│ ├── logic.json
│ ├── prelude.json
│ └── ptr.json
└── uv.lock
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | # Commits to ignore in blame output
2 | #
3 | # To configure git to use this file, run:
4 | # > git config blame.ignoreRevsFile .git-blame-ignore-revs
5 |
6 | # Bump to rust edition 2024, and a bunch of automated lint fixes
7 | # https://github.com/CQCL/hugr/pull/2195
8 | 16903a65294aede245a4c8bb2a07a4692a619769
9 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | **/snapshots/*.snap -diff
2 |
3 | hugr-model/src/capnp/hugr_*.rs linguist-generated=true
4 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # for syntax see https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-syntax
2 |
3 | # base rule, hugrverse team is codeowner for whole repo
4 | * @CQCL/hugr
5 |
6 | # Add specific rules below.
7 | # Lower the rule, higher the precedence
8 |
9 | # The release PRs that trigger publication to crates.io or PyPI always modify the changelog.
10 | # We require those PRs to be approved by someone with release permissions.
11 | **/CHANGELOG.md @aborgna-q @cqc-alec @ss2165 @doug-q
12 |
--------------------------------------------------------------------------------
/.github/change-filters.yml:
--------------------------------------------------------------------------------
1 | # Filters used by [dorny/path-filters](https://github.com/dorny/paths-filter)
2 | # to detect changes in each subproject, and only run the corresponding jobs.
3 |
4 | # Dependencies and common workspace configuration.
5 | rust-config: &rust-config
6 | - "Cargo.lock"
7 | - "Cargo.toml"
8 | - ".github/workflows/ci-rs.yml"
9 |
10 | model: &model
11 | - *rust-config
12 | - "hugr-model/**"
13 |
14 | llvm: &llvm
15 | - *rust-config
16 | - "hugr-llvm/**"
17 | - "hugr-core/**"
18 |
19 | rust: &rust
20 | - *rust-config
21 | - *model
22 | - *llvm
23 | - "hugr/**"
24 | - "hugr-cli/**"
25 | - "hugr-core/**"
26 | - "hugr-passes/**"
27 | - "specification/schema/**"
28 |
29 | python:
30 | - *rust
31 | - "hugr-py/**"
32 | - "pyproject.toml"
33 | - "uv.lock"
34 | - "specification/schema/**"
35 | - ".github/workflows/ci-py.yml"
36 |
--------------------------------------------------------------------------------
/.github/workflows/breaking-change-to-main.yml:
--------------------------------------------------------------------------------
1 | name: Check for breaking changes targeting main
2 | on:
3 | pull_request_target:
4 | branches:
5 | - "**"
6 | types:
7 | - opened
8 | - edited
9 | - synchronize
10 | - labeled
11 | - unlabeled
12 | merge_group:
13 | types: [checks_requested]
14 |
15 | jobs:
16 | breaking-change-to-main:
17 | name: Check for breaking changes targeting main
18 | uses: CQCL/hugrverse-actions/.github/workflows/breaking-change-to-main.yml@main
19 | secrets:
20 | GITHUB_PAT: ${{ secrets.HUGRBOT_PAT }}
21 | with:
22 | release_branch: ${{ vars.BREAKING_RELEASE_BRANCH }}
23 |
--------------------------------------------------------------------------------
/.github/workflows/drop-cache.yml:
--------------------------------------------------------------------------------
1 | name: cleanup caches by a branch
2 | on:
3 | pull_request:
4 | types:
5 | - closed
6 |
7 | jobs:
8 | drop-cache:
9 | uses: CQCL/hugrverse-actions/.github/workflows/drop-cache.yml@main
10 |
--------------------------------------------------------------------------------
/.github/workflows/notify-coverage.yml:
--------------------------------------------------------------------------------
1 | name: Notify coverage changes
2 |
3 | # Daily notification for coverage changes in `main`.
4 | #
5 | # PR coverage diffs are computed directly in the `Continuous Integration` workflow.
6 |
7 | on:
8 | schedule:
9 | # 04:00 every Monday
10 | - cron: '0 4 * * 1'
11 | workflow_dispatch: {}
12 |
13 | jobs:
14 | coverage-trend:
15 | uses: CQCL/hugrverse-actions/.github/workflows/coverage-trend.yml@main
16 | secrets:
17 | CODECOV_GET_TOKEN: ${{ secrets.CODECOV_GET_TOKEN }}
18 |
19 | notify-slack:
20 | needs: coverage-trend
21 | runs-on: ubuntu-latest
22 | if: needs.coverage-trend.outputs.should_notify == 'true'
23 | steps:
24 | - name: Send notification
25 | uses: slackapi/slack-github-action@v2.1.0
26 | with:
27 | method: chat.postMessage
28 | token: ${{ secrets.SLACK_BOT_TOKEN }}
29 | payload: |
30 | channel: 'C05GGH4GP4N'
31 | text: ${{ needs.coverage-trend.outputs.msg }}
32 |
--------------------------------------------------------------------------------
/.github/workflows/pr-title.yml:
--------------------------------------------------------------------------------
1 | name: Check Conventional Commits format
2 | on:
3 | pull_request_target:
4 | branches:
5 | - '**'
6 | types:
7 | - opened
8 | - edited
9 | - synchronize
10 | - labeled
11 | - unlabeled
12 | merge_group:
13 | types: [checks_requested]
14 |
15 | jobs:
16 | check-title:
17 | name: check-title
18 | uses: CQCL/hugrverse-actions/.github/workflows/pr-title.yml@main
19 | secrets:
20 | GITHUB_PAT: ${{ secrets.HUGRBOT_PAT }}
21 |
--------------------------------------------------------------------------------
/.github/workflows/release-please.yml:
--------------------------------------------------------------------------------
1 | # Automatic changelog and version bumping with release-please for python projects
2 | name: Release-please 🐍
3 |
4 | on:
5 | workflow_dispatch: {}
6 | push:
7 | branches:
8 | - main
9 |
10 | permissions:
11 | contents: write
12 | pull-requests: write
13 |
14 | jobs:
15 | release-please:
16 | name: Create release PR
17 | runs-on: ubuntu-latest
18 | steps:
19 | - uses: googleapis/release-please-action@v4
20 | with:
21 | # Using a personal access token so releases created by this workflow can trigger the deployment workflow
22 | token: ${{ secrets.HUGRBOT_PAT }}
23 | config-file: release-please-config.json
24 |
--------------------------------------------------------------------------------
/.github/workflows/release-plz.yml:
--------------------------------------------------------------------------------
1 | # Automatic changelog, version bumping, and semver-checks with release-plz for rust projects
2 | name: Release-plz 🦀
3 |
4 | on:
5 | push:
6 | branches:
7 | - main
8 |
9 | env:
10 | LLVM_VERSION: "14.0"
11 |
12 | jobs:
13 | release-plz:
14 | name: Release-plz
15 | runs-on: ubuntu-latest
16 | steps:
17 | - name: Checkout repository
18 | uses: actions/checkout@v4
19 | with:
20 | fetch-depth: 0
21 | token: ${{ secrets.HUGRBOT_PAT }}
22 | - name: Install Rust toolchain
23 | uses: dtolnay/rust-toolchain@stable
24 |
25 | # These are needed when doing a crate release, since `cargo release`
26 | # checks that the crate can be compiled before publishing it.
27 | - name: Install LLVM and Clang
28 | uses: KyleMayes/install-llvm-action@v2
29 | with:
30 | version: ${{ env.LLVM_VERSION }}
31 | # Use a temporary directory to avoid polluting the workspace,
32 | # otherwise release-plz fails due to uncommitted changes.
33 | directory: ${{ runner.temp }}/llvm
34 |
35 | - name: Run release-plz
36 | uses: MarcoIeni/release-plz-action@v0.5
37 | env:
38 | GITHUB_TOKEN: ${{ secrets.HUGRBOT_PAT }}
39 | CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
40 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | debug/
4 | target/
5 |
6 | # These are backup files generated by rustfmt
7 | **/*.rs.bk
8 |
9 | # MSVC Windows builds of rustc generate these, which store debugging information
10 | *.pdb
11 |
12 | # Failing proptest artifacts
13 | proptest-regressions/
14 |
15 | # snaphsot test failures
16 | *.snap.new
17 |
18 | # Devenv
19 | .devenv*
20 | devenv.local.nix
21 |
22 | # Coverage report
23 | lcov.info
24 |
25 | # Byte-compiled / optimized / DLL files
26 | __pycache__/
27 | *.py[cod]
28 | *$py.class
29 | *.egg-info
30 |
31 | # Unit test / coverage reports
32 | htmlcov/
33 | .coverage
34 |
35 | # Jupyter Notebook
36 | .ipynb_checkpoints
37 |
38 | # Environments
39 | .env
40 | .venv
41 | env/
42 | venv/
43 |
44 | # ruff
45 | .ruff_cache
46 |
47 | # MacOS
48 | *.DS_Store
49 |
--------------------------------------------------------------------------------
/.release-please-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "hugr-py": "0.12.2"
3 | }
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | hugr/README.md
--------------------------------------------------------------------------------
/_typos.toml:
--------------------------------------------------------------------------------
1 | [default.extend-identifiers]
2 | bck = "bck" # BiMap uses abbreviation
3 | ser_it = "ser_it"
4 | SerCollection = "SerCollection"
5 | strat = "strat" # common abbreviation for strategy
6 | # some arithmetic op names:
7 | inot = "inot"
8 | fle = "fle"
9 | flt = "flt"
10 | olt = "olt"
11 | OLT = "OLT"
12 | FLT = "FLT"
13 | ine = "ine"
14 | # llvm generic parameters
15 | OT = "OT"
16 | ot = "ot"
17 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | # Codecov coverage report configuration
2 |
3 | # Coverage report
4 | # Do not fail if the coverage is not met
5 | coverage:
6 | status:
7 | patch:
8 | default:
9 | informational: false
10 | only_pulls: true
11 | project:
12 | default:
13 | informational: true
14 |
15 | # Ignore tests and binaries
16 | ignore:
17 | - "hugr-py/tests"
18 | - "scripts"
19 |
20 | # Coverage groups config
21 | flag_management:
22 | default_rules: # the rules that will be followed for any flag added, generally
23 | # Use previous coverage if one is not available for the current commit.
24 | #
25 | # (E.g. if the PR doesn't modify a subproject, we don't submit a coverage report for it.)
26 | carryforward: true
27 |
--------------------------------------------------------------------------------
/devenv.yaml:
--------------------------------------------------------------------------------
1 | inputs:
2 | nixpkgs:
3 | url: github:NixOS/nixpkgs/nixpkgs-unstable
4 | fenix:
5 | url: github:nix-community/fenix
6 | inputs:
7 | nixpkgs:
8 | follows: nixpkgs
9 |
--------------------------------------------------------------------------------
/hugr-cli/src/validate.rs:
--------------------------------------------------------------------------------
1 | //! The `validate` subcommand.
2 |
3 | use anyhow::Result;
4 | use clap::Parser;
5 | use hugr::HugrView;
6 | use hugr::package::PackageValidationError;
7 | use tracing::info;
8 |
9 | use crate::CliError;
10 | use crate::hugr_io::HugrInputArgs;
11 |
12 | /// Validate and visualise a HUGR file.
13 | #[derive(Parser, Debug)]
14 | #[clap(version = "1.0", long_about = None)]
15 | #[clap(about = "Validate a HUGR.")]
16 | #[group(id = "hugr")]
17 | #[non_exhaustive]
18 | pub struct ValArgs {
19 | /// Hugr input.
20 | #[command(flatten)]
21 | pub input_args: HugrInputArgs,
22 | }
23 |
24 | /// String to print when validation is successful.
25 | pub const VALID_PRINT: &str = "HUGR valid!";
26 |
27 | impl ValArgs {
28 | /// Run the HUGR cli and validate against an extension registry.
29 | pub fn run(&mut self) -> Result<()> {
30 | if self.input_args.hugr_json {
31 | let hugr = self.input_args.get_hugr()?;
32 | hugr.validate()
33 | .map_err(PackageValidationError::Validation)
34 | .map_err(CliError::Validate)?;
35 | } else {
36 | let package = self.input_args.get_package()?;
37 | package.validate().map_err(CliError::Validate)?;
38 | };
39 |
40 | info!("{VALID_PRINT}");
41 |
42 | Ok(())
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/hugr-core/resources:
--------------------------------------------------------------------------------
1 | ../resources/
--------------------------------------------------------------------------------
/hugr-core/src/hugr/serialize/upgrade.rs:
--------------------------------------------------------------------------------
1 | use thiserror::Error;
2 |
3 | #[derive(Debug, Error)]
4 | #[non_exhaustive]
5 | pub enum UpgradeError {
6 | #[error(transparent)]
7 | Deserialize(#[from] serde_json::Error),
8 |
9 | #[error("Version {0} HUGR serialization format is not supported.")]
10 | KnownVersionUnsupported(String),
11 |
12 | #[error("Unsupported HUGR serialization format.")]
13 | UnknownVersionUnsupported,
14 | }
15 |
16 | #[cfg(all(test, not(miri)))]
17 | // see serialize::test.
18 | mod test;
19 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/serialize/upgrade/testcases/empty_hugr.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "live",
3 | "nodes": [
4 | {
5 | "parent": 0,
6 | "op": "Module"
7 | }
8 | ],
9 | "edges": [],
10 | "metadata": [
11 | null
12 | ],
13 | "encoder": "hugr-rs v0.15.4",
14 | "entrypoint": 0
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/root_checked/snapshots/hugr_core__hugr__views__root_checked__dfg__test__map_io_cx_gate.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/root_checked/dfg.rs
3 | expression: dfg_hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 7["(7) test.quantum.CX"]
18 | 5--"0:1
qubit"-->7
19 | 5--"1:0
qubit"-->7
20 | 7--"0:0
qubit"-->6
21 | 7--"1:1
qubit"-->6
22 | end
23 | 2--"0:0
qubit"-->4
24 | 2--"1:1
qubit"-->4
25 | 4--"0:0
qubit"-->3
26 | 4--"1:1
qubit"-->3
27 | end
28 | end
29 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/root_checked/snapshots/hugr_core__hugr__views__root_checked__dfg__test__map_io_cycle_3qb.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/root_checked/dfg.rs
3 | expression: dfg_hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 7["(7) test.quantum.CX"]
18 | 5--"0:1
qubit"-->7
19 | 5--"1:2
qubit"-->6
20 | 5--"2:0
qubit"-->7
21 | 7--"0:0
qubit"-->6
22 | 7--"1:1
qubit"-->6
23 | end
24 | 2--"0:0
qubit"-->4
25 | 2--"1:1
qubit"-->4
26 | 2--"2:2
qubit"-->4
27 | 4--"0:0
qubit"-->3
28 | 4--"1:1
qubit"-->3
29 | 4--"2:2
qubit"-->3
30 | end
31 | end
32 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/root_checked/snapshots/hugr_core__hugr__views__root_checked__dfg__test__map_io_duplicate_output.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/root_checked/dfg.rs
3 | expression: dfg_hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 5--"0:0
Bool"-->6
18 | 5--"0:1
Bool"-->6
19 | end
20 | 2--"0:0
Bool"-->4
21 | 4--"0:0
Bool"-->3
22 | 4--"1:1
Bool"-->3
23 | end
24 | end
25 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/root_checked/snapshots/hugr_core__hugr__views__root_checked__dfg__test__map_io_recursive.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/root_checked/dfg.rs
3 | expression: hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;foo#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) DFG"]
13 | direction LR
14 | 5["(5) Input"]
15 | 6["(6) Output"]
16 | subgraph 7 ["(7) [**DFG**]"]
17 | direction LR
18 | style 7 stroke:#832561,stroke-width:3px
19 | 8["(8) Input"]
20 | 9["(9) Output"]
21 | 8--"0:1
qubit"-->9
22 | 8--"1:0
Bool"-->9
23 | end
24 | 5--"0:0
qubit"-->7
25 | 5--"1:1
Bool"-->7
26 | 7--"0:0
Bool"-->6
27 | 7--"1:1
qubit"-->6
28 | end
29 | 2--"0:0
qubit"-->4
30 | 2--"1:1
Bool"-->4
31 | 4--"0:0
Bool"-->3
32 | 4--"1:1
qubit"-->3
33 | end
34 | end
35 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__render__tests__custom_node_labels.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/render.rs
3 | expression: h.mermaid_string_with_formatter(config)
4 | ---
5 | graph LR
6 | subgraph 0 ["(node_0) Module"]
7 | direction LR
8 | subgraph 1 ["(node_1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(node_2) Input"]
11 | 3["(node_3) Output"]
12 | subgraph 4 ["(node_4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(node_5) Input"]
16 | 6["(node_6) Output"]
17 | 5--"0:0
Bool"-->6
18 | end
19 | 2--"0:0
Bool"-->4
20 | 4--"0:0
Bool"-->3
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__dot_func.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.dot_string()
4 | ---
5 | digraph {
6 | 0 [shape=plain label=<
>]
7 | 1 [shape=plain color="#832561" penwidth="3px" label=<(1) [**FuncDefn: "test"**] |
0: [Bool] -> [Bool] |
>]
8 | 2 [shape=plain label=<>]
9 | 2:out0 -> 3:in0 [style=""]
10 | 3 [shape=plain label=<>]
11 | hier0 [shape=plain label="0"]
12 | hier0 -> hier1 [style = "dashed"]
13 | hier1 [shape=plain label="1"]
14 | hier1 -> hier2 [style = "dashed"]
15 | hier1 -> hier3 [style = "dashed"]
16 | hier2 [shape=plain label="2"]
17 | hier3 [shape=plain label="3"]
18 | }
19 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__dot_module.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.dot_string()
4 | ---
5 | digraph {
6 | 0 [shape=plain color="#832561" penwidth="3px" label=<>]
7 | 1 [shape=plain label=<(1) FuncDecl: "test" |
0: [Bool] -> [Bool] |
>]
8 | hier0 [shape=plain label="0"]
9 | hier0 -> hier1 [style = "dashed"]
10 | hier1 [shape=plain label="1"]
11 | }
12 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__mmd_dfg.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 7["(7) test.quantum.CX"]
18 | 8["(8) test.quantum.CX"]
19 | 5--"0:0
qubit"-->7
20 | 5--"1:1
qubit"-->7
21 | 7--"0:1
qubit"-->8
22 | 7--"1:0
qubit"-->8
23 | 7-."2:2".->8
24 | 8--"0:0
qubit"-->6
25 | 8--"1:1
qubit"-->6
26 | end
27 | 2--"0:0
qubit"-->4
28 | 2--"1:1
qubit"-->4
29 | 4--"0:0
qubit"-->3
30 | 4--"1:1
qubit"-->3
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__mmd_empty_dfg.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 5--"0:0
Bool"-->6
18 | end
19 | 2--"0:0
Bool"-->4
20 | 4--"0:0
Bool"-->3
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__mmd_func.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) [**FuncDefn: #quot;test#quot;**]"]
9 | direction LR
10 | style 1 stroke:#832561,stroke-width:3px
11 | 2["(2) Input"]
12 | 3["(3) Output"]
13 | 2--"0:0
Bool"-->3
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/hugr-core/src/hugr/views/snapshots/hugr_core__hugr__views__tests__mmd_module.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/hugr/views/tests.rs
3 | expression: h.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) [**Module**]"]
7 | direction LR
8 | style 0 stroke:#832561,stroke-width:3px
9 | 1["(1) FuncDecl: #quot;test#quot;"]
10 | end
11 |
--------------------------------------------------------------------------------
/hugr-core/src/lib.rs:
--------------------------------------------------------------------------------
1 | //! Extensible, graph-based program representation with first-class support for linear types.
2 | //!
3 | //! This crate contains the core definitions for the HUGR representation.
4 | //! See the [top-level crate documentation](https://docs.rs/hugr/latest/hugr/) for more information.
5 |
6 | // proptest-derive generates many of these warnings.
7 | // https://github.com/rust-lang/rust/issues/120363
8 | // https://github.com/proptest-rs/proptest/issues/447
9 | #![cfg_attr(test, allow(non_local_definitions))]
10 | #![cfg_attr(coverage_nightly, feature(coverage_attribute))]
11 |
12 | pub mod builder;
13 | pub mod core;
14 | pub mod envelope;
15 | pub mod export;
16 | pub mod extension;
17 | pub mod hugr;
18 | pub mod import;
19 | pub mod macros;
20 | pub mod ops;
21 | pub mod package;
22 | pub mod std_extensions;
23 | pub mod types;
24 | pub mod utils;
25 |
26 | pub use crate::core::{
27 | CircuitUnit, Direction, IncomingPort, Node, NodeIndex, OutgoingPort, Port, PortIndex, Wire,
28 | };
29 | pub use crate::extension::Extension;
30 | pub use crate::hugr::{Hugr, HugrView, SimpleReplacement};
31 |
32 | #[cfg(test)]
33 | pub mod proptest;
34 |
--------------------------------------------------------------------------------
/hugr-core/src/snapshots/hugr_core__package__test__dfg.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/package.rs
3 | expression: hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) FuncDefn: #quot;main#quot;"]
9 | direction LR
10 | 2["(2) Input"]
11 | 3["(3) Output"]
12 | subgraph 4 ["(4) [**DFG**]"]
13 | direction LR
14 | style 4 stroke:#832561,stroke-width:3px
15 | 5["(5) Input"]
16 | 6["(6) Output"]
17 | 5--"0:0
Bool"-->6
18 | end
19 | 2--"0:0
Bool"-->4
20 | 4--"0:0
Bool"-->3
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/hugr-core/src/snapshots/hugr_core__package__test__funcdef.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/package.rs
3 | expression: hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) Module"]
7 | direction LR
8 | subgraph 1 ["(1) [**FuncDefn: #quot;test#quot;**]"]
9 | direction LR
10 | style 1 stroke:#832561,stroke-width:3px
11 | 2["(2) Input"]
12 | 3["(3) Output"]
13 | 2--"0:0
Bool"-->3
14 | end
15 | end
16 |
--------------------------------------------------------------------------------
/hugr-core/src/snapshots/hugr_core__package__test__module.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/src/package.rs
3 | expression: hugr.mermaid_string()
4 | ---
5 | graph LR
6 | subgraph 0 ["(0) [**Module**]"]
7 | direction LR
8 | style 0 stroke:#832561,stroke-width:3px
9 | 1["(1) FuncDecl: #quot;test#quot;"]
10 | end
11 |
--------------------------------------------------------------------------------
/hugr-core/src/std_extensions.rs:
--------------------------------------------------------------------------------
1 | //! Experiments for `Extension` definitions.
2 | //!
3 | //! These may be moved to other crates in the future, or dropped altogether.
4 |
5 | use crate::extension::ExtensionRegistry;
6 |
7 | pub mod arithmetic;
8 | pub mod collections;
9 | pub mod logic;
10 | pub mod ptr;
11 |
12 | /// Extension registry with all standard extensions and prelude.
13 | #[must_use]
14 | pub fn std_reg() -> ExtensionRegistry {
15 | let reg = ExtensionRegistry::new([
16 | crate::extension::prelude::PRELUDE.clone(),
17 | arithmetic::int_ops::EXTENSION.to_owned(),
18 | arithmetic::int_types::EXTENSION.to_owned(),
19 | arithmetic::conversions::EXTENSION.to_owned(),
20 | arithmetic::float_ops::EXTENSION.to_owned(),
21 | arithmetic::float_types::EXTENSION.to_owned(),
22 | collections::array::EXTENSION.to_owned(),
23 | collections::list::EXTENSION.to_owned(),
24 | collections::static_array::EXTENSION.to_owned(),
25 | collections::value_array::EXTENSION.to_owned(),
26 | logic::EXTENSION.to_owned(),
27 | ptr::EXTENSION.to_owned(),
28 | ]);
29 | reg.validate()
30 | .expect("Standard extension registry is valid");
31 | reg
32 | }
33 |
34 | lazy_static::lazy_static! {
35 | /// Standard extension registry.
36 | pub static ref STD_REG: ExtensionRegistry = std_reg();
37 | }
38 |
--------------------------------------------------------------------------------
/hugr-core/src/std_extensions/arithmetic/mod.rs:
--------------------------------------------------------------------------------
1 | //! Basic arithmetic operations.
2 |
3 | pub mod conversions;
4 | pub mod float_ops;
5 | pub mod float_types;
6 | pub mod int_ops;
7 | pub mod int_types;
8 |
9 | #[cfg(test)]
10 | mod test {
11 | use crate::{
12 | std_extensions::arithmetic::int_types::{INT_TYPES, int_type},
13 | types::type_param::TypeArg,
14 | };
15 |
16 | use super::int_types::LOG_WIDTH_BOUND;
17 |
18 | #[test]
19 | fn test_int_types() {
20 | for i in 0..LOG_WIDTH_BOUND {
21 | assert_eq!(
22 | INT_TYPES[i as usize],
23 | int_type(TypeArg::BoundedNat { n: u64::from(i) })
24 | );
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-core/src/std_extensions/collections.rs:
--------------------------------------------------------------------------------
1 | //! List type and operations.
2 |
3 | pub mod array;
4 | pub mod list;
5 | pub mod static_array;
6 | pub mod value_array;
7 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_add.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: ast
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import core.meta.description)
10 |
11 | (import core.nat)
12 |
13 | (import core.fn)
14 |
15 | (import arithmetic.int.types.int)
16 |
17 | (declare-operation
18 | arithmetic.int.iadd
19 | (param ?0 core.nat)
20 | (core.fn
21 | [(arithmetic.int.types.int ?0) (arithmetic.int.types.int ?0)]
22 | [(arithmetic.int.types.int ?0)])
23 | (meta
24 | (core.meta.description
25 | "addition modulo 2^N (signed and unsigned versions are the same op)")))
26 |
27 | (define-func
28 | example.add
29 | (core.fn
30 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
31 | [(arithmetic.int.types.int 6)])
32 | (dfg [%0 %1] [%2]
33 | (signature
34 | (core.fn
35 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
36 | [(arithmetic.int.types.int 6)]))
37 | ((arithmetic.int.iadd 6) [%0 %1] [%2]
38 | (signature
39 | (core.fn
40 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
41 | [(arithmetic.int.types.int 6)])))))
42 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_alias.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: "roundtrip(include_str!(\"../../hugr-model/tests/fixtures/model-alias.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import core.fn)
10 |
11 | (import arithmetic.int.types.int)
12 |
13 | (import core.type)
14 |
15 | (declare-alias local.float core.type)
16 |
17 | (define-alias local.int core.type arithmetic.int.types.int)
18 |
19 | (define-alias local.endo core.type (core.fn [] []))
20 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_constraints.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: "roundtrip(include_str!(\"../../hugr-model/tests/fixtures/model-constraints.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import collections.array.array)
10 |
11 | (import core.nat)
12 |
13 | (import core.type)
14 |
15 | (import core.nonlinear)
16 |
17 | (import core.fn)
18 |
19 | (declare-func
20 | array.replicate
21 | (param ?0 core.nat)
22 | (param ?1 core.type)
23 | (where (core.nonlinear ?1))
24 | (core.fn [?1] [(collections.array.array ?0 ?1)]))
25 |
26 | (declare-func
27 | array.copy
28 | (param ?0 core.nat)
29 | (param ?1 core.type)
30 | (where (core.nonlinear ?1))
31 | (core.fn
32 | [(collections.array.array ?0 ?1)]
33 | [(collections.array.array ?0 ?1) (collections.array.array ?0 ?1)]))
34 |
35 | (define-func
36 | util.copy
37 | (param ?0 core.type)
38 | (where (core.nonlinear ?0))
39 | (core.fn [?0] [?0 ?0])
40 | (dfg [%0] [%0 %0] (signature (core.fn [?0] [?0 ?0]))))
41 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_entrypoint.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: "roundtrip(include_str!(\"../../hugr-model/tests/fixtures/model-entrypoint.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import core.fn)
10 |
11 | (import core.entrypoint)
12 |
13 | (define-func main (core.fn [] [])
14 | (dfg (signature (core.fn [] [])) (meta core.entrypoint)))
15 |
16 | (mod)
17 |
18 | (import core.fn)
19 |
20 | (import core.entrypoint)
21 |
22 | (define-func wrapper_dfg (core.fn [] [])
23 | (dfg (signature (core.fn [] [])) (meta core.entrypoint)))
24 |
25 | (mod)
26 |
27 | (import core.make_adt)
28 |
29 | (import core.ctrl)
30 |
31 | (import core.fn)
32 |
33 | (import core.entrypoint)
34 |
35 | (import core.adt)
36 |
37 | (define-func wrapper_cfg (core.fn [] [])
38 | (dfg
39 | (signature (core.fn [] []))
40 | (cfg
41 | (signature (core.fn [] []))
42 | (cfg [%0] [%1]
43 | (signature (core.fn [(core.ctrl [])] [(core.ctrl [])]))
44 | (meta core.entrypoint)
45 | (block [%0] [%1]
46 | (signature (core.fn [(core.ctrl [])] [(core.ctrl [])]))
47 | (dfg [] [%2]
48 | (signature (core.fn [] [(core.adt [[]])]))
49 | ((core.make_adt 0) [] [%2]
50 | (signature (core.fn [] [(core.adt [[]])])))))))))
51 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_loop.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: "roundtrip(include_str!(\"../../hugr-model/tests/fixtures/model-loop.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import core.make_adt)
10 |
11 | (import core.type)
12 |
13 | (import core.fn)
14 |
15 | (import core.adt)
16 |
17 | (define-func example.loop (param ?0 core.type) (core.fn [?0] [?0])
18 | (dfg [%0] [%1]
19 | (signature (core.fn [?0] [?0]))
20 | (tail-loop [%0] [%1]
21 | (signature (core.fn [?0] [?0]))
22 | (dfg [%2] [%3]
23 | (signature (core.fn [?0] [(core.adt [[?0] [?0]])]))
24 | ((core.make_adt 0) [%2] [%3]
25 | (signature (core.fn [?0] [(core.adt [[?0] [?0]])])))))))
26 |
--------------------------------------------------------------------------------
/hugr-core/tests/snapshots/model__roundtrip_params.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-core/tests/model.rs
3 | expression: "roundtrip(include_str!(\"../../hugr-model/tests/fixtures/model-params.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (import core.bytes)
10 |
11 | (import core.nat)
12 |
13 | (import core.call)
14 |
15 | (import core.type)
16 |
17 | (import core.fn)
18 |
19 | (import core.str)
20 |
21 | (import core.float)
22 |
23 | (define-func
24 | example.swap
25 | (param ?0 core.type)
26 | (param ?1 core.type)
27 | (core.fn [?0 ?1] [?1 ?0])
28 | (dfg [%0 %1] [%1 %0] (signature (core.fn [?0 ?1] [?1 ?0]))))
29 |
30 | (declare-func
31 | example.literals
32 | (param ?0 core.str)
33 | (param ?1 core.nat)
34 | (param ?2 core.bytes)
35 | (param ?3 core.float)
36 | (core.fn [] []))
37 |
38 | (define-func example.call_literals (core.fn [] [])
39 | (dfg
40 | (signature (core.fn [] []))
41 | ((core.call
42 | []
43 | []
44 | (example.literals
45 | "string"
46 | 42
47 | (bytes "SGVsbG8gd29ybGQg8J+Yig==")
48 | 6.023e23))
49 | (signature (core.fn [] [])))))
50 |
--------------------------------------------------------------------------------
/hugr-llvm/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "hugr-llvm"
3 | version = "0.20.1"
4 | description = "A general and extensible crate for lowering HUGRs into LLVM IR"
5 |
6 | edition.workspace = true
7 | rust-version.workspace = true
8 |
9 | readme = "README.md"
10 | license.workspace = true
11 | homepage.workspace = true
12 | repository.workspace = true
13 | documentation = "https://docs.rs/hugr-llvm"
14 | authors = ["TKET development team "]
15 | keywords = ["Quantum", "Quantinuum"]
16 | categories = ["compilers"]
17 |
18 | [features]
19 | test-utils = ["insta", "rstest", "portgraph"]
20 |
21 | default = ["llvm14-0"]
22 | llvm14-0 = ["inkwell/llvm14-0"]
23 |
24 | [lints]
25 | workspace = true
26 |
27 | [dependencies]
28 | inkwell = { version = "0.6.0", default-features = false }
29 | hugr-core = { path = "../hugr-core", version = "0.20.1" }
30 | anyhow.workspace = true
31 | itertools.workspace = true
32 | delegate.workspace = true
33 | petgraph.workspace = true
34 | strum.workspace = true
35 |
36 | insta = { workspace = true, optional = true }
37 | rstest = { workspace = true, optional = true }
38 | portgraph = { workspace = true, optional = true }
39 | derive_more = { workspace = true, features = ["debug"] }
40 | lazy_static.workspace = true
41 |
42 | [dev-dependencies]
43 | hugr-llvm = { "path" = ".", features = ["test-utils"] }
44 |
--------------------------------------------------------------------------------
/hugr-llvm/default.nix:
--------------------------------------------------------------------------------
1 | { sources ? import nix/sources.nix
2 | , pkgs ? import sources.nixpkgs {}
3 | , lib ? pkgs.lib
4 | , crane ? import sources.crane { inherit pkgs; }
5 | , stdenv ? pkgs.stdenv
6 | , llvmVersion ? "14"
7 | , llvmPackages ? pkgs."llvmPackages_${llvmVersion}"
8 | , libffi ? pkgs.libffi
9 | , libxml2 ? pkgs.libxml2
10 | }: let
11 | inherit (llvmPackages) libllvm;
12 | commonArgs = {
13 | src = lib.cleanSourceWith {
14 | src = crane.path ./.;
15 | filter = path: t: crane.filterCargoSources path t || (builtins.match ".*\.snap" path != null);
16 | };
17 | strictDeps = true;
18 | buildInputs = [
19 | libllvm
20 | libffi
21 | libxml2
22 | ];
23 | # TODO really we should get the version string from llvmPackages
24 | "LLVM_SYS_${llvmVersion}0_PREFIX" = "${libllvm.dev}";
25 | };
26 | hugr-llvm = crane.buildPackage(commonArgs // {
27 | cargoArtifacts = crane.buildDepsOnly commonArgs;
28 | });
29 | in hugr-llvm
30 |
--------------------------------------------------------------------------------
/hugr-llvm/nix/sources.json:
--------------------------------------------------------------------------------
1 | {
2 | "crane": {
3 | "branch": "master",
4 | "description": "A Nix library for building cargo projects. Never build twice thanks to incremental artifact caching.",
5 | "homepage": "https://crane.dev",
6 | "owner": "ipetkov",
7 | "repo": "crane",
8 | "rev": "7443df1c478947bf96a2e699209f53b2db26209d",
9 | "sha256": "0bvr05wwnli5h2hrgadd73p8s78d54gv3iqhadpbhwlicpnifdaf",
10 | "type": "tarball",
11 | "url": "https://github.com/ipetkov/crane/archive/7443df1c478947bf96a2e699209f53b2db26209d.tar.gz",
12 | "url_template": "https://github.com///archive/.tar.gz"
13 | },
14 | "nixpkgs": {
15 | "branch": "nixpkgs-unstable",
16 | "description": "Nix Packages collection",
17 | "homepage": null,
18 | "owner": "NixOS",
19 | "repo": "nixpkgs",
20 | "rev": "3f316d2a50699a78afe5e77ca486ad553169061e",
21 | "sha256": "1gfnjl8zjai1cjqhx96jjnnq7zjdn0ajd14xmb09jrgnjs0dw1im",
22 | "type": "tarball",
23 | "url": "https://github.com/NixOS/nixpkgs/archive/3f316d2a50699a78afe5e77ca486ad553169061e.tar.gz",
24 | "url_template": "https://github.com///archive/.tar.gz"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__diverse_cfg_children@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | br label %0
14 |
15 | 0: ; preds = %entry_block
16 | switch i1 false, label %1 [
17 | ]
18 |
19 | 1: ; preds = %0
20 | br label %2
21 |
22 | 2: ; preds = %1
23 | ret i1 false
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__diverse_module_children@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.f1.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret void
14 | }
15 |
16 | define void @_hl.f2.4() {
17 | alloca_block:
18 | br label %entry_block
19 |
20 | entry_block: ; preds = %alloca_block
21 | ret void
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__diverse_module_children@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.f1.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret void
14 | }
15 |
16 | define void @_hl.f2.4() {
17 | alloca_block:
18 | br label %entry_block
19 |
20 | entry_block: ; preds = %alloca_block
21 | ret void
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_call@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.main_void.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | call void @_hl.main_void.1()
14 | ret void
15 | }
16 |
17 | define i1 @_hl.main_unary.5(i1 %0) {
18 | alloca_block:
19 | br label %entry_block
20 |
21 | entry_block: ; preds = %alloca_block
22 | %1 = call i1 @_hl.main_unary.5(i1 %0)
23 | ret i1 %1
24 | }
25 |
26 | define { i1, i1 } @_hl.main_binary.9(i1 %0, i1 %1) {
27 | alloca_block:
28 | br label %entry_block
29 |
30 | entry_block: ; preds = %alloca_block
31 | %2 = call { i1, i1 } @_hl.main_binary.9(i1 %0, i1 %1)
32 | %3 = extractvalue { i1, i1 } %2, 0
33 | %4 = extractvalue { i1, i1 } %2, 1
34 | %mrv = insertvalue { i1, i1 } undef, i1 %3, 0
35 | %mrv7 = insertvalue { i1, i1 } %mrv, i1 %4, 1
36 | ret { i1, i1 } %mrv7
37 | }
38 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_call_indirect@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.main_void.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | call void @_hl.main_void.1()
14 | ret void
15 | }
16 |
17 | define i1 @_hl.main_unary.6(i1 %0) {
18 | alloca_block:
19 | br label %entry_block
20 |
21 | entry_block: ; preds = %alloca_block
22 | %1 = call i1 @_hl.main_unary.6(i1 %0)
23 | ret i1 %1
24 | }
25 |
26 | define { i1, i1 } @_hl.main_binary.11(i1 %0, i1 %1) {
27 | alloca_block:
28 | br label %entry_block
29 |
30 | entry_block: ; preds = %alloca_block
31 | %2 = call { i1, i1 } @_hl.main_binary.11(i1 %0, i1 %1)
32 | %3 = extractvalue { i1, i1 } %2, 0
33 | %4 = extractvalue { i1, i1 } %2, 1
34 | %mrv = insertvalue { i1, i1 } undef, i1 %3, 0
35 | %mrv8 = insertvalue { i1, i1 } %mrv, i1 %4, 1
36 | ret { i1, i1 } %mrv8
37 | }
38 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_custom_op@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i16 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %0 = add i16 -24, 24
14 | ret i16 %0
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_custom_op@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i16 @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i16, align 2
11 | %"7_0" = alloca i16, align 2
12 | %"5_0" = alloca i16, align 2
13 | %"8_0" = alloca i16, align 2
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i16 24, i16* %"7_0", align 2
18 | store i16 -24, i16* %"5_0", align 2
19 | %"5_01" = load i16, i16* %"5_0", align 2
20 | %"7_02" = load i16, i16* %"7_0", align 2
21 | %0 = add i16 %"5_01", %"7_02"
22 | store i16 %0, i16* %"8_0", align 2
23 | %"8_03" = load i16, i16* %"8_0", align 2
24 | store i16 %"8_03", i16* %"0", align 2
25 | %"04" = load i16, i16* %"0", align 2
26 | ret i16 %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_dfg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define {} @_hl.main.1({} %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret {} %0
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_dfg@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define {} @_hl.main.1({} %0) {
9 | alloca_block:
10 | %"0" = alloca {}, align 8
11 | %"2_0" = alloca {}, align 8
12 | %"4_0" = alloca {}, align 8
13 | %"5_0" = alloca {}, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store {} %0, {}* %"2_0", align 1
18 | %"2_01" = load {}, {}* %"2_0", align 1
19 | store {} %"2_01", {}* %"5_0", align 1
20 | %"5_02" = load {}, {}* %"5_0", align 1
21 | store {} %"5_02", {}* %"4_0", align 1
22 | %"4_03" = load {}, {}* %"4_0", align 1
23 | store {} %"4_03", {}* %"0", align 1
24 | %"04" = load {}, {}* %"0", align 1
25 | ret {} %"04"
26 | }
27 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_load_constant@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i2, i16 } @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret { i2, i16 } { i2 -2, i16 -24 }
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_load_constant@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i2, i16 } @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca { i2, i16 }, align 8
11 | %"5_0" = alloca { i2, i16 }, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store { i2, i16 } { i2 -2, i16 -24 }, { i2, i16 }* %"5_0", align 2
16 | %"5_01" = load { i2, i16 }, { i2, i16 }* %"5_0", align 2
17 | store { i2, i16 } %"5_01", { i2, i16 }* %"0", align 2
18 | %"02" = load { i2, i16 }, { i2, i16 }* %"0", align 2
19 | ret { i2, i16 } %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_tag@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i2 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i2 1
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__emit_hugr_tag@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i2 @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i2, align 1
11 | %"4_0" = alloca i2, align 1
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store i2 1, i2* %"4_0", align 1
16 | %"4_01" = load i2, i2* %"4_0", align 1
17 | store i2 %"4_01", i2* %"0", align 1
18 | %"02" = load i2, i2* %"0", align 1
19 | ret i2 %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__load_function@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void ()* @_hl.main.2() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret void ()* @_hl.target_func.1
14 | }
15 |
16 | declare void @_hl.target_func.1()
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__load_function@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/emit/test.rs
3 | expression: module.to_string()
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void ()* @_hl.main.2() {
9 | alloca_block:
10 | %"0" = alloca void ()*, align 8
11 | %"5_0" = alloca void ()*, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store void ()* @_hl.target_func.1, void ()** %"5_0", align 8
16 | %"5_01" = load void ()*, void ()** %"5_0", align 8
17 | store void ()* %"5_01", void ()** %"0", align 8
18 | %"02" = load void ()*, void ()** %"0", align 8
19 | ret void ()* %"02"
20 | }
21 |
22 | declare void @_hl.target_func.1()
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/emit/snapshots/hugr_llvm__emit__test__test_fns__tail_loop_simple@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/emit/test.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define {} @_hl.main.1(i64 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | br label %loop_body
14 |
15 | loop_body: ; preds = %3, %entry_block
16 | %"5_0.0" = phi i64 [ %0, %entry_block ], [ %4, %3 ]
17 | %1 = insertvalue { i1, i64 } { i1 false, i64 poison }, i64 %"5_0.0", 1
18 | %2 = extractvalue { i1, i64 } %1, 0
19 | switch i1 %2, label %3 [
20 | i1 true, label %5
21 | ]
22 |
23 | 3: ; preds = %loop_body
24 | %4 = extractvalue { i1, i64 } %1, 1
25 | br label %loop_body
26 |
27 | 5: ; preds = %loop_body
28 | br label %loop_out
29 |
30 | loop_out: ; preds = %5
31 | ret {} undef
32 | }
33 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension.rs:
--------------------------------------------------------------------------------
1 | pub mod collections;
2 | pub mod conversions;
3 | pub mod float;
4 | pub mod int;
5 | pub mod logic;
6 | pub mod prelude;
7 |
8 | pub use prelude::{DefaultPreludeCodegen, PreludeCodegen, PreludeCodegenExtension};
9 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections.rs:
--------------------------------------------------------------------------------
1 | //! Emission logic for collections.
2 |
3 | pub mod array;
4 | pub mod list;
5 | pub mod stack_array;
6 | pub mod static_array;
7 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__array__test__emit_array_value@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i64*, i64 } @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %0 = call i8* @malloc(i64 mul (i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 2))
14 | %1 = bitcast i8* %0 to i64*
15 | %2 = insertvalue { i64*, i64 } poison, i64* %1, 0
16 | %3 = insertvalue { i64*, i64 } %2, i64 0, 1
17 | %4 = getelementptr inbounds i64, i64* %1, i32 0
18 | store i64 1, i64* %4, align 4
19 | %5 = getelementptr inbounds i64, i64* %1, i32 1
20 | store i64 2, i64* %5, align 4
21 | ret { i64*, i64 } %3
22 | }
23 |
24 | declare i8* @malloc(i64)
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__array__test__emit_array_value@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i64*, i64 } @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca { i64*, i64 }, align 8
11 | %"5_0" = alloca { i64*, i64 }, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %0 = call i8* @malloc(i64 mul (i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 2))
16 | %1 = bitcast i8* %0 to i64*
17 | %2 = insertvalue { i64*, i64 } poison, i64* %1, 0
18 | %3 = insertvalue { i64*, i64 } %2, i64 0, 1
19 | %4 = getelementptr inbounds i64, i64* %1, i32 0
20 | store i64 1, i64* %4, align 4
21 | %5 = getelementptr inbounds i64, i64* %1, i32 1
22 | store i64 2, i64* %5, align 4
23 | store { i64*, i64 } %3, { i64*, i64 }* %"5_0", align 8
24 | %"5_01" = load { i64*, i64 }, { i64*, i64 }* %"5_0", align 8
25 | store { i64*, i64 } %"5_01", { i64*, i64 }* %"0", align 8
26 | %"02" = load { i64*, i64 }, { i64*, i64 }* %"0", align 8
27 | ret { i64*, i64 } %"02"
28 | }
29 |
30 | declare i8* @malloc(i64)
31 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__const@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8* @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %0 = call i8* @__rt__list__new(i64 3, i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 8, i8* null)
14 | %1 = alloca i64, align 8
15 | store i64 1, i64* %1, align 4
16 | %2 = bitcast i64* %1 to i8*
17 | call void @__rt__list__push(i8* %0, i8* %2)
18 | %3 = alloca i64, align 8
19 | store i64 2, i64* %3, align 4
20 | %4 = bitcast i64* %3 to i8*
21 | call void @__rt__list__push(i8* %0, i8* %4)
22 | %5 = alloca i64, align 8
23 | store i64 3, i64* %5, align 4
24 | %6 = bitcast i64* %5 to i8*
25 | call void @__rt__list__push(i8* %0, i8* %6)
26 | ret i8* %0
27 | }
28 |
29 | declare i8* @__rt__list__new(i64, i64, i64, i8*)
30 |
31 | declare void @__rt__list__push(i8*, i8*)
32 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__const@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8* @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i8*, align 8
11 | %"5_0" = alloca i8*, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %0 = call i8* @__rt__list__new(i64 3, i64 ptrtoint (i64* getelementptr (i64, i64* null, i32 1) to i64), i64 8, i8* null)
16 | %1 = alloca i64, align 8
17 | store i64 1, i64* %1, align 4
18 | %2 = bitcast i64* %1 to i8*
19 | call void @__rt__list__push(i8* %0, i8* %2)
20 | %3 = alloca i64, align 8
21 | store i64 2, i64* %3, align 4
22 | %4 = bitcast i64* %3 to i8*
23 | call void @__rt__list__push(i8* %0, i8* %4)
24 | %5 = alloca i64, align 8
25 | store i64 3, i64* %5, align 4
26 | %6 = bitcast i64* %5 to i8*
27 | call void @__rt__list__push(i8* %0, i8* %6)
28 | store i8* %0, i8** %"5_0", align 8
29 | %"5_01" = load i8*, i8** %"5_0", align 8
30 | store i8* %"5_01", i8** %"0", align 8
31 | %"02" = load i8*, i8** %"0", align 8
32 | ret i8* %"02"
33 | }
34 |
35 | declare i8* @__rt__list__new(i64, i64, i64, i8*)
36 |
37 | declare void @__rt__list__push(i8*, i8*)
38 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__get@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i1, i16 } @_hl.main.1(i8* %0, i64 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = alloca i16, align 2
14 | %3 = bitcast i16* %2 to i8*
15 | %4 = call i1 @__rt__list__get(i8* %0, i64 %1, i8* %3)
16 | %5 = bitcast i8* %3 to i16*
17 | %6 = load i16, i16* %5, align 2
18 | %7 = insertvalue { i1, i16 } { i1 true, i16 poison }, i16 %6, 1
19 | %8 = select i1 %4, { i1, i16 } %7, { i1, i16 } { i1 false, i16 poison }
20 | ret { i1, i16 } %8
21 | }
22 |
23 | declare i1 @__rt__list__get(i8*, i64, i8*)
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__insert@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i8*, { i1, i16 } } @_hl.main.1(i8* %0, i64 %1, i16 %2) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %3 = alloca i16, align 2
14 | store i16 %2, i16* %3, align 2
15 | %4 = bitcast i16* %3 to i8*
16 | %5 = call i1 @__rt__list__insert(i8* %0, i64 %1, i8* %4)
17 | %6 = insertvalue { i1, i16 } { i1 false, i16 poison }, i16 %2, 1
18 | %7 = select i1 %5, { i1, i16 } { i1 true, i16 poison }, { i1, i16 } %6
19 | %mrv = insertvalue { i8*, { i1, i16 } } undef, i8* %0, 0
20 | %mrv8 = insertvalue { i8*, { i1, i16 } } %mrv, { i1, i16 } %7, 1
21 | ret { i8*, { i1, i16 } } %mrv8
22 | }
23 |
24 | declare i1 @__rt__list__insert(i8*, i64, i8*)
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__length@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i8*, i64 } @_hl.main.1(i8* %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = call i64 @__rt__list__length(i8* %0)
14 | %mrv = insertvalue { i8*, i64 } undef, i8* %0, 0
15 | %mrv6 = insertvalue { i8*, i64 } %mrv, i64 %1, 1
16 | ret { i8*, i64 } %mrv6
17 | }
18 |
19 | declare i64 @__rt__list__length(i8*)
20 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__length@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i8*, i64 } @_hl.main.1(i8* %0) {
9 | alloca_block:
10 | %"0" = alloca i8*, align 8
11 | %"1" = alloca i64, align 8
12 | %"2_0" = alloca i8*, align 8
13 | %"4_0" = alloca i8*, align 8
14 | %"4_1" = alloca i64, align 8
15 | br label %entry_block
16 |
17 | entry_block: ; preds = %alloca_block
18 | store i8* %0, i8** %"2_0", align 8
19 | %"2_01" = load i8*, i8** %"2_0", align 8
20 | %1 = call i64 @__rt__list__length(i8* %"2_01")
21 | store i8* %"2_01", i8** %"4_0", align 8
22 | store i64 %1, i64* %"4_1", align 4
23 | %"4_02" = load i8*, i8** %"4_0", align 8
24 | %"4_13" = load i64, i64* %"4_1", align 4
25 | store i8* %"4_02", i8** %"0", align 8
26 | store i64 %"4_13", i64* %"1", align 4
27 | %"04" = load i8*, i8** %"0", align 8
28 | %"15" = load i64, i64* %"1", align 4
29 | %mrv = insertvalue { i8*, i64 } undef, i8* %"04", 0
30 | %mrv6 = insertvalue { i8*, i64 } %mrv, i64 %"15", 1
31 | ret { i8*, i64 } %mrv6
32 | }
33 |
34 | declare i64 @__rt__list__length(i8*)
35 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__pop@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i8*, { i1, i16 } } @_hl.main.1(i8* %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = alloca i16, align 2
14 | %2 = bitcast i16* %1 to i8*
15 | %3 = call i1 @__rt__list__pop(i8* %0, i8* %2)
16 | %4 = bitcast i8* %2 to i16*
17 | %5 = load i16, i16* %4, align 2
18 | %6 = insertvalue { i1, i16 } { i1 true, i16 poison }, i16 %5, 1
19 | %7 = select i1 %3, { i1, i16 } %6, { i1, i16 } { i1 false, i16 poison }
20 | %mrv = insertvalue { i8*, { i1, i16 } } undef, i8* %0, 0
21 | %mrv6 = insertvalue { i8*, { i1, i16 } } %mrv, { i1, i16 } %7, 1
22 | ret { i8*, { i1, i16 } } %mrv6
23 | }
24 |
25 | declare i1 @__rt__list__pop(i8*, i8*)
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__push@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8* @_hl.main.1(i8* %0, i16 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = alloca i16, align 2
14 | store i16 %1, i16* %2, align 2
15 | %3 = bitcast i16* %2 to i8*
16 | call void @__rt__list__push(i8* %0, i8* %3)
17 | ret i8* %0
18 | }
19 |
20 | declare void @__rt__list__push(i8*, i8*)
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__push@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8* @_hl.main.1(i8* %0, i16 %1) {
9 | alloca_block:
10 | %"0" = alloca i8*, align 8
11 | %"2_0" = alloca i8*, align 8
12 | %"2_1" = alloca i16, align 2
13 | %"4_0" = alloca i8*, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i8* %0, i8** %"2_0", align 8
18 | store i16 %1, i16* %"2_1", align 2
19 | %"2_01" = load i8*, i8** %"2_0", align 8
20 | %"2_12" = load i16, i16* %"2_1", align 2
21 | %2 = alloca i16, align 2
22 | store i16 %"2_12", i16* %2, align 2
23 | %3 = bitcast i16* %2 to i8*
24 | call void @__rt__list__push(i8* %"2_01", i8* %3)
25 | store i8* %"2_01", i8** %"4_0", align 8
26 | %"4_03" = load i8*, i8** %"4_0", align 8
27 | store i8* %"4_03", i8** %"0", align 8
28 | %"04" = load i8*, i8** %"0", align 8
29 | ret i8* %"04"
30 | }
31 |
32 | declare void @__rt__list__push(i8*, i8*)
33 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__list__test__set@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/list.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i8*, { i1, i16 } } @_hl.main.1(i8* %0, i64 %1, i16 %2) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %3 = alloca i16, align 2
14 | store i16 %2, i16* %3, align 2
15 | %4 = bitcast i16* %3 to i8*
16 | %5 = call i1 @__rt__list__set(i8* %0, i64 %1, i8* %4)
17 | %6 = bitcast i8* %4 to i16*
18 | %7 = load i16, i16* %6, align 2
19 | %8 = insertvalue { i1, i16 } { i1 false, i16 poison }, i16 %7, 1
20 | %9 = insertvalue { i1, i16 } { i1 true, i16 poison }, i16 %2, 1
21 | %10 = select i1 %5, { i1, i16 } %9, { i1, i16 } %8
22 | %mrv = insertvalue { i8*, { i1, i16 } } undef, i8* %0, 0
23 | %mrv8 = insertvalue { i8*, { i1, i16 } } %mrv, { i1, i16 } %10, 1
24 | ret { i8*, { i1, i16 } } %mrv8
25 | }
26 |
27 | declare i1 @__rt__list__set(i8*, i64, i8*)
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__stack_array__test__emit_array_value@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/stack_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define [2 x i64] @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret [2 x i64] [i64 1, i64 2]
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__stack_array__test__emit_array_value@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/stack_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define [2 x i64] @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca [2 x i64], align 8
11 | %"5_0" = alloca [2 x i64], align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store [2 x i64] [i64 1, i64 2], [2 x i64]* %"5_0", align 4
16 | %"5_01" = load [2 x i64], [2 x i64]* %"5_0", align 4
17 | store [2 x i64] %"5_01", [2 x i64]* %"0", align 4
18 | %"02" = load [2 x i64], [2 x i64]* %"0", align 4
19 | ret [2 x i64] %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__stack_array__test__emit_clone@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/stack_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %0 = insertvalue [2 x i64] undef, i64 1, 0
14 | %1 = insertvalue [2 x i64] %0, i64 2, 1
15 | ret void
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__stack_array__test__emit_clone@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/stack_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.main.1() {
9 | alloca_block:
10 | %"7_0" = alloca i64, align 8
11 | %"5_0" = alloca i64, align 8
12 | %"8_0" = alloca [2 x i64], align 8
13 | %"9_0" = alloca [2 x i64], align 8
14 | %"9_1" = alloca [2 x i64], align 8
15 | br label %entry_block
16 |
17 | entry_block: ; preds = %alloca_block
18 | store i64 2, i64* %"7_0", align 4
19 | store i64 1, i64* %"5_0", align 4
20 | %"5_01" = load i64, i64* %"5_0", align 4
21 | %"7_02" = load i64, i64* %"7_0", align 4
22 | %0 = insertvalue [2 x i64] undef, i64 %"5_01", 0
23 | %1 = insertvalue [2 x i64] %0, i64 %"7_02", 1
24 | store [2 x i64] %1, [2 x i64]* %"8_0", align 4
25 | %"8_03" = load [2 x i64], [2 x i64]* %"8_0", align 4
26 | store [2 x i64] %"8_03", [2 x i64]* %"9_0", align 4
27 | store [2 x i64] %"8_03", [2 x i64]* %"9_1", align 4
28 | %"9_14" = load [2 x i64], [2 x i64]* %"9_1", align 4
29 | %"9_05" = load [2 x i64], [2 x i64]* %"9_0", align 4
30 | ret void
31 | }
32 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__stack_array__test__emit_get@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/stack_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define void @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %0 = insertvalue [2 x i64] undef, i64 1, 0
14 | %1 = insertvalue [2 x i64] %0, i64 2, 1
15 | %2 = icmp ult i64 1, 2
16 | br i1 %2, label %4, label %3
17 |
18 | 3: ; preds = %entry_block
19 | br label %10
20 |
21 | 4: ; preds = %entry_block
22 | %5 = alloca i64, i32 2, align 8
23 | %6 = bitcast i64* %5 to [2 x i64]*
24 | store [2 x i64] %1, [2 x i64]* %6, align 4
25 | %7 = getelementptr inbounds i64, i64* %5, i64 1
26 | %8 = load i64, i64* %7, align 4
27 | %9 = insertvalue { i1, i64 } { i1 true, i64 poison }, i64 %8, 1
28 | br label %10
29 |
30 | 10: ; preds = %3, %4
31 | %"0.0" = phi { i1, i64 } [ %9, %4 ], [ { i1 false, i64 poison }, %3 ]
32 | ret void
33 | }
34 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_0.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.a.97cb22bf.0 = constant { i64, [10 x i64] } { i64 10, [10 x i64] [i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9] }
9 |
10 | define { i64, [0 x i64] }* @_hl.main.1() {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | ret { i64, [0 x i64] }* bitcast ({ i64, [10 x i64] }* @sa.a.97cb22bf.0 to { i64, [0 x i64] }*)
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.b.150c532c.0 = constant { i64, [10 x double] } { i64 10, [10 x double] [double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00] }
9 |
10 | define { i64, [0 x double] }* @_hl.main.1() {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | ret { i64, [0 x double] }* bitcast ({ i64, [10 x double] }* @sa.b.150c532c.0 to { i64, [0 x double] }*)
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.c.d2dddd66.0 = constant { i64, [10 x i1] } { i64 10, [10 x i1] [i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false] }
9 |
10 | define { i64, [0 x i1] }* @_hl.main.1() {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | ret { i64, [0 x i1] }* bitcast ({ i64, [10 x i1] }* @sa.c.d2dddd66.0 to { i64, [0 x i1] }*)
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@llvm14_3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.d.eee08a59.0 = constant { i64, [10 x { i1, i64 }] } { i64 10, [10 x { i1, i64 }] [{ i1, i64 } { i1 true, i64 0 }, { i1, i64 } { i1 true, i64 1 }, { i1, i64 } { i1 true, i64 2 }, { i1, i64 } { i1 true, i64 3 }, { i1, i64 } { i1 true, i64 4 }, { i1, i64 } { i1 true, i64 5 }, { i1, i64 } { i1 true, i64 6 }, { i1, i64 } { i1 true, i64 7 }, { i1, i64 } { i1 true, i64 8 }, { i1, i64 } { i1 true, i64 9 }] }
9 |
10 | define { i64, [0 x { i1, i64 }] }* @_hl.main.1() {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | ret { i64, [0 x { i1, i64 }] }* bitcast ({ i64, [10 x { i1, i64 }] }* @sa.d.eee08a59.0 to { i64, [0 x { i1, i64 }] }*)
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_0.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.a.97cb22bf.0 = constant { i64, [10 x i64] } { i64 10, [10 x i64] [i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9] }
9 |
10 | define { i64, [0 x i64] }* @_hl.main.1() {
11 | alloca_block:
12 | %"0" = alloca { i64, [0 x i64] }*, align 8
13 | %"5_0" = alloca { i64, [0 x i64] }*, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store { i64, [0 x i64] }* bitcast ({ i64, [10 x i64] }* @sa.a.97cb22bf.0 to { i64, [0 x i64] }*), { i64, [0 x i64] }** %"5_0", align 8
18 | %"5_01" = load { i64, [0 x i64] }*, { i64, [0 x i64] }** %"5_0", align 8
19 | store { i64, [0 x i64] }* %"5_01", { i64, [0 x i64] }** %"0", align 8
20 | %"02" = load { i64, [0 x i64] }*, { i64, [0 x i64] }** %"0", align 8
21 | ret { i64, [0 x i64] }* %"02"
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.b.150c532c.0 = constant { i64, [10 x double] } { i64 10, [10 x double] [double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 6.000000e+00, double 7.000000e+00, double 8.000000e+00, double 9.000000e+00] }
9 |
10 | define { i64, [0 x double] }* @_hl.main.1() {
11 | alloca_block:
12 | %"0" = alloca { i64, [0 x double] }*, align 8
13 | %"5_0" = alloca { i64, [0 x double] }*, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store { i64, [0 x double] }* bitcast ({ i64, [10 x double] }* @sa.b.150c532c.0 to { i64, [0 x double] }*), { i64, [0 x double] }** %"5_0", align 8
18 | %"5_01" = load { i64, [0 x double] }*, { i64, [0 x double] }** %"5_0", align 8
19 | store { i64, [0 x double] }* %"5_01", { i64, [0 x double] }** %"0", align 8
20 | %"02" = load { i64, [0 x double] }*, { i64, [0 x double] }** %"0", align 8
21 | ret { i64, [0 x double] }* %"02"
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_const_codegen@pre-mem2reg@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sa.c.d2dddd66.0 = constant { i64, [10 x i1] } { i64 10, [10 x i1] [i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false] }
9 |
10 | define { i64, [0 x i1] }* @_hl.main.1() {
11 | alloca_block:
12 | %"0" = alloca { i64, [0 x i1] }*, align 8
13 | %"5_0" = alloca { i64, [0 x i1] }*, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store { i64, [0 x i1] }* bitcast ({ i64, [10 x i1] }* @sa.c.d2dddd66.0 to { i64, [0 x i1] }*), { i64, [0 x i1] }** %"5_0", align 8
18 | %"5_01" = load { i64, [0 x i1] }*, { i64, [0 x i1] }** %"5_0", align 8
19 | store { i64, [0 x i1] }* %"5_01", { i64, [0 x i1] }** %"0", align 8
20 | %"02" = load { i64, [0 x i1] }*, { i64, [0 x i1] }** %"0", align 8
21 | ret { i64, [0 x i1] }* %"02"
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1({ i64, [0 x i64] }* %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = getelementptr inbounds { i64, [0 x i64] }, { i64, [0 x i64] }* %0, i32 0, i32 0
14 | %2 = load i64, i64* %1, align 4
15 | ret i64 %2
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@llvm14_3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1({ i64, [0 x i1] }* %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = getelementptr inbounds { i64, [0 x i1] }, { i64, [0 x i1] }* %0, i32 0, i32 0
14 | %2 = load i64, i64* %1, align 4
15 | ret i64 %2
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1({ i64, [0 x i64] }* %0) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca { i64, [0 x i64] }*, align 8
12 | %"4_0" = alloca i64, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store { i64, [0 x i64] }* %0, { i64, [0 x i64] }** %"2_0", align 8
17 | %"2_01" = load { i64, [0 x i64] }*, { i64, [0 x i64] }** %"2_0", align 8
18 | %1 = getelementptr inbounds { i64, [0 x i64] }, { i64, [0 x i64] }* %"2_01", i32 0, i32 0
19 | %2 = load i64, i64* %1, align 4
20 | store i64 %2, i64* %"4_0", align 4
21 | %"4_02" = load i64, i64* %"4_0", align 4
22 | store i64 %"4_02", i64* %"0", align 4
23 | %"03" = load i64, i64* %"0", align 4
24 | ret i64 %"03"
25 | }
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/collections/snapshots/hugr_llvm__extension__collections__static_array__test__static_array_op_codegen@pre-mem2reg@llvm14_3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/collections/static_array.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1({ i64, [0 x i1] }* %0) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca { i64, [0 x i1] }*, align 8
12 | %"4_0" = alloca i64, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store { i64, [0 x i1] }* %0, { i64, [0 x i1] }** %"2_0", align 8
17 | %"2_01" = load { i64, [0 x i1] }*, { i64, [0 x i1] }** %"2_0", align 8
18 | %1 = getelementptr inbounds { i64, [0 x i1] }, { i64, [0 x i1] }* %"2_01", i32 0, i32 0
19 | %2 = load i64, i64* %1, align 4
20 | store i64 %2, i64* %"4_0", align 4
21 | %"4_02" = load i64, i64* %"4_0", align 4
22 | store i64 %"4_02", i64* %"0", align 4
23 | %"03" = load i64, i64* %"0", align 4
24 | ret i64 %"03"
25 | }
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__convert_s@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(i32 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = sitofp i32 %0 to double
14 | ret double %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__convert_s@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(i32 %0) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca i32, align 4
12 | %"4_0" = alloca double, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i32 %0, i32* %"2_0", align 4
17 | %"2_01" = load i32, i32* %"2_0", align 4
18 | %1 = sitofp i32 %"2_01" to double
19 | store double %1, double* %"4_0", align 8
20 | %"4_02" = load double, double* %"4_0", align 8
21 | store double %"4_02", double* %"0", align 8
22 | %"03" = load double, double* %"0", align 8
23 | ret double %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__convert_u@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(i16 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = uitofp i16 %0 to double
14 | ret double %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__convert_u@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(i16 %0) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca i16, align 2
12 | %"4_0" = alloca double, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i16 %0, i16* %"2_0", align 2
17 | %"2_01" = load i16, i16* %"2_0", align 2
18 | %1 = uitofp i16 %"2_01" to double
19 | store double %1, double* %"4_0", align 8
20 | %"4_02" = load double, double* %"4_0", align 8
21 | store double %"4_02", double* %"0", align 8
22 | %"03" = load double, double* %"0", align 8
23 | ret double %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__ifrombool@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i1 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = icmp eq i1 %0, true
14 | %2 = select i1 %1, i8 1, i8 0
15 | ret i8 %2
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__ifrombool@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i1 %0) {
9 | alloca_block:
10 | %"0" = alloca i8, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"4_0" = alloca i8, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i1 %0, i1* %"2_0", align 1
17 | %"2_01" = load i1, i1* %"2_0", align 1
18 | %1 = icmp eq i1 %"2_01", true
19 | %2 = select i1 %1, i8 1, i8 0
20 | store i8 %2, i8* %"4_0", align 1
21 | %"4_02" = load i8, i8* %"4_0", align 1
22 | store i8 %"4_02", i8* %"0", align 1
23 | %"03" = load i8, i8* %"0", align 1
24 | ret i8 %"03"
25 | }
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__itobool@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %eq1 = icmp eq i8 %0, 1
14 | %1 = select i1 %eq1, i1 true, i1 false
15 | ret i1 %1
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__itobool@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i1, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | %eq1 = icmp eq i8 %"2_01", 1
19 | %1 = select i1 %eq1, i1 true, i1 false
20 | store i1 %1, i1* %"4_0", align 1
21 | %"4_02" = load i1, i1* %"4_0", align 1
22 | store i1 %"4_02", i1* %"0", align 1
23 | %"03" = load i1, i1* %"0", align 1
24 | ret i1 %"03"
25 | }
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__trunc_s@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [58 x i8] c"Float value too big to convert to int of given width (32)\00", align 1
9 |
10 | define { i1, { i32, i8* }, i32 } @_hl.main.1(double %0) {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %within_upper_bound = fcmp olt double %0, 0x41DFFFFFFFC00000
16 | %within_lower_bound = fcmp ole double 0xC1E0000000000000, %0
17 | %success = and i1 %within_upper_bound, %within_lower_bound
18 | %trunc_result = fptosi double %0 to i32
19 | %1 = insertvalue { i1, { i32, i8* }, i32 } { i1 true, { i32, i8* } poison, i32 poison }, i32 %trunc_result, 2
20 | %2 = select i1 %success, { i1, { i32, i8* }, i32 } %1, { i1, { i32, i8* }, i32 } { i1 false, { i32, i8* } { i32 2, i8* getelementptr inbounds ([58 x i8], [58 x i8]* @0, i32 0, i32 0) }, i32 poison }
21 | ret { i1, { i32, i8* }, i32 } %2
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__conversions__test__trunc_u@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/conversions.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [58 x i8] c"Float value too big to convert to int of given width (64)\00", align 1
9 |
10 | define { i1, { i32, i8* }, i64 } @_hl.main.1(double %0) {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %within_upper_bound = fcmp olt double %0, 0x43F0000000000000
16 | %within_lower_bound = fcmp ole double 0.000000e+00, %0
17 | %success = and i1 %within_upper_bound, %within_lower_bound
18 | %trunc_result = fptoui double %0 to i64
19 | %1 = insertvalue { i1, { i32, i8* }, i64 } { i1 true, { i32, i8* } poison, i64 poison }, i64 %trunc_result, 2
20 | %2 = select i1 %success, { i1, { i32, i8* }, i64 } %1, { i1, { i32, i8* }, i64 } { i1 false, { i32, i8* } { i32 2, i8* getelementptr inbounds ([58 x i8], [58 x i8]* @0, i32 0, i32 0) }, i64 poison }
21 | ret { i1, { i32, i8* }, i64 } %2
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__const_float@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret double 3.120000e+00
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__const_float@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"5_0" = alloca double, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store double 3.120000e+00, double* %"5_0", align 8
16 | %"5_01" = load double, double* %"5_0", align 8
17 | store double %"5_01", double* %"0", align 8
18 | %"02" = load double, double* %"0", align 8
19 | ret double %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fadd@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fadd double %0, %1
14 | ret double %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fadd@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca double, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fadd double %"2_01", %"2_12"
22 | store double %2, double* %"4_0", align 8
23 | %"4_03" = load double, double* %"4_0", align 8
24 | store double %"4_03", double* %"0", align 8
25 | %"04" = load double, double* %"0", align 8
26 | ret double %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fdiv@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fdiv double %0, %1
14 | ret double %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fdiv@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca double, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fdiv double %"2_01", %"2_12"
22 | store double %2, double* %"4_0", align 8
23 | %"4_03" = load double, double* %"4_0", align 8
24 | store double %"4_03", double* %"0", align 8
25 | %"04" = load double, double* %"0", align 8
26 | ret double %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__feq@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp oeq double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__feq@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp oeq double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fge@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp oge double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fge@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp oge double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fgt@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp ogt double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fgt@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp ogt double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fle@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp ole double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fle@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp ole double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__flt@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp olt double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__flt@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp olt double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fmul@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fmul double %0, %1
14 | ret double %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fmul@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca double, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fmul double %"2_01", %"2_12"
22 | store double %2, double* %"4_0", align 8
23 | %"4_03" = load double, double* %"4_0", align 8
24 | store double %"4_03", double* %"0", align 8
25 | %"04" = load double, double* %"0", align 8
26 | ret double %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fne@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fcmp one double %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fne@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fcmp one double %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fneg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = fneg double %0
14 | ret double %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fneg@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"4_0" = alloca double, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store double %0, double* %"2_0", align 8
17 | %"2_01" = load double, double* %"2_0", align 8
18 | %1 = fneg double %"2_01"
19 | store double %1, double* %"4_0", align 8
20 | %"4_02" = load double, double* %"4_0", align 8
21 | store double %"4_02", double* %"0", align 8
22 | %"03" = load double, double* %"0", align 8
23 | ret double %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fpow@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = call double @llvm.pow.f64(double %0, double %1)
14 | ret double %2
15 | }
16 |
17 | ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
18 | declare double @llvm.pow.f64(double, double) #0
19 |
20 | attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fpow@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca double, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = call double @llvm.pow.f64(double %"2_01", double %"2_12")
22 | store double %2, double* %"4_0", align 8
23 | %"4_03" = load double, double* %"4_0", align 8
24 | store double %"4_03", double* %"0", align 8
25 | %"04" = load double, double* %"0", align 8
26 | ret double %"04"
27 | }
28 |
29 | ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
30 | declare double @llvm.pow.f64(double, double) #0
31 |
32 | attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
33 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fsub@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = fsub double %0, %1
14 | ret double %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__float__test__fsub@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/float.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define double @_hl.main.1(double %0, double %1) {
9 | alloca_block:
10 | %"0" = alloca double, align 8
11 | %"2_0" = alloca double, align 8
12 | %"2_1" = alloca double, align 8
13 | %"4_0" = alloca double, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store double %0, double* %"2_0", align 8
18 | store double %1, double* %"2_1", align 8
19 | %"2_01" = load double, double* %"2_0", align 8
20 | %"2_12" = load double, double* %"2_1", align 8
21 | %2 = fsub double %"2_01", %"2_12"
22 | store double %2, double* %"4_0", align 8
23 | %"4_03" = load double, double* %"4_0", align 8
24 | store double %"4_03", double* %"0", align 8
25 | %"04" = load double, double* %"0", align 8
26 | ret double %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__emission@llvm14_idivmod_checked_u_[6].snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [24 x i8] c"Attempted division by 0\00", align 1
9 |
10 | define { i1, { i64, i64 }, { i32, i8* } } @_hl.main.1(i64 %0, i64 %1) {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %valid_div = icmp ne i64 %1, 0
16 | %quotient = udiv i64 %0, %1
17 | %remainder = urem i64 %0, %1
18 | %2 = insertvalue { i64, i64 } poison, i64 %quotient, 0
19 | %3 = insertvalue { i64, i64 } %2, i64 %remainder, 1
20 | %4 = insertvalue { i1, { i64, i64 }, { i32, i8* } } { i1 true, { i64, i64 } poison, { i32, i8* } poison }, { i64, i64 } %3, 1
21 | %5 = select i1 %valid_div, { i1, { i64, i64 }, { i32, i8* } } %4, { i1, { i64, i64 }, { i32, i8* } } { i1 false, { i64, i64 } poison, { i32, i8* } { i32 2, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @0, i32 0, i32 0) } }
22 | ret { i1, { i64, i64 }, { i32, i8* } } %5
23 | }
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__emission@llvm14_ineg_[2].snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = sub i8 0, %0
14 | ret i8 %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__emission@llvm14_is_to_u_[3].snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [33 x i8] c"is_to_u called on negative value\00", align 1
9 | @prelude.panic_template = private unnamed_addr constant [34 x i8] c"Program panicked (signal %i): %s\0A\00", align 1
10 |
11 | define i8 @_hl.main.1(i8 %0) {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %bounds_check = icmp sge i8 %0, 0
17 | br label %panic_if_0
18 |
19 | panic_if_0: ; preds = %entry_block
20 | switch i1 %bounds_check, label %panic [
21 | i1 true, label %exit
22 | ]
23 |
24 | panic: ; preds = %panic_if_0
25 | %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @prelude.panic_template, i32 0, i32 0), i32 2, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @0, i32 0, i32 0))
26 | call void @abort()
27 | br label %exit
28 |
29 | exit: ; preds = %panic_if_0, %panic
30 | ret i8 %0
31 | }
32 |
33 | declare i32 @printf(i8*, ...)
34 |
35 | declare void @abort()
36 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__emission@llvm14_iu_to_s_[3].snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [31 x i8] c"iu_to_s argument out of bounds\00", align 1
9 | @prelude.panic_template = private unnamed_addr constant [34 x i8] c"Program panicked (signal %i): %s\0A\00", align 1
10 |
11 | define i8 @_hl.main.1(i8 %0) {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %bounds_check = icmp ule i8 %0, 127
17 | br label %panic_if_0
18 |
19 | panic_if_0: ; preds = %entry_block
20 | switch i1 %bounds_check, label %panic [
21 | i1 true, label %exit
22 | ]
23 |
24 | panic: ; preds = %panic_if_0
25 | %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @prelude.panic_template, i32 0, i32 0), i32 2, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @0, i32 0, i32 0))
26 | call void @abort()
27 | br label %exit
28 |
29 | exit: ; preds = %panic_if_0, %panic
30 | ret i8 %0
31 | }
32 |
33 | declare i32 @printf(i8*, ...)
34 |
35 | declare void @abort()
36 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__emission@pre-mem2reg@llvm14_ineg_[2].snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i8, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i8, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | %1 = sub i8 0, %"2_01"
19 | store i8 %1, i8* %"4_0", align 1
20 | %"4_02" = load i8, i8* %"4_0", align 1
21 | store i8 %"4_02", i8* %"0", align 1
22 | %"03" = load i8, i8* %"0", align 1
23 | ret i8 %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iadd@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = add i8 %0, %1
14 | ret i8 %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iadd@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | %"0" = alloca i8, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"2_1" = alloca i8, align 1
13 | %"4_0" = alloca i8, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i8 %0, i8* %"2_0", align 1
18 | store i8 %1, i8* %"2_1", align 1
19 | %"2_01" = load i8, i8* %"2_0", align 1
20 | %"2_12" = load i8, i8* %"2_1", align 1
21 | %2 = add i8 %"2_01", %"2_12"
22 | store i8 %2, i8* %"4_0", align 1
23 | %"4_03" = load i8, i8* %"4_0", align 1
24 | store i8 %"4_03", i8* %"0", align 1
25 | %"04" = load i8, i8* %"0", align 1
26 | ret i8 %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__ieq@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = icmp eq i8 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__ieq@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"2_1" = alloca i8, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i8 %0, i8* %"2_0", align 1
18 | store i8 %1, i8* %"2_1", align 1
19 | %"2_01" = load i8, i8* %"2_0", align 1
20 | %"2_12" = load i8, i8* %"2_1", align 1
21 | %2 = icmp eq i8 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__ilt_s@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = icmp slt i8 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__ilt_s@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i8 %0, i8 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"2_1" = alloca i8, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i8 %0, i8* %"2_0", align 1
18 | store i8 %1, i8* %"2_1", align 1
19 | %"2_01" = load i8, i8* %"2_0", align 1
20 | %"2_12" = load i8, i8* %"2_1", align 1
21 | %2 = icmp slt i8 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__inarrow_s_3_2@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [25 x i8] c"Can't narrow into bounds\00", align 1
9 |
10 | define { i1, { i32, i8* }, i8 } @_hl.main.1(i8 %0) {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %upper_bounds_check = icmp sgt i8 %0, 7
16 | %lower_bounds_check = icmp slt i8 %0, -8
17 | %outside_range = or i1 %upper_bounds_check, %lower_bounds_check
18 | %inbounds = xor i1 %outside_range, true
19 | %1 = insertvalue { i1, { i32, i8* }, i8 } { i1 true, { i32, i8* } poison, i8 poison }, i8 %0, 2
20 | %2 = select i1 %inbounds, { i1, { i32, i8* }, i8 } %1, { i1, { i32, i8* }, i8 } { i1 false, { i32, i8* } { i32 2, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @0, i32 0, i32 0) }, i8 poison }
21 | ret { i1, { i32, i8* }, i8 } %2
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__inarrow_u_6_4@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [25 x i8] c"Can't narrow into bounds\00", align 1
9 |
10 | define { i1, { i32, i8* }, i16 } @_hl.main.1(i64 %0) {
11 | alloca_block:
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | %upper_bounds_check = icmp ugt i64 %0, 65535
16 | %inbounds = xor i1 %upper_bounds_check, true
17 | %1 = trunc i64 %0 to i16
18 | %2 = insertvalue { i1, { i32, i8* }, i16 } { i1 true, { i32, i8* } poison, i16 poison }, i16 %1, 2
19 | %3 = select i1 %inbounds, { i1, { i32, i8* }, i16 } %2, { i1, { i32, i8* }, i16 } { i1 false, { i32, i8* } { i32 2, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @0, i32 0, i32 0) }, i16 poison }
20 | ret { i1, { i32, i8* }, i16 } %3
21 | }
22 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__isub@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i64 %0, i64 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = sub i64 %0, %1
14 | ret i64 %2
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__isub@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i64 %0, i64 %1) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca i64, align 8
12 | %"2_1" = alloca i64, align 8
13 | %"4_0" = alloca i64, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i64 %0, i64* %"2_0", align 4
18 | store i64 %1, i64* %"2_1", align 4
19 | %"2_01" = load i64, i64* %"2_0", align 4
20 | %"2_12" = load i64, i64* %"2_1", align 4
21 | %2 = sub i64 %"2_01", %"2_12"
22 | store i64 %2, i64* %"4_0", align 4
23 | %"4_03" = load i64, i64* %"4_0", align 4
24 | store i64 %"4_03", i64* %"0", align 4
25 | %"04" = load i64, i64* %"0", align 4
26 | ret i64 %"04"
27 | }
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_s_1_6@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = sext i8 %0 to i64
14 | ret i64 %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_s_1_6@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i64, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | %1 = sext i8 %"2_01" to i64
19 | store i64 %1, i64* %"4_0", align 4
20 | %"4_02" = load i64, i64* %"4_0", align 4
21 | store i64 %"4_02", i64* %"0", align 4
22 | %"03" = load i64, i64* %"0", align 4
23 | ret i64 %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_s_2_3@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i8 %0
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_s_2_3@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i8, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i8, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | store i8 %"2_01", i8* %"4_0", align 1
19 | %"4_02" = load i8, i8* %"4_0", align 1
20 | store i8 %"4_02", i8* %"0", align 1
21 | %"03" = load i8, i8* %"0", align 1
22 | ret i8 %"03"
23 | }
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_u_1_6@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = zext i8 %0 to i64
14 | ret i64 %1
15 | }
16 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_u_1_6@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i64, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | %1 = zext i8 %"2_01" to i64
19 | store i64 %1, i64* %"4_0", align 4
20 | %"4_02" = load i64, i64* %"4_0", align 4
21 | store i64 %"4_02", i64* %"0", align 4
22 | %"03" = load i64, i64* %"0", align 4
23 | ret i64 %"03"
24 | }
25 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_u_2_3@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i8 %0
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__int__test__iwiden_u_2_3@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/int.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i8 @_hl.main.1(i8 %0) {
9 | alloca_block:
10 | %"0" = alloca i8, align 1
11 | %"2_0" = alloca i8, align 1
12 | %"4_0" = alloca i8, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i8 %0, i8* %"2_0", align 1
17 | %"2_01" = load i8, i8* %"2_0", align 1
18 | store i8 %"2_01", i8* %"4_0", align 1
19 | %"4_02" = load i8, i8* %"4_0", align 1
20 | store i8 %"4_02", i8* %"0", align 1
21 | %"03" = load i8, i8* %"0", align 1
22 | ret i8 %"03"
23 | }
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__and@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = and i1 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__and@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"2_1" = alloca i1, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i1 %0, i1* %"2_0", align 1
18 | store i1 %1, i1* %"2_1", align 1
19 | %"2_01" = load i1, i1* %"2_0", align 1
20 | %"2_12" = load i1, i1* %"2_1", align 1
21 | %2 = and i1 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__eq@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = icmp eq i1 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__eq@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"2_1" = alloca i1, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i1 %0, i1* %"2_0", align 1
18 | store i1 %1, i1* %"2_1", align 1
19 | %"2_01" = load i1, i1* %"2_0", align 1
20 | %"2_12" = load i1, i1* %"2_1", align 1
21 | %2 = icmp eq i1 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__not@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = xor i1 %0, true
14 | %2 = select i1 %1, i1 true, i1 false
15 | ret i1 %2
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__not@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"4_0" = alloca i1, align 1
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i1 %0, i1* %"2_0", align 1
17 | %"2_01" = load i1, i1* %"2_0", align 1
18 | %1 = xor i1 %"2_01", true
19 | %2 = select i1 %1, i1 true, i1 false
20 | store i1 %2, i1* %"4_0", align 1
21 | %"4_02" = load i1, i1* %"4_0", align 1
22 | store i1 %"4_02", i1* %"0", align 1
23 | %"03" = load i1, i1* %"0", align 1
24 | ret i1 %"03"
25 | }
26 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__or@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = or i1 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__or@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"2_1" = alloca i1, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i1 %0, i1* %"2_0", align 1
18 | store i1 %1, i1* %"2_1", align 1
19 | %"2_01" = load i1, i1* %"2_0", align 1
20 | %"2_12" = load i1, i1* %"2_1", align 1
21 | %2 = or i1 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__xor@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = xor i1 %0, %1
14 | %3 = select i1 %2, i1 true, i1 false
15 | ret i1 %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__logic__test__xor@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/logic.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i1 @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"2_0" = alloca i1, align 1
12 | %"2_1" = alloca i1, align 1
13 | %"4_0" = alloca i1, align 1
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i1 %0, i1* %"2_0", align 1
18 | store i1 %1, i1* %"2_1", align 1
19 | %"2_01" = load i1, i1* %"2_0", align 1
20 | %"2_12" = load i1, i1* %"2_1", align 1
21 | %2 = xor i1 %"2_01", %"2_12"
22 | %3 = select i1 %2, i1 true, i1 false
23 | store i1 %3, i1* %"4_0", align 1
24 | %"4_03" = load i1, i1* %"4_0", align 1
25 | store i1 %"4_03", i1* %"0", align 1
26 | %"04" = load i1, i1* %"0", align 1
27 | ret i1 %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_barrier@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i64 42
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_barrier@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"5_0" = alloca i64, align 8
12 | %"6_0" = alloca i64, align 8
13 | %"6_1" = alloca i64, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i64 42, i64* %"5_0", align 4
18 | %"5_01" = load i64, i64* %"5_0", align 4
19 | %"5_02" = load i64, i64* %"5_0", align 4
20 | store i64 %"5_01", i64* %"6_0", align 4
21 | store i64 %"5_02", i64* %"6_1", align 4
22 | %"6_03" = load i64, i64* %"6_0", align 4
23 | store i64 %"6_03", i64* %"0", align 4
24 | %"04" = load i64, i64* %"0", align 4
25 | ret i64 %"04"
26 | }
27 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_const_external_symbol@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @sym2 = external global { i1, i64, i2 }
9 | @sym1 = external constant i64
10 |
11 | define { i64, { i1, i64, i2 } } @_hl.main.1() {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %sym2 = load { i1, i64, i2 }, { i1, i64, i2 }* @sym2, align 4
17 | %sym1 = load i64, i64* @sym1, align 4
18 | %mrv = insertvalue { i64, { i1, i64, i2 } } undef, i64 %sym1, 0
19 | %mrv5 = insertvalue { i64, { i1, i64, i2 } } %mrv, { i1, i64, i2 } %sym2, 1
20 | ret { i64, { i1, i64, i2 } } %mrv5
21 | }
22 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_const_usize@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i64 17
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_const_usize@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"5_0" = alloca i64, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store i64 17, i64* %"5_0", align 4
16 | %"5_01" = load i64, i64* %"5_0", align 4
17 | store i64 %"5_01", i64* %"0", align 4
18 | %"02" = load i64, i64* %"0", align 4
19 | ret i64 %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_exit@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [5 x i8] c"EXIT\00", align 1
9 | @prelude.panic_template = private unnamed_addr constant [34 x i8] c"Program panicked (signal %i): %s\0A\00", align 1
10 |
11 | define { i16, i16 } @_hl.main.1(i16 %0, i16 %1) {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %2 = extractvalue { i32, i8* } { i32 42, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0) }, 0
17 | %3 = extractvalue { i32, i8* } { i32 42, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0) }, 1
18 | %4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @prelude.panic_template, i32 0, i32 0), i32 %2, i8* %3)
19 | call void @abort()
20 | %mrv = insertvalue { i16, i16 } undef, i16 0, 0
21 | %mrv8 = insertvalue { i16, i16 } %mrv, i16 0, 1
22 | ret { i16, i16 } %mrv8
23 | }
24 |
25 | declare i32 @printf(i8*, ...)
26 |
27 | declare void @abort()
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_load_nat@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i64 42
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_load_nat@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1() {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"4_0" = alloca i64, align 8
12 | br label %entry_block
13 |
14 | entry_block: ; preds = %alloca_block
15 | store i64 42, i64* %"4_0", align 4
16 | %"4_01" = load i64, i64* %"4_0", align 4
17 | store i64 %"4_01", i64* %"0", align 4
18 | %"02" = load i64, i64* %"0", align 4
19 | ret i64 %"02"
20 | }
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_make_tuple@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i1, i1 } @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %2 = insertvalue { i1, i1 } poison, i1 %0, 0
14 | %3 = insertvalue { i1, i1 } %2, i1 %1, 1
15 | ret { i1, i1 } %3
16 | }
17 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_make_tuple@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i1, i1 } @_hl.main.1(i1 %0, i1 %1) {
9 | alloca_block:
10 | %"0" = alloca { i1, i1 }, align 8
11 | %"2_0" = alloca i1, align 1
12 | %"2_1" = alloca i1, align 1
13 | %"4_0" = alloca { i1, i1 }, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i1 %0, i1* %"2_0", align 1
18 | store i1 %1, i1* %"2_1", align 1
19 | %"2_01" = load i1, i1* %"2_0", align 1
20 | %"2_12" = load i1, i1* %"2_1", align 1
21 | %2 = insertvalue { i1, i1 } poison, i1 %"2_01", 0
22 | %3 = insertvalue { i1, i1 } %2, i1 %"2_12", 1
23 | store { i1, i1 } %3, { i1, i1 }* %"4_0", align 1
24 | %"4_03" = load { i1, i1 }, { i1, i1 }* %"4_0", align 1
25 | store { i1, i1 } %"4_03", { i1, i1 }* %"0", align 1
26 | %"04" = load { i1, i1 }, { i1, i1 }* %"0", align 1
27 | ret { i1, i1 } %"04"
28 | }
29 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_noop@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i64 %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | ret i64 %0
14 | }
15 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_noop@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define i64 @_hl.main.1(i64 %0) {
9 | alloca_block:
10 | %"0" = alloca i64, align 8
11 | %"2_0" = alloca i64, align 8
12 | %"4_0" = alloca i64, align 8
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | store i64 %0, i64* %"2_0", align 4
17 | %"2_01" = load i64, i64* %"2_0", align 4
18 | store i64 %"2_01", i64* %"4_0", align 4
19 | %"4_02" = load i64, i64* %"4_0", align 4
20 | store i64 %"4_02", i64* %"0", align 4
21 | %"03" = load i64, i64* %"0", align 4
22 | ret i64 %"03"
23 | }
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_panic@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [6 x i8] c"PANIC\00", align 1
9 | @prelude.panic_template = private unnamed_addr constant [34 x i8] c"Program panicked (signal %i): %s\0A\00", align 1
10 |
11 | define { i16, i16 } @_hl.main.1(i16 %0, i16 %1) {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %2 = extractvalue { i32, i8* } { i32 42, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i32 0, i32 0) }, 0
17 | %3 = extractvalue { i32, i8* } { i32 42, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @0, i32 0, i32 0) }, 1
18 | %4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @prelude.panic_template, i32 0, i32 0), i32 %2, i8* %3)
19 | call void @abort()
20 | %mrv = insertvalue { i16, i16 } undef, i16 0, 0
21 | %mrv8 = insertvalue { i16, i16 } %mrv, i16 0, 1
22 | ret { i16, i16 } %mrv8
23 | }
24 |
25 | declare i32 @printf(i8*, ...)
26 |
27 | declare void @abort()
28 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_print@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00", align 1
9 | @prelude.print_template = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
10 |
11 | define void @_hl.main.1() {
12 | alloca_block:
13 | br label %entry_block
14 |
15 | entry_block: ; preds = %alloca_block
16 | %0 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @prelude.print_template, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0))
17 | ret void
18 | }
19 |
20 | declare i32 @printf(i8*, ...)
21 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_print@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | @0 = private unnamed_addr constant [14 x i8] c"Hello, world!\00", align 1
9 | @prelude.print_template = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
10 |
11 | define void @_hl.main.1() {
12 | alloca_block:
13 | %"5_0" = alloca i8*, align 8
14 | br label %entry_block
15 |
16 | entry_block: ; preds = %alloca_block
17 | store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0), i8** %"5_0", align 8
18 | %"5_01" = load i8*, i8** %"5_0", align 8
19 | %0 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @prelude.print_template, i32 0, i32 0), i8* %"5_01")
20 | ret void
21 | }
22 |
23 | declare i32 @printf(i8*, ...)
24 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_unpack_tuple@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i1, i1 } @_hl.main.1({ i1, i1 } %0) {
9 | alloca_block:
10 | br label %entry_block
11 |
12 | entry_block: ; preds = %alloca_block
13 | %1 = extractvalue { i1, i1 } %0, 0
14 | %2 = extractvalue { i1, i1 } %0, 1
15 | %mrv = insertvalue { i1, i1 } undef, i1 %1, 0
16 | %mrv6 = insertvalue { i1, i1 } %mrv, i1 %2, 1
17 | ret { i1, i1 } %mrv6
18 | }
19 |
--------------------------------------------------------------------------------
/hugr-llvm/src/extension/snapshots/hugr_llvm__extension__prelude__test__prelude_unpack_tuple@pre-mem2reg@llvm14.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/extension/prelude.rs
3 | expression: mod_str
4 | ---
5 | ; ModuleID = 'test_context'
6 | source_filename = "test_context"
7 |
8 | define { i1, i1 } @_hl.main.1({ i1, i1 } %0) {
9 | alloca_block:
10 | %"0" = alloca i1, align 1
11 | %"1" = alloca i1, align 1
12 | %"2_0" = alloca { i1, i1 }, align 8
13 | %"4_0" = alloca i1, align 1
14 | %"4_1" = alloca i1, align 1
15 | br label %entry_block
16 |
17 | entry_block: ; preds = %alloca_block
18 | store { i1, i1 } %0, { i1, i1 }* %"2_0", align 1
19 | %"2_01" = load { i1, i1 }, { i1, i1 }* %"2_0", align 1
20 | %1 = extractvalue { i1, i1 } %"2_01", 0
21 | %2 = extractvalue { i1, i1 } %"2_01", 1
22 | store i1 %1, i1* %"4_0", align 1
23 | store i1 %2, i1* %"4_1", align 1
24 | %"4_02" = load i1, i1* %"4_0", align 1
25 | %"4_13" = load i1, i1* %"4_1", align 1
26 | store i1 %"4_02", i1* %"0", align 1
27 | store i1 %"4_13", i1* %"1", align 1
28 | %"04" = load i1, i1* %"0", align 1
29 | %"15" = load i1, i1* %"1", align 1
30 | %mrv = insertvalue { i1, i1 } undef, i1 %"04", 0
31 | %mrv6 = insertvalue { i1, i1 } %mrv, i1 %"15", 1
32 | ret { i1, i1 } %mrv6
33 | }
34 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@nofields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define i2 @untag_tag(i2 %0) {
6 | ret i2 -2
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@nofields_elided_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define i1 @untag_tag(i1 %0) {
6 | ret i1 false
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@one_variant_one_field.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define i1 @untag_tag(i1 %0) {
6 | ret i1 %0
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@one_variant_one_field_elided_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define i1 @untag_tag(i1 %0) {
6 | ret i1 %0
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@one_variant_two_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define { i1, i1 } @untag_tag({ i1, i1 } %0) {
6 | %2 = extractvalue { i1, i1 } %0, 0
7 | %3 = extractvalue { i1, i1 } %0, 1
8 | %4 = insertvalue { i1, i1 } poison, i1 %2, 0
9 | %5 = insertvalue { i1, i1 } %4, i1 %3, 1
10 | ret { i1, i1 } %5
11 | }
12 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@one_variant_two_fields_elided_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define { i1, i1 } @untag_tag({ i1, i1 } %0) {
6 | %2 = extractvalue { i1, i1 } %0, 0
7 | %3 = extractvalue { i1, i1 } %0, 1
8 | %4 = insertvalue { i1, i1 } poison, i1 %2, 0
9 | %5 = insertvalue { i1, i1 } %4, i1 %3, 1
10 | ret { i1, i1 } %5
11 | }
12 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@two_variant_one_field.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define { i1, i1 } @untag_tag({ i1, i1 } %0) {
6 | %2 = extractvalue { i1, i1 } %0, 0
7 | ret { i1, i1 } { i1 true, i1 poison }
8 | }
9 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@two_variant_one_field_elided_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define { i1, i1 } @untag_tag({ i1, i1 } %0) {
6 | %2 = extractvalue { i1, i1 } %0, 0
7 | ret { i1, i1 } { i1 true, i1 poison }
8 | }
9 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@unit.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define {} @untag_tag({} %0) {
6 | ret {} undef
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__sum__test__build_untag_tag@unit_elided_fields.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/sum.rs
3 | expression: module.to_string()
4 | ---
5 | define {} @untag_tag({} %0) {
6 | ret {} undef
7 | }
8 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__func_type_to_llvm@llvm14_0.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[Bool] -> []"
4 | ---
5 | "void (i1)"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__func_type_to_llvm@llvm14_1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[Unit] -> [[]+[]+[]]"
4 | ---
5 | "i2 ({})"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__func_type_to_llvm@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[] -> [Unit, Unit]"
4 | ---
5 | "{ {}, {} } ()"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__sum_type_to_llvm@llvm14_0.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: ⊥
4 | ---
5 | "i1"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__sum_type_to_llvm@llvm14_1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: Unit
4 | ---
5 | "{}"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__sum_type_to_llvm@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[[]+[]+[]+[], Unit]+[Bool, []+[]+[]]"
4 | ---
5 | "{ i1, i2, i1 }"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__sum_type_to_llvm@llvm14_3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: Bool
4 | ---
5 | "i1"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_0.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/types.rs
3 | expression: "int([BoundedNat { n: 0 }])"
4 | ---
5 | "i8"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/types.rs
3 | expression: "int([BoundedNat { n: 3 }])"
4 | ---
5 | "i8"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/types.rs
3 | expression: "int([BoundedNat { n: 4 }])"
4 | ---
5 | "i16"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/types.rs
3 | expression: "int([BoundedNat { n: 5 }])"
4 | ---
5 | "i32"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_4.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: src/types.rs
3 | expression: "int([BoundedNat { n: 6 }])"
4 | ---
5 | "i64"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_5.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[int(2)]"
4 | ---
5 | "i8"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_6.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[int(6), Unit]+[Bool, int(2)]"
4 | ---
5 | "{ i1, i8, i64, i1 }"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/snapshots/hugr_llvm__types__test__type_to_llvm@llvm14_7.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-llvm/src/types.rs
3 | expression: "[Bool] -> [[]+[]+[]]"
4 | ---
5 | "i2 (i1)*"
6 |
--------------------------------------------------------------------------------
/hugr-llvm/src/utils.rs:
--------------------------------------------------------------------------------
1 | //! Module for utilities that do not depend on LLVM. These are candidates for
2 | //! upstreaming.
3 | pub mod fat;
4 | pub mod inline_constant_functions;
5 | pub mod int_op_builder;
6 | pub mod logic_op_builder;
7 | pub mod type_map;
8 |
9 | pub use inline_constant_functions::inline_constant_functions;
10 | pub use int_op_builder::IntOpBuilder;
11 | pub use logic_op_builder::LogicOpBuilder;
12 |
--------------------------------------------------------------------------------
/hugr-llvm/src/utils/int_op_builder.rs:
--------------------------------------------------------------------------------
1 | use hugr_core::{
2 | Wire,
3 | builder::{BuildError, Dataflow},
4 | extension::simple_op::HasConcrete as _,
5 | std_extensions::arithmetic::int_ops::IntOpDef,
6 | types::TypeArg,
7 | };
8 |
9 | pub trait IntOpBuilder: Dataflow {
10 | fn add_iadd(
11 | &mut self,
12 | log_width: impl Into,
13 | x1: Wire,
14 | x2: Wire,
15 | ) -> Result {
16 | // TODO Add an OpLoadError variant to BuildError
17 | let op = IntOpDef::iadd.instantiate(&[log_width.into()]).unwrap();
18 | Ok(self.add_dataflow_op(op, [x1, x2])?.out_wire(0))
19 | }
20 |
21 | fn add_ieq(
22 | &mut self,
23 | log_width: impl Into,
24 | x1: Wire,
25 | x2: Wire,
26 | ) -> Result {
27 | // TODO Add an OpLoadError variant to BuildError
28 | let op = IntOpDef::ieq.instantiate(&[log_width.into()]).unwrap();
29 | Ok(self.add_dataflow_op(op, [x1, x2])?.out_wire(0))
30 | }
31 | }
32 |
33 | impl IntOpBuilder for D {}
34 |
--------------------------------------------------------------------------------
/hugr-llvm/src/utils/logic_op_builder.rs:
--------------------------------------------------------------------------------
1 | use hugr_core::{
2 | Wire,
3 | builder::{BuildError, Dataflow},
4 | std_extensions::logic::LogicOp,
5 | };
6 |
7 | pub trait LogicOpBuilder: Dataflow {
8 | fn add_and(&mut self, x1: Wire, x2: Wire) -> Result {
9 | Ok(self.add_dataflow_op(LogicOp::And, [x1, x2])?.out_wire(0))
10 | }
11 |
12 | fn add_not(&mut self, x1: Wire) -> Result {
13 | Ok(self.add_dataflow_op(LogicOp::Not, [x1])?.out_wire(0))
14 | }
15 | }
16 |
17 | impl LogicOpBuilder for D {}
18 |
--------------------------------------------------------------------------------
/hugr-model/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "hugr-model"
3 | version = "0.20.1"
4 | readme = "README.md"
5 | documentation = "https://docs.rs/hugr-model/"
6 | description = "Data model for Quantinuum's HUGR intermediate representation"
7 | keywords = ["Quantum", "Quantinuum"]
8 | categories = ["compilers"]
9 | rust-version.workspace = true
10 | edition.workspace = true
11 | homepage.workspace = true
12 | repository.workspace = true
13 | license.workspace = true
14 |
15 | [lib]
16 | bench = false
17 |
18 | [dependencies]
19 | base64 = { workspace = true }
20 | bumpalo = { workspace = true, features = ["collections"] }
21 | capnp = { workspace = true }
22 | derive_more = { workspace = true, features = ["display", "error", "from"] }
23 | fxhash.workspace = true
24 | indexmap.workspace = true
25 | itertools.workspace = true
26 | ordered-float = { workspace = true }
27 | pest = { workspace = true }
28 | pest_derive = { workspace = true }
29 | pretty = { workspace = true }
30 | smol_str = { workspace = true, features = ["serde"] }
31 | thiserror.workspace = true
32 | pyo3 = { workspace = true, optional = true, features = ["extension-module"] }
33 |
34 | [features]
35 | pyo3 = ["dep:pyo3"]
36 |
37 | [lints]
38 | workspace = true
39 |
40 | [dev-dependencies]
41 | insta = { workspace = true }
42 | pretty_assertions = { workspace = true }
43 | proptest = { workspace = true }
44 | proptest-derive = { workspace = true }
45 |
--------------------------------------------------------------------------------
/hugr-model/src/capnp/mod.rs:
--------------------------------------------------------------------------------
1 | //! This module contains the Cap'n Proto encoding and decoding functions
2 | //! generated from the `.capn` schema.
3 | //!
4 | //! These files **SHOULD NOT** be edited manually.
5 | //! Instead, use `just update-model-capnp` to regenerate them.
6 |
7 | #[allow(warnings)]
8 | #[allow(unknown_lints)]
9 | #[allow(clippy::all)]
10 | #[rustfmt::skip]
11 | pub mod hugr_v0_capnp;
12 |
--------------------------------------------------------------------------------
/hugr-model/src/lib.rs:
--------------------------------------------------------------------------------
1 | //! The data model of the HUGR intermediate representation.
2 | //! This crate defines data structures that capture the structure of a HUGR graph and
3 | //! all its associated information in a form that can be stored on disk. The data structures
4 | //! are not designed for efficient traversal or modification, but for simplicity and serialization.
5 | mod capnp;
6 |
7 | pub mod v0;
8 |
9 | // This is required here since the generated code assumes it's in the package root.
10 | use capnp::hugr_v0_capnp;
11 |
--------------------------------------------------------------------------------
/hugr-model/src/v0/binary/mod.rs:
--------------------------------------------------------------------------------
1 | //! Binary format based on capnproto.
2 | //!
3 | //! The binary format is optimised for fast serialization and deserialization of
4 | //! hugr modules in the [table] representation. It is the preferred format to
5 | //! communicate hugr graphs between machines. When a hugr module is to be
6 | //! written or read by humans, the [text] format can be used instead.
7 | //!
8 | //! [table]: crate::v0::table
9 | //! [text]: crate::v0::ast
10 | mod read;
11 | mod write;
12 |
13 | pub use read::{ReadError, read_from_reader, read_from_slice};
14 | pub use write::{WriteError, write_to_vec, write_to_writer};
15 |
--------------------------------------------------------------------------------
/hugr-model/src/v0/scope/mod.rs:
--------------------------------------------------------------------------------
1 | //! Utilities for working with scoped symbols, variables and links.
2 | mod link;
3 | mod symbol;
4 | mod vars;
5 |
6 | pub use link::LinkTable;
7 | pub use symbol::{DuplicateSymbolError, SymbolTable, UnknownSymbolError};
8 | pub use vars::{DuplicateVarError, UnknownVarError, VarTable};
9 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-add.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-func
6 | example.add
7 | (core.fn
8 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
9 | [(arithmetic.int.types.int 6)])
10 | (dfg [%0 %1] [%2]
11 | (signature
12 | (core.fn
13 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
14 | [(arithmetic.int.types.int 6)]))
15 | ((arithmetic.int.iadd 6) [%0 %1] [%2]
16 | (signature
17 | (core.fn
18 | [(arithmetic.int.types.int 6) (arithmetic.int.types.int 6)]
19 | [(arithmetic.int.types.int 6)])))))
20 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-alias.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (declare-alias local.float core.type)
6 |
7 | (define-alias local.int core.type arithmetic.int.types.int)
8 |
9 | (define-alias local.endo core.type (core.fn [] []))
10 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-call.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (declare-func
6 | example.callee
7 | (core.fn [arithmetic.int.types.int] [arithmetic.int.types.int])
8 | (meta (compat.meta_json "title" "\"Callee\""))
9 | (meta (compat.meta_json "description" "\"This is a function declaration.\"")))
10 |
11 | (define-func example.caller
12 | (core.fn [arithmetic.int.types.int] [arithmetic.int.types.int])
13 | (meta (compat.meta_json "title" "\"Caller\""))
14 | (meta (compat.meta_json "description" "\"This defines a function that calls the function which we declared earlier.\""))
15 | (dfg [%3] [%4]
16 | (signature (core.fn [arithmetic.int.types.int] [arithmetic.int.types.int]))
17 | ((core.call _ _ example.callee) [%3] [%4]
18 | (signature (core.fn [arithmetic.int.types.int] [arithmetic.int.types.int])))))
19 |
20 | (define-func
21 | example.load
22 | (core.fn [] [(core.fn [arithmetic.int.types.int] [arithmetic.int.types.int])])
23 | (dfg
24 | []
25 | [%5]
26 | (signature (core.fn [] [(core.fn [arithmetic.int.types.int] [arithmetic.int.types.int])]))
27 | ((core.load_const _ example.caller) [] [%5])))
28 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-cond.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-func
6 | example.cond
7 | (core.fn
8 | [(core.adt [[] []]) (arithmetic.int.types.int 6)]
9 | [(arithmetic.int.types.int 6)])
10 | (dfg [%0 %1] [%2]
11 | (signature
12 | (core.fn
13 | [(core.adt [[] []]) (arithmetic.int.types.int 6)]
14 | [(arithmetic.int.types.int 6)]))
15 | (cond [%0 %1] [%2]
16 | (signature
17 | (core.fn
18 | [(core.adt [[] []]) (arithmetic.int.types.int 6)]
19 | [(arithmetic.int.types.int 6)]))
20 | (dfg [%3] [%3]
21 | (signature
22 | (core.fn [(arithmetic.int.types.int 6)] [(arithmetic.int.types.int 6)])))
23 | (dfg [%4] [%5]
24 | (signature
25 | (core.fn [(arithmetic.int.types.int 6)] [(arithmetic.int.types.int 6)]))
26 | ((arithmetic.int.ineg 6) [%4] [%5]
27 | (signature
28 | (core.fn
29 | [(arithmetic.int.types.int 6)]
30 | [(arithmetic.int.types.int 6)])))))))
31 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-constraints.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (declare-func array.replicate
6 | (param ?n core.nat)
7 | (param ?t core.type)
8 | (where (core.nonlinear ?t))
9 | (core.fn [?t] [(collections.array.array ?n ?t)]))
10 |
11 | (declare-func
12 | array.copy
13 | (param ?n core.nat)
14 | (param ?t core.type)
15 | (where (core.nonlinear ?t))
16 | (core.fn
17 | [(collections.array.array ?n ?t)]
18 | [(collections.array.array ?n ?t)
19 | (collections.array.array ?n ?t)]))
20 |
21 | (define-func util.copy
22 | (param ?t core.type)
23 | (where (core.nonlinear ?t))
24 | (core.fn [?t] [?t ?t])
25 | (dfg [%0] [%0 %0]
26 | (signature (core.fn [?t] [?t ?t]))))
27 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-decl-exts.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (declare-ctr array.Array
6 | (param ?t core.type)
7 | (param ?n core.nat)
8 | core.type
9 | (meta (core.meta.description "Fixed size array.")))
10 |
11 | (declare-operation array.Init
12 | (param ?t core.type)
13 | (param ?n core.nat)
14 | (core.fn [?t] [(array.Array ?t ?n)])
15 | (meta (core.meta.description "Initialize an array of size ?n with copies of a default value.")))
16 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-entrypoint.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-func main
6 | (core.fn [] [])
7 | (meta core.entrypoint)
8 | (dfg [] []
9 | (signature (core.fn [] []))))
10 |
11 | (mod)
12 |
13 | (define-func wrapper_dfg
14 | (core.fn [] [])
15 | (dfg [] []
16 | (signature (core.fn [] []))
17 | (meta core.entrypoint)))
18 |
19 | (mod)
20 |
21 | (define-func wrapper_cfg
22 | (core.fn [] [])
23 | (dfg [] []
24 | (signature (core.fn [] []))
25 | (cfg [] []
26 | (signature (core.fn [] []))
27 | (cfg [%entry] [%exit]
28 | (signature (core.fn [(core.ctrl [])] [(core.ctrl [])]))
29 | (meta core.entrypoint)
30 | (block [%entry] [%exit]
31 | (signature (core.fn [(core.ctrl [])] [(core.ctrl [])]))
32 | (dfg [] [%value]
33 | (signature (core.fn [] [(core.adt [[]])]))
34 | ((core.make_adt _ _ 0) [] [%value]
35 | (signature (core.fn [] [(core.adt [[]])])))))))))
36 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-lists.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (declare-operation core.call-indirect
6 | (param ?inputs (core.list core.type))
7 | (param ?outputs (core.list core.type))
8 | (param ?exts core.ext-set)
9 | (core.fn [(core.fn ?inputs ?outputs ?exts) ?inputs ...] ?outputs ?exts))
10 |
11 | (declare-operation core.compose-parallel
12 | (param ?inputs-0 (core.list core.type))
13 | (param ?inputs-1 (core.list core.type))
14 | (param ?outputs-0 (core.list core.type))
15 | (param ?outputs-1 (core.list core.type))
16 | (core.fn
17 | [(core.fn ?inputs-0 ?outputs-0)
18 | (core.fn ?inputs-1 ?outputs-1)
19 | ?inputs-0 ...
20 | ?inputs-1 ...]
21 | [?outputs-0 ... ?outputs-1 ...]))
22 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-literals.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-alias mod.string core.str "\"\n\r\t\\\u{1F44D}")
6 | (define-alias mod.bytes core.bytes (bytes "SGVsbG8gd29ybGQg8J+Yig=="))
7 | (define-alias mod.float core.float -3.141)
8 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-loop.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-func example.loop
6 | (param ?a core.type)
7 | (core.fn [?a] [?a])
8 | (dfg [%0] [%1]
9 | (signature (core.fn [?a] [?a]))
10 | (tail-loop [%0] [%1]
11 | (signature (core.fn [?a] [?a]))
12 | (dfg [%2] [%3]
13 | (signature (core.fn [?a] [(core.adt [[?a] [?a]])]))
14 | ((core.make_adt 0) [%2] [%3]
15 | (signature (core.fn [?a] [(core.adt [[?a] [?a]])])))))))
16 |
--------------------------------------------------------------------------------
/hugr-model/tests/fixtures/model-params.edn:
--------------------------------------------------------------------------------
1 | (hugr 0)
2 |
3 | (mod)
4 |
5 | (define-func example.swap
6 | ; The types of the values to be swapped are passed as implicit parameters.
7 | (param ?a core.type)
8 | (param ?b core.type)
9 | (core.fn [?a ?b] [?b ?a])
10 | (dfg [%a %b] [%b %a]
11 | (signature (core.fn [?a ?b] [?b ?a]))))
12 |
13 | (declare-func example.literals
14 | (param ?a core.str)
15 | (param ?b core.nat)
16 | (param ?c core.bytes)
17 | (param ?d core.float)
18 | (core.fn [] []))
19 |
20 | (define-func example.call_literals
21 | (core.fn [] [])
22 | (dfg [] []
23 | (signature (core.fn [] []))
24 | ((core.call
25 | (example.literals "string" 42 (bytes "SGVsbG8gd29ybGQg8J+Yig==") 6.023e23))
26 | (signature (core.fn [] [])))))
27 |
--------------------------------------------------------------------------------
/hugr-model/tests/snapshots/text__declarative_extensions.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-model/tests/text.rs
3 | expression: "roundtrip(include_str!(\"fixtures/model-decl-exts.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (declare-ctr array.Array (param ?t core.type) (param ?n core.nat) core.type
10 | (meta (core.meta.description "Fixed size array.")))
11 |
12 | (declare-operation
13 | array.Init
14 | (param ?t core.type)
15 | (param ?n core.nat)
16 | (core.fn [?t] [(array.Array ?t ?n)])
17 | (meta
18 | (core.meta.description
19 | "Initialize an array of size ?n with copies of a default value.")))
20 |
--------------------------------------------------------------------------------
/hugr-model/tests/snapshots/text__literals.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: hugr-model/tests/text.rs
3 | expression: "roundtrip(include_str!(\"fixtures/model-literals.edn\"))"
4 | ---
5 | (hugr 0)
6 |
7 | (mod)
8 |
9 | (define-alias mod.string core.str "\"\n\r\t\\👍")
10 |
11 | (define-alias mod.bytes core.bytes (bytes "SGVsbG8gd29ybGQg8J+Yig=="))
12 |
13 | (define-alias mod.float core.float -3.141)
14 |
--------------------------------------------------------------------------------
/hugr-model/tests/text.rs:
--------------------------------------------------------------------------------
1 | #![allow(missing_docs)]
2 |
3 | use hugr_model::v0::ast;
4 | use std::str::FromStr as _;
5 |
6 | fn roundtrip(source: &str) -> String {
7 | let package = ast::Package::from_str(source).unwrap();
8 | package.to_string()
9 | }
10 |
11 | #[test]
12 | #[cfg_attr(miri, ignore)] // Opening files is not supported in (isolated) miri
13 | pub fn test_declarative_extensions() {
14 | insta::assert_snapshot!(roundtrip(include_str!("fixtures/model-decl-exts.edn")));
15 | }
16 |
17 | #[test]
18 | #[cfg_attr(miri, ignore)] // Opening files is not supported in (isolated) miri
19 | pub fn test_literals() {
20 | insta::assert_snapshot!(roundtrip(include_str!("fixtures/model-literals.edn")));
21 | }
22 |
--------------------------------------------------------------------------------
/hugr-passes/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "hugr-passes"
3 | version = "0.20.1"
4 | edition = { workspace = true }
5 | rust-version = { workspace = true }
6 | license = { workspace = true }
7 | readme = "README.md"
8 | documentation = "https://docs.rs/hugr-passes/"
9 | homepage = { workspace = true }
10 | repository = { workspace = true }
11 | description = "Compiler passes for Quantinuum's HUGR"
12 | keywords = ["Quantum", "Quantinuum"]
13 | categories = ["compilers"]
14 |
15 | [lints]
16 | workspace = true
17 |
18 | [lib]
19 | bench = false
20 |
21 | [dependencies]
22 | hugr-core = { path = "../hugr-core", version = "0.20.1" }
23 | portgraph = { workspace = true }
24 | ascent = { version = "0.8.0" }
25 | derive_more = { workspace = true, features = ["display", "error", "from"] }
26 | itertools = { workspace = true }
27 | lazy_static = { workspace = true }
28 | paste = { workspace = true }
29 | thiserror = { workspace = true }
30 | petgraph = { workspace = true }
31 | strum = { workspace = true }
32 |
33 | [dev-dependencies]
34 | rstest = { workspace = true }
35 | proptest = { workspace = true }
36 | proptest-recurse = { version = "0.5.0" }
37 |
--------------------------------------------------------------------------------
/hugr-passes/src/lib.rs:
--------------------------------------------------------------------------------
1 | //! Compilation passes acting on the HUGR program representation.
2 | #![expect(missing_docs)] // TODO: Fix...
3 |
4 | pub mod call_graph;
5 | pub mod composable;
6 | pub use composable::ComposablePass;
7 | pub mod const_fold;
8 | pub mod dataflow;
9 | pub mod dead_code;
10 | pub use dead_code::DeadCodeElimPass;
11 | mod dead_funcs;
12 | pub use dead_funcs::{RemoveDeadFuncsError, RemoveDeadFuncsPass, remove_dead_funcs};
13 | pub mod force_order;
14 | mod half_node;
15 | pub mod linearize_array;
16 | pub use linearize_array::LinearizeArrayPass;
17 | pub mod lower;
18 | pub mod merge_bbs;
19 | mod monomorphize;
20 | pub mod untuple;
21 |
22 | pub use monomorphize::{MonomorphizePass, mangle_name, monomorphize};
23 | pub mod replace_types;
24 | pub use replace_types::ReplaceTypes;
25 | pub mod nest_cfgs;
26 | pub mod non_local;
27 | pub use force_order::{force_order, force_order_by_key};
28 | pub use lower::{lower_ops, replace_many_ops};
29 | pub use non_local::{ensure_no_nonlocal_edges, nonlocal_edges};
30 | pub use untuple::UntuplePass;
31 |
--------------------------------------------------------------------------------
/hugr-persistent/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "hugr-persistent"
3 | version = "0.1.0"
4 | rust-version.workspace = true
5 | edition.workspace = true
6 | homepage.workspace = true
7 | repository.workspace = true
8 | license.workspace = true
9 |
10 | [[test]]
11 | name = "persistent_walker_example"
12 |
13 | [dependencies]
14 | relrc = { workspace = true, features = ["petgraph"] }
15 | hugr-core.path = "../hugr-core"
16 | delegate.workspace = true
17 | derive_more.workspace = true
18 | itertools.workspace = true
19 | petgraph.workspace = true
20 | portgraph.workspace = true
21 | thiserror.workspace = true
22 |
23 | [lints]
24 | workspace = true
25 |
26 | [dev-dependencies]
27 | rstest.workspace = true
28 | lazy_static.workspace = true
29 | semver.workspace = true
30 |
--------------------------------------------------------------------------------
/hugr-py/.gitignore:
--------------------------------------------------------------------------------
1 | src/hugr/*.so
2 |
--------------------------------------------------------------------------------
/hugr-py/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "hugr-py"
3 | version = "0.1.0"
4 | publish = false
5 | edition = { workspace = true }
6 | rust-version = { workspace = true }
7 |
8 | [lints]
9 | workspace = true
10 |
11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
12 | [lib]
13 | name = "hugr_py"
14 | crate-type = ["cdylib", "rlib"]
15 | path = "rust/lib.rs"
16 | # This library requires a Python runtime to be tested.
17 | # It is tested by the py tests in the `tests` directory.
18 | doc = false
19 | test = false
20 | bench = false
21 |
22 | [dependencies]
23 | bumpalo = { workspace = true, features = ["collections"] }
24 | hugr-model = { version = "0.20.1", path = "../hugr-model", features = ["pyo3"] }
25 | paste.workspace = true
26 | pyo3 = { workspace = true, features = ["extension-module", "abi3-py310"] }
27 |
--------------------------------------------------------------------------------
/hugr-py/docs/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 |
--------------------------------------------------------------------------------
/hugr-py/docs/_static/_redirect.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Redirecting to main branch
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/.gitignore:
--------------------------------------------------------------------------------
1 | _autosummary
2 | _build
3 | generated
4 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/_templates/autosummary/base.rst:
--------------------------------------------------------------------------------
1 | {{ name | escape | underline}}
2 |
3 | .. currentmodule:: {{ module }}
4 |
5 | .. auto{{ objtype }}:: {{ objname }}
6 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/_templates/autosummary/class.rst:
--------------------------------------------------------------------------------
1 | ..
2 | Custom class template to make sphinx-autosummary list the full API doc after
3 | the summary. See https://github.com/sphinx-doc/sphinx/issues/7912
4 |
5 | {{ name | escape | underline}}
6 |
7 | .. currentmodule:: {{ module }}
8 |
9 | .. autoclass:: {{ objname }}
10 | :members:
11 | :show-inheritance:
12 | :inherited-members:
13 |
14 | {% block methods %}
15 | {% if methods %}
16 | .. rubric:: {{ _('Methods') }}
17 |
18 | .. autosummary::
19 | :nosignatures:
20 | {% for item in methods %}
21 | {%- if not item.startswith('_') %}
22 | ~{{ name }}.{{ item }}
23 | {%- endif -%}
24 | {%- endfor %}
25 | {% endif %}
26 | {% endblock %}
27 |
28 | {% block attributes %}
29 | {% if attributes %}
30 | .. rubric:: {{ _('Attributes') }}
31 |
32 | .. autosummary::
33 | {% for item in attributes %}
34 | ~{{ name }}.{{ item }}
35 | {%- endfor %}
36 | {% endif %}
37 | {% endblock %}
38 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/_templates/versioning.html:
--------------------------------------------------------------------------------
1 | {% if versions %}
2 | {{ _('Versions') }}
3 |
8 | {% endif %}
9 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/conf.py:
--------------------------------------------------------------------------------
1 | # Configuration file for the Sphinx documentation builder. # noqa: INP001
2 | # See https://www.sphinx-doc.org/en/master/usage/configuration.html
3 | import hugr
4 |
5 | project = "HUGR Python"
6 | copyright = "2025, Quantinuum"
7 | author = "Quantinuum"
8 |
9 | extensions = [
10 | "sphinx.ext.napoleon",
11 | "sphinx.ext.autodoc",
12 | "sphinx.ext.coverage",
13 | "sphinx.ext.autosummary",
14 | "sphinx.ext.viewcode",
15 | "sphinx.ext.intersphinx",
16 | ]
17 |
18 | html_theme = "furo"
19 |
20 |
21 | html_title = f"HUGR-py v{hugr.__version__} API documentation."
22 |
23 | html_theme_options = {
24 | "sidebar_hide_name": False,
25 | }
26 |
27 | html_static_path = ["../_static"]
28 |
29 | html_logo = "../_static/hugr_logo_no_bg.svg"
30 |
31 | autosummary_generate = True
32 |
33 | templates_path = ["_templates"]
34 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "conftest.py"]
35 |
36 |
37 | intersphinx_mapping = {
38 | "python": ("https://docs.python.org/3/", None),
39 | }
40 |
41 | html_show_sourcelink = False
42 |
--------------------------------------------------------------------------------
/hugr-py/docs/api-docs/index.rst:
--------------------------------------------------------------------------------
1 | HUGR Python API Documentation
2 | ==================================
3 |
4 | This is the API documentation for the HUGR Python package.
5 |
6 |
7 | .. autosummary::
8 | :toctree: generated
9 | :template: autosummary/module.rst
10 | :recursive:
11 |
12 | hugr
13 |
14 | .. toctree::
15 |
16 | Github
17 | HUGR Specification
18 | pypi
19 |
20 |
21 |
22 | Indices and tables
23 | ~~~~~~~~~~~~~~~~~~
24 |
25 | * :ref:`genindex`
26 | * :ref:`modindex`
27 | * :ref:`search`
28 |
--------------------------------------------------------------------------------
/hugr-py/docs/build.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | mkdir build
4 |
5 | touch build/.nojekyll # Disable jekyll to keep files starting with underscores
6 | # copy redirect file
7 | cp ./_static/_redirect.html ./build/index.html
8 | uv run --extra docs sphinx-build -b html ./api-docs ./build
9 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/__init__.py:
--------------------------------------------------------------------------------
1 | """`hugr` is a Python package for the Quantinuum HUGR common
2 | representation.
3 | """
4 |
5 | from . import model
6 | from .hugr.base import Hugr
7 | from .hugr.node_port import Direction, InPort, Node, OutPort, Wire
8 |
9 | __all__ = [
10 | "Hugr",
11 | "Node",
12 | "OutPort",
13 | "InPort",
14 | "Direction",
15 | "Wire",
16 | "model",
17 | ]
18 |
19 | # This is updated by our release-please workflow, triggered by this
20 | # annotation: x-release-please-version
21 | __version__ = "0.12.2"
22 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/_hugr/__init__.pyi:
--------------------------------------------------------------------------------
1 | import hugr.model
2 |
3 | def term_to_string(term: hugr.model.Term) -> str: ...
4 | def string_to_term(string: str) -> hugr.model.Term: ...
5 | def node_to_string(node: hugr.model.Node) -> str: ...
6 | def string_to_node(string: str) -> hugr.model.Node: ...
7 | def region_to_string(region: hugr.model.Region) -> str: ...
8 | def string_to_region(string: str) -> hugr.model.Region: ...
9 | def param_to_string(region: hugr.model.Param) -> str: ...
10 | def string_to_param(string: str) -> hugr.model.Param: ...
11 | def symbol_to_string(region: hugr.model.Symbol) -> str: ...
12 | def string_to_symbol(string: str) -> hugr.model.Symbol: ...
13 | def module_to_string(module: hugr.model.Module) -> str: ...
14 | def string_to_module(string: str) -> hugr.model.Module: ...
15 | def module_to_bytes(module: hugr.model.Module) -> bytes: ...
16 | def bytes_to_module(binary: bytes) -> hugr.model.Module: ...
17 | def package_to_string(package: hugr.model.Package) -> str: ...
18 | def string_to_package(string: str) -> hugr.model.Package: ...
19 | def package_to_bytes(package: hugr.model.Package) -> bytes: ...
20 | def bytes_to_package(binary: bytes) -> hugr.model.Package: ...
21 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/_serialization/__init__.py:
--------------------------------------------------------------------------------
1 | """Serialized HUGR objects as pydantic models."""
2 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/_serialization/testing_hugr.py:
--------------------------------------------------------------------------------
1 | from pydantic import ConfigDict
2 |
3 | from .extension import OpDef
4 | from .ops import OpType, Value
5 | from .ops import classes as ops_classes
6 | from .serial_hugr import VersionField
7 | from .tys import ConfiguredBaseModel, PolyFuncType, SumType, Type, model_rebuild
8 |
9 |
10 | class TestingHugr(ConfiguredBaseModel):
11 | """A serializable representation of a Hugr Type, SumType, PolyFuncType,
12 | Value, OpType. Intended for testing only.
13 | """
14 |
15 | version: str = VersionField
16 | typ: Type | None = None
17 | sum_type: SumType | None = None
18 | poly_func_type: PolyFuncType | None = None
19 | value: Value | None = None
20 | optype: OpType | None = None
21 | op_def: OpDef | None = None
22 |
23 | @classmethod
24 | def get_version(cls) -> str:
25 | """Return the version of the schema."""
26 | return cls().version
27 |
28 | @classmethod
29 | def _pydantic_rebuild(cls, config: ConfigDict | None = None, **kwargs):
30 | config = config or ConfigDict()
31 | my_classes = dict(ops_classes)
32 | my_classes[cls.__name__] = cls
33 | model_rebuild(my_classes, config=config, **kwargs)
34 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/build/__init__.py:
--------------------------------------------------------------------------------
1 | """Classes for building HUGRs."""
2 |
3 | from .base import ParentBuilder
4 | from .cfg import Block, Cfg
5 | from .cond_loop import Case, Conditional, If, TailLoop
6 | from .dfg import DefinitionBuilder, DfBase, Dfg, Function
7 | from .function import Module
8 | from .tracked_dfg import TrackedDfg
9 |
10 | __all__ = [
11 | "ParentBuilder",
12 | "Cfg",
13 | "Block",
14 | "Case",
15 | "If",
16 | "Conditional",
17 | "TailLoop",
18 | "Function",
19 | "Module",
20 | "TrackedDfg",
21 | "Dfg",
22 | "DefinitionBuilder",
23 | "DfBase",
24 | ]
25 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/build/base.py:
--------------------------------------------------------------------------------
1 | """Base classes for HUGR builders."""
2 |
3 | from __future__ import annotations
4 |
5 | from typing import (
6 | Protocol,
7 | cast,
8 | )
9 |
10 | from hugr.hugr.base import Hugr, OpVar
11 | from hugr.hugr.node_port import (
12 | Node,
13 | ToNode,
14 | )
15 |
16 |
17 | class ParentBuilder(ToNode, Protocol[OpVar]):
18 | """Abstract interface implemented by builders of nodes that contain child HUGRs."""
19 |
20 | #: The child HUGR.
21 | hugr: Hugr[OpVar]
22 | # Unique parent node.
23 | parent_node: Node
24 |
25 | def to_node(self) -> Node:
26 | return self.parent_node
27 |
28 | @property
29 | def parent_op(self) -> OpVar:
30 | """The parent node's operation."""
31 | return cast(OpVar, self.hugr[self.parent_node].op)
32 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/conftest.py:
--------------------------------------------------------------------------------
1 | """Testing setup."""
2 |
3 | import pytest
4 |
5 | from hugr import ops, tys, val
6 | from hugr.build import dfg
7 | from hugr.hugr import base as hugr
8 | from hugr.hugr import node_port
9 |
10 |
11 | @pytest.fixture(autouse=True)
12 | def _add_hugr(doctest_namespace):
13 | doctest_namespace.update(
14 | {
15 | "hugr": hugr,
16 | "node_port": node_port,
17 | "dfg": dfg,
18 | "ops": ops,
19 | "tys": tys,
20 | "val": val,
21 | }
22 | )
23 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/exceptions.py:
--------------------------------------------------------------------------------
1 | """HUGR builder exceptions."""
2 |
3 | from dataclasses import dataclass
4 |
5 | from .hugr.node_port import NodeIdx
6 |
7 |
8 | @dataclass
9 | class NoSiblingAncestor(Exception):
10 | """No sibling ancestor of target for valid inter-graph edge."""
11 |
12 | src: NodeIdx
13 | tgt: NodeIdx
14 |
15 | @property
16 | def msg(self):
17 | return (
18 | f"Source {self.src} has no sibling ancestor of target {self.tgt},"
19 | " so cannot wire up."
20 | )
21 |
22 |
23 | @dataclass
24 | class NotInSameCfg(Exception):
25 | """Source and target nodes are not in the same CFG."""
26 |
27 | src: NodeIdx
28 | tgt: NodeIdx
29 |
30 | @property
31 | def msg(self):
32 | return (
33 | f"Source {self.src} is not in the same CFG as target {self.tgt},"
34 | " so cannot wire up."
35 | )
36 |
37 |
38 | @dataclass
39 | class MismatchedExit(Exception):
40 | """Edge to exit block signature mismatch."""
41 |
42 | src: NodeIdx
43 |
44 | @property
45 | def msg(self):
46 | return (
47 | f"Exit branch from node {self.src} does not match existing exit block type."
48 | )
49 |
50 |
51 | class ParentBeforeChild(Exception):
52 | """Parent added before child."""
53 |
54 | msg: str = "Parent node must be added before child node."
55 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/hugr/__init__.py:
--------------------------------------------------------------------------------
1 | """The main HUGR structure."""
2 |
3 | from .base import Hugr, NodeData
4 | from .node_port import (
5 | Direction,
6 | InPort,
7 | Node,
8 | OutPort,
9 | Wire,
10 | )
11 |
12 | __all__ = [
13 | "Hugr",
14 | "NodeData",
15 | "Direction",
16 | "InPort",
17 | "Wire",
18 | "OutPort",
19 | "Node",
20 | ]
21 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/py.typed:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CQCL/hugr/c3a5c14a6f6838c411ffe03a4adb2f181252fef8/hugr-py/src/hugr/py.typed
--------------------------------------------------------------------------------
/hugr-py/src/hugr/qsystem/__init__.py:
--------------------------------------------------------------------------------
1 | """Quantinuum system results and utilities."""
2 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/__init__.py:
--------------------------------------------------------------------------------
1 | """Types and operations from the standard extension set."""
2 |
3 | import pkgutil
4 |
5 | from hugr._serialization.extension import Extension as PdExtension
6 | from hugr.ext import Extension
7 |
8 |
9 | def _load_extension(name: str) -> Extension:
10 | replacement = name.replace(".", "/")
11 | json_str = pkgutil.get_data(__name__, f"_json_defs/{replacement}.json")
12 | assert json_str is not None
13 | return PdExtension.model_validate_json(json_str).deserialize()
14 |
15 |
16 | PRELUDE = _load_extension("prelude")
17 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/_json_defs/README.md:
--------------------------------------------------------------------------------
1 | The files in this directory are generated and copied in, don't edit by hand. See
2 | repository justfile `gen-extensions` command.
3 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/_json_defs/arithmetic/float/types.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.1.0",
3 | "name": "arithmetic.float.types",
4 | "types": {
5 | "float64": {
6 | "extension": "arithmetic.float.types",
7 | "name": "float64",
8 | "params": [],
9 | "description": "64-bit IEEE 754-2019 floating-point value",
10 | "bound": {
11 | "b": "Explicit",
12 | "bound": "C"
13 | }
14 | }
15 | },
16 | "operations": {}
17 | }
18 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/_json_defs/arithmetic/int/types.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.1.0",
3 | "name": "arithmetic.int.types",
4 | "types": {
5 | "int": {
6 | "extension": "arithmetic.int.types",
7 | "name": "int",
8 | "params": [
9 | {
10 | "tp": "BoundedNat",
11 | "bound": 7
12 | }
13 | ],
14 | "description": "integral value of a given bit width",
15 | "bound": {
16 | "b": "Explicit",
17 | "bound": "C"
18 | }
19 | }
20 | },
21 | "operations": {}
22 | }
23 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/collections/__init__.py:
--------------------------------------------------------------------------------
1 | """Standard extensions for collection types and operations."""
2 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/float.py:
--------------------------------------------------------------------------------
1 | """Floating point types and operations."""
2 |
3 | from __future__ import annotations
4 |
5 | from dataclasses import dataclass
6 |
7 | import hugr.model as model
8 | from hugr import val
9 | from hugr.std import _load_extension
10 |
11 | FLOAT_TYPES_EXTENSION = _load_extension("arithmetic.float.types")
12 |
13 | FLOAT_T = FLOAT_TYPES_EXTENSION.types["float64"].instantiate([])
14 |
15 |
16 | FLOAT_OPS_EXTENSION = _load_extension("arithmetic.float")
17 |
18 |
19 | @dataclass
20 | class FloatVal(val.ExtensionValue):
21 | """Custom value for a floating point number."""
22 |
23 | v: float
24 |
25 | def to_value(self) -> val.Extension:
26 | name = "ConstF64"
27 | payload = {"value": self.v}
28 | return val.Extension(name, typ=FLOAT_T, val=payload)
29 |
30 | def __str__(self) -> str:
31 | return f"{self.v}"
32 |
33 | def to_model(self) -> model.Term:
34 | return model.Apply("arithmetic.float.const_f64", [model.Literal(self.v)])
35 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/logic.py:
--------------------------------------------------------------------------------
1 | """HUGR logic operations."""
2 |
3 | from __future__ import annotations
4 |
5 | from dataclasses import dataclass
6 | from typing import TYPE_CHECKING, ClassVar
7 |
8 | from hugr.ops import Command, DataflowOp, RegisteredOp
9 | from hugr.std import _load_extension
10 |
11 | if TYPE_CHECKING:
12 | from hugr import ext
13 | from hugr.ops import ComWire
14 |
15 |
16 | EXTENSION = _load_extension("logic")
17 |
18 |
19 | @dataclass(frozen=True)
20 | class _NotOp(RegisteredOp):
21 | """Logical NOT operation."""
22 |
23 | const_op_def: ClassVar[ext.OpDef] = EXTENSION.operations["Not"]
24 |
25 | def __call__(self, a: ComWire) -> Command:
26 | return DataflowOp.__call__(self, a)
27 |
28 |
29 | #: Not operation
30 | Not = _NotOp()
31 |
--------------------------------------------------------------------------------
/hugr-py/src/hugr/std/prelude.py:
--------------------------------------------------------------------------------
1 | """HUGR prelude values."""
2 |
3 | from __future__ import annotations
4 |
5 | from dataclasses import dataclass
6 |
7 | from hugr import val
8 | from hugr.std import _load_extension
9 |
10 | PRELUDE_EXTENSION = _load_extension("prelude")
11 |
12 | STRING_T_DEF = PRELUDE_EXTENSION.types["string"]
13 |
14 | STRING_T = STRING_T_DEF.instantiate([])
15 |
16 |
17 | @dataclass
18 | class StringVal(val.ExtensionValue):
19 | """Custom value for a string."""
20 |
21 | v: str
22 |
23 | def to_value(self) -> val.Extension:
24 | name = "ConstString"
25 | return val.Extension(
26 | name,
27 | typ=STRING_T,
28 | val=self.v,
29 | )
30 |
31 | def __str__(self) -> str:
32 | return f"{self.v}"
33 |
--------------------------------------------------------------------------------
/hugr-py/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CQCL/hugr/c3a5c14a6f6838c411ffe03a4adb2f181252fef8/hugr-py/tests/__init__.py
--------------------------------------------------------------------------------
/hugr-py/tests/serialization/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CQCL/hugr/c3a5c14a6f6838c411ffe03a4adb2f181252fef8/hugr-py/tests/serialization/__init__.py
--------------------------------------------------------------------------------
/hugr-py/tests/test_envelope.py:
--------------------------------------------------------------------------------
1 | from hugr import tys
2 | from hugr.build.function import Module
3 | from hugr.envelope import EnvelopeConfig, EnvelopeFormat
4 | from hugr.package import Package
5 |
6 |
7 | def test_envelope():
8 | mod = Module()
9 | f_id = mod.define_function("id", [tys.Qubit])
10 | f_id.set_outputs(f_id.input_node[0])
11 |
12 | mod2 = Module()
13 | f_id_decl = mod2.declare_function(
14 | "id", tys.PolyFuncType([], tys.FunctionType([tys.Qubit], [tys.Qubit]))
15 | )
16 | f_main = mod2.define_main([tys.Qubit])
17 | q = f_main.input_node[0]
18 | call = f_main.call(f_id_decl, q)
19 | f_main.set_outputs(call)
20 | package = Package([mod.hugr, mod2.hugr])
21 |
22 | # Binary compression roundtrip
23 | for format in [EnvelopeFormat.JSON]:
24 | for compression in [None, 0]:
25 | encoded = package.to_bytes(EnvelopeConfig(format=format, zstd=compression))
26 | decoded = Package.from_bytes(encoded)
27 | assert decoded == package
28 |
29 | # String roundtrip
30 | encoded = package.to_str(EnvelopeConfig.TEXT)
31 | decoded = Package.from_str(encoded)
32 | assert decoded == package
33 |
--------------------------------------------------------------------------------
/hugr-py/tests/test_prelude.py:
--------------------------------------------------------------------------------
1 | from hugr.build.dfg import Dfg
2 | from hugr.std.prelude import STRING_T, StringVal
3 |
4 | from .conftest import validate
5 |
6 |
7 | def test_string_val():
8 | val = StringVal("test")
9 | ext_val = val.to_value()
10 | assert ext_val.name == "ConstString"
11 | assert ext_val.typ == STRING_T
12 | assert ext_val.val == "test"
13 |
14 | dfg = Dfg()
15 | v = dfg.load(val)
16 | dfg.set_outputs(v)
17 |
18 | validate(dfg.hugr)
19 |
--------------------------------------------------------------------------------
/hugr-py/tests/test_version.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | import toml # type: ignore[import-untyped]
4 |
5 | import hugr
6 |
7 |
8 | def test_versions_are_in_sync():
9 | """Checks if the pyproject.toml and package.__init__.py __version__ are in sync."""
10 |
11 | path = Path(__file__).resolve().parents[1] / "pyproject.toml"
12 | with Path.open(path, "r") as f:
13 | pyproject = toml.loads(f.read())
14 | pyproject_version = pyproject["project"]["version"]
15 |
16 | package_init_version = hugr.__version__
17 |
18 | assert package_init_version == pyproject_version
19 |
--------------------------------------------------------------------------------
/hugr/assets/LICENCE.md:
--------------------------------------------------------------------------------
1 | HUGR logo (c) by the HUGR team.
2 | HUGR is licensed under a
3 | Creative Commons Attribution-ShareAlike 4.0 International License.
4 | You should have received a copy of the license along with this
5 |
--------------------------------------------------------------------------------
/hugr/benches/bench_main.rs:
--------------------------------------------------------------------------------
1 | //! Benchmarks
2 | #![allow(dead_code)]
3 |
4 | mod benchmarks;
5 |
6 | use criterion::criterion_main;
7 |
8 | criterion_main! {
9 | benchmarks::hugr::benches,
10 | benchmarks::subgraph::benches,
11 | benchmarks::types::benches,
12 | }
13 |
--------------------------------------------------------------------------------
/hugr/benches/benchmarks/mod.rs:
--------------------------------------------------------------------------------
1 | pub mod hugr;
2 | pub mod subgraph;
3 | pub mod types;
4 |
--------------------------------------------------------------------------------
/hugr/benches/benchmarks/types.rs:
--------------------------------------------------------------------------------
1 | // Required for black_box uses
2 | #![allow(clippy::unit_arg)]
3 | use hugr::extension::prelude::{qb_t, usize_t};
4 | use hugr::ops::AliasDecl;
5 | use hugr::types::{Signature, Type, TypeBound};
6 |
7 | use criterion::{AxisScale, Criterion, PlotConfiguration, criterion_group};
8 | use std::hint::black_box;
9 |
10 | /// Construct a complex type.
11 | fn make_complex_type() -> Type {
12 | let qb = qb_t();
13 | let int = usize_t();
14 | let q_register = Type::new_tuple(vec![qb; 8]);
15 | let b_register = Type::new_tuple(vec![int; 8]);
16 | let q_alias = Type::new_alias(AliasDecl::new("QReg", TypeBound::Any));
17 | let sum = Type::new_sum([q_register, q_alias]);
18 | Type::new_function(Signature::new(vec![sum], vec![b_register]))
19 | }
20 |
21 | fn bench_construction(c: &mut Criterion) {
22 | let mut group = c.benchmark_group("types");
23 | group.plot_config(PlotConfiguration::default().summary_scale(AxisScale::Logarithmic));
24 |
25 | group.bench_function("construction", |b| {
26 | b.iter(|| black_box(make_complex_type()));
27 | });
28 |
29 | group.finish();
30 | }
31 |
32 | criterion_group! {
33 | name = benches;
34 | config = Criterion::default();
35 | targets =
36 | bench_construction,
37 | }
38 |
--------------------------------------------------------------------------------
/hugr/src/hugr.rs:
--------------------------------------------------------------------------------
1 | //! The Hugr data structure, and its basic component handles.
2 |
3 | // Exports everything except the `internal` module.
4 | pub use hugr_core::hugr::{
5 | DEFAULT_OPTYPE, Hugr, HugrError, HugrView, IdentList, InvalidIdentifier, NodeMetadata,
6 | NodeMetadataMap, OpType, Patch, SimpleReplacement, SimpleReplacementError, ValidationError,
7 | hugrmut, patch, serialize, validate, views,
8 | };
9 |
--------------------------------------------------------------------------------
/resources/test/hugr-0.hugr:
--------------------------------------------------------------------------------
1 | HUGRiHJv?@{
2 | "modules": [
3 | {
4 | "version": "v3",
5 | "nodes": [
6 | {
7 | "parent": 0,
8 | "op": "Module"
9 | },
10 | {
11 | "parent": 0,
12 | "input_extensions": null,
13 | "op": "Const",
14 | "v": {
15 | "v": "Extension",
16 | "extensions": [
17 | "arithmetic.float.types"
18 | ],
19 | "typ": {
20 | "t": "Opaque",
21 | "extension": "arithmetic.float.types",
22 | "id": "float64",
23 | "args": [],
24 | "bound": "C"
25 | },
26 | "value": {
27 | "c": "ConstF64",
28 | "v": 42
29 | }
30 | }
31 | }
32 | ],
33 | "edges": [],
34 | "encoder": null
35 | }
36 | ],
37 | "extensions": []
38 | }
39 |
--------------------------------------------------------------------------------
/resources/test/hugr-1.hugr:
--------------------------------------------------------------------------------
1 | HUGRiHJv?@{
2 | "modules": [
3 | {
4 | "version": "live",
5 | "nodes": [
6 | {
7 | "parent": 0,
8 | "op": "Module"
9 | },
10 | {
11 | "parent": 0,
12 | "input_extensions": null,
13 | "op": "Const",
14 | "v": {
15 | "v": "Extension",
16 | "extensions": [
17 | "arithmetic.float.types"
18 | ],
19 | "typ": {
20 | "t": "Opaque",
21 | "extension": "arithmetic.float.types",
22 | "id": "float64",
23 | "args": [],
24 | "bound": "C"
25 | },
26 | "value": {
27 | "c": "ConstF64",
28 | "v": {
29 | "value": 42.0
30 | }
31 | }
32 | }
33 | }
34 | ],
35 | "edges": [],
36 | "encoder": null
37 | }
38 | ],
39 | "extensions": []
40 | }
41 |
--------------------------------------------------------------------------------
/resources/test/hugr-2.hugr:
--------------------------------------------------------------------------------
1 | HUGRiHJv?@{
2 | "modules": [
3 | {
4 | "version": "live",
5 | "nodes": [
6 | {
7 | "parent": 0,
8 | "op": "Module"
9 | },
10 | {
11 | "parent": 0,
12 | "input_extensions": null,
13 | "op": "Const",
14 | "v": {
15 | "v": "Sum",
16 | "tag": 1,
17 | "typ": {
18 | "t": "Sum",
19 | "s": "Unit",
20 | "size": 2
21 | },
22 | "vs": [
23 | {
24 | "v": "Tuple",
25 | "vs": []
26 | }
27 | ]
28 | }
29 | }
30 | ],
31 | "edges": [],
32 | "encoder": null
33 | }
34 | ],
35 | "extensions": []
36 | }
37 |
--------------------------------------------------------------------------------
/resources/test/hugr-3.hugr:
--------------------------------------------------------------------------------
1 | HUGRiHJv?@{
2 | "modules": [
3 | {
4 | "version": "live",
5 | "nodes": [
6 | {
7 | "parent": 0,
8 | "op": "Module"
9 | },
10 | {
11 | "parent": 0,
12 | "input_extensions": null,
13 | "op": "Const",
14 | "v": {
15 | "v": "Sum",
16 | "tag": 1,
17 | "typ": {
18 | "t": "Sum",
19 | "s": "Unit",
20 | "size": 2
21 | },
22 | "vs": []
23 | }
24 | }
25 | ],
26 | "edges": [],
27 | "encoder": null
28 | }
29 | ],
30 | "extensions": []
31 | }
32 |
--------------------------------------------------------------------------------
/scripts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CQCL/hugr/c3a5c14a6f6838c411ffe03a4adb2f181252fef8/scripts/__init__.py
--------------------------------------------------------------------------------
/specification/schema/.gitattributes:
--------------------------------------------------------------------------------
1 | # Treat schema json files as binary in diffs
2 | *schema*.json -diff
3 |
--------------------------------------------------------------------------------
/specification/schema/serialization.md:
--------------------------------------------------------------------------------
1 | # HUGR serialization schema
2 |
3 | This folder contains the schema for the serialization of the HUGR objects
4 | compliant with the [JSON Schema](https://json-schema.org/draft/2020-12/release-notes)
5 | specification.
6 |
7 | The model is generated from the pydantic model in the `hugr` python
8 | package, and is used to validate the serialization format of the Rust
9 | implementation.
10 |
11 | A script `generate_schema.py` is provided to regenerate the schema. To update
12 | the schema, run the following command:
13 |
14 | ```bash
15 | just update-schema
16 | ```
17 |
--------------------------------------------------------------------------------
/specification/std_extensions/arithmetic/float/types.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.1.0",
3 | "name": "arithmetic.float.types",
4 | "types": {
5 | "float64": {
6 | "extension": "arithmetic.float.types",
7 | "name": "float64",
8 | "params": [],
9 | "description": "64-bit IEEE 754-2019 floating-point value",
10 | "bound": {
11 | "b": "Explicit",
12 | "bound": "C"
13 | }
14 | }
15 | },
16 | "operations": {}
17 | }
18 |
--------------------------------------------------------------------------------
/specification/std_extensions/arithmetic/int/types.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.1.0",
3 | "name": "arithmetic.int.types",
4 | "types": {
5 | "int": {
6 | "extension": "arithmetic.int.types",
7 | "name": "int",
8 | "params": [
9 | {
10 | "tp": "BoundedNat",
11 | "bound": 7
12 | }
13 | ],
14 | "description": "integral value of a given bit width",
15 | "bound": {
16 | "b": "Explicit",
17 | "bound": "C"
18 | }
19 | }
20 | },
21 | "operations": {}
22 | }
23 |
--------------------------------------------------------------------------------