diff --git a/qis-compiler/python/tests/generate_hugrs.py b/qis-compiler/python/tests/generate_hugrs.py index 81b91bcb1..669ec4878 100644 --- a/qis-compiler/python/tests/generate_hugrs.py +++ b/qis-compiler/python/tests/generate_hugrs.py @@ -9,10 +9,12 @@ from pathlib import Path from guppylang import guppy +from guppylang.std.angles import pi from guppylang.std.builtins import array, exit, panic, result from guppylang.std.qsystem.random import RNG from guppylang.std.qsystem.utils import get_current_shot from guppylang.std.quantum import ( + crz, cx, discard, discard_array, @@ -219,6 +221,21 @@ def main() -> None: return main.compile().to_bytes() +def qft_32() -> bytes: + @guppy + def main() -> None: + qs = array(qubit() for _ in range(32)) + for i in range(32): + h(qs[i]) + angle = pi / 2 + for j in range(31 - i): + crz(qs[i], qs[i + j + 1], angle) + angle /= 2 + result("cs", measure_array(qs)) + + return main.compile().to_bytes() + + def entry_args() -> bytes: @guppy def foo(a: int) -> None: @@ -241,6 +258,7 @@ def foo(a: int) -> None: postselect_panic, rus, print_current_shot, + qft_32, rng, entry_args, ]: diff --git a/qis-compiler/python/tests/resources/addition_3_11.hugr b/qis-compiler/python/tests/resources/addition_3_11.hugr new file mode 100644 index 000000000..1b5f97fe8 Binary files /dev/null and b/qis-compiler/python/tests/resources/addition_3_11.hugr differ diff --git a/qis-compiler/python/tests/resources/qft_32.hugr b/qis-compiler/python/tests/resources/qft_32.hugr new file mode 100644 index 000000000..1254dbd32 Binary files /dev/null and b/qis-compiler/python/tests/resources/qft_32.hugr differ diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_helios new file mode 100644 index 000000000..2052782d3 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_helios @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.i + +cond_1487_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1491.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1491.exit.2.i, %__hugr__.__tk2_qalloc.1491.exit.1.i, %__hugr__.__tk2_qalloc.1491.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.1.i + +__hugr__.__tk2_qalloc.1491.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.2.i + +__hugr__.__tk2_qalloc.1491.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1487_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.i + +cond_1474_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1478.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1478.exit.2.i, %__hugr__.__tk2_qalloc.1478.exit.1.i, %__hugr__.__tk2_qalloc.1478.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.1.i + +__hugr__.__tk2_qalloc.1478.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.2.i + +__hugr__.__tk2_qalloc.1478.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1474_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1980_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1980_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1948_case_0.i.i, label %__hugr__.__tk2_qalloc.1962.exit.i + +cond_1948_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1962.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1962.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1962.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rxy(i64 %47, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %58, i64 %47, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %47, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %47, double 0xBFF921FB54442D18) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i208, double 0xBFF921FB54442D18) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %106, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %117, i64 %106, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %106, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %106, double 0xBFF921FB54442D18) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %158, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %169, i64 %158, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %158, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %158, double 0xBFF921FB54442D18) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i290.i, double 0xBFF921FB54442D18) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rxy(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = add i64 %.fca.2.extract308.i.i, 3 + %255 = lshr i64 %254, 6 + %256 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %255 + %257 = load i64, ptr %256, align 4 + %258 = and i64 %254, 63 + %259 = lshr i64 %257, %258 + %260 = trunc i64 %259 to i1 + br i1 %260, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %261 = shl nuw i64 1, %258 + %262 = xor i64 %257, %261 + store i64 %262, ptr %256, align 4 + %263 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %254 + %264 = load i64, ptr %109, align 4 + %265 = lshr i64 %264, %111 + %266 = trunc i64 %265 to i1 + br i1 %266, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %267 = load i64, ptr %263, align 4 + %268 = xor i64 %264, %114 + store i64 %268, ptr %109, align 4 + %269 = load i64, ptr %116, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %269, i64 %267, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 0 + %272 = load i64, ptr %256, align 4 + %273 = lshr i64 %272, %258 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 1 + %276 = xor i64 %272, %261 + store i64 %276, ptr %256, align 4 + store i64 %275, ptr %263, align 4 + %277 = load i64, ptr %140, align 4 + %278 = lshr i64 %277, %142 + %279 = trunc i64 %278 to i1 + br i1 %279, label %panic.i806.i, label %__barray_mask_borrow.exit807.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %145 + store i64 %280, ptr %140, align 4 + %281 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %281, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %234, i64 %281, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %281, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %281, double 0xBFF921FB54442D18) + %282 = load i64, ptr %140, align 4 + %283 = lshr i64 %282, %142 + %284 = trunc i64 %283 to i1 + br i1 %284, label %__barray_mask_return.exit811.i, label %panic.i810.i + +panic.i810.i: ; preds = %__barray_mask_borrow.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit811.i: ; preds = %__barray_mask_borrow.exit807.i + %285 = xor i64 %282, %145 + store i64 %285, ptr %140, align 4 + store i64 %281, ptr %147, align 4 + %286 = load i64, ptr %109, align 4 + %287 = lshr i64 %286, %111 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_return.exit811.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_return.exit811.i + %289 = xor i64 %286, %114 + store i64 %289, ptr %109, align 4 + store i64 %271, ptr %116, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %294, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %299, i64 %294, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %294, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %294, double 0xBFF921FB54442D18) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %256, align 4 + %309 = lshr i64 %308, %258 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %261 + store i64 %311, ptr %256, align 4 + %312 = load i64, ptr %263, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %312, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %317, i64 %312, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %312, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %312, double 0xBFF921FB54442D18) + %318 = load i64, ptr %256, align 4 + %319 = lshr i64 %318, %258 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %261 + store i64 %321, ptr %256, align 4 + store i64 %312, ptr %263, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 0 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %196, align 4 + %345 = lshr i64 %344, %198 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 1 + %348 = xor i64 %344, %201 + store i64 %348, ptr %196, align 4 + store i64 %347, ptr %203, align 4 + %349 = load i64, ptr %69, align 4 + %350 = lshr i64 %349, %71 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %74 + store i64 %352, ptr %69, align 4 + store i64 %342, ptr %76, align 4 + %353 = load i64, ptr %109, align 4 + %354 = lshr i64 %353, %111 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %114 + store i64 %356, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %376, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %381, i64 %376, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %376, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %376, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 2 + %385 = load i64, ptr %140, align 4 + %386 = lshr i64 %385, %142 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 1 + %389 = xor i64 %385, %145 + store i64 %389, ptr %140, align 4 + store i64 %388, ptr %147, align 4 + %390 = load i64, ptr %69, align 4 + %391 = lshr i64 %390, %71 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %74 + store i64 %393, ptr %69, align 4 + store i64 %384, ptr %76, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %425, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %430, i64 %425, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %425, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %425, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %453, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %459, i64 %453, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %453, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %453, double 0xBFF921FB54442D18) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rxy(i64 %477, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %488, i64 %477, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %477, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %477, double 0xBFF921FB54442D18) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1402_case_1.i, label %cond_1402_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1402_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1402.i + +cond_1402_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1402.i + +cond_exit_1402.i: ; preds = %cond_1402_case_1.i, %cond_1402_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1402_case_1.i ], [ undef, %cond_1402_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1402_case_1.i ], [ %.fca.2.extract120.i, %cond_1402_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1399_case_1.i + +panic.i.i213: ; preds = %cond_exit_1402.i.3, %cond_exit_1402.i.2, %cond_exit_1402.i.1, %cond_exit_1402.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1399_case_1.i: ; preds = %cond_exit_1402.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + +cond_2053_case_1.i: ; preds = %cond_1399_case_1.i.3, %cond_1399_case_1.i.2, %cond_1399_case_1.i.1, %cond_1399_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit": ; preds = %cond_1399_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1402_case_1.i.1, label %cond_1402_case_0.i.1 + +cond_1402_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1402.i.1 + +cond_1402_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1402.i.1 + +cond_exit_1402.i.1: ; preds = %cond_1402_case_1.i.1, %cond_1402_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1402_case_1.i.1 ], [ undef, %cond_1402_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1402_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1402_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1399_case_1.i.1, label %panic.i.i213 + +cond_1399_case_1.i.1: ; preds = %cond_exit_1402.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1": ; preds = %cond_1399_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1402_case_1.i.2, label %cond_1402_case_0.i.2 + +cond_1402_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1402.i.2 + +cond_1402_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1402.i.2 + +cond_exit_1402.i.2: ; preds = %cond_1402_case_1.i.2, %cond_1402_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1402_case_1.i.2 ], [ undef, %cond_1402_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1402_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1402_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1399_case_1.i.2, label %panic.i.i213 + +cond_1399_case_1.i.2: ; preds = %cond_exit_1402.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2": ; preds = %cond_1399_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1402_case_1.i.3, label %cond_1402_case_0.i.3 + +cond_1402_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1402.i.3 + +cond_1402_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1402.i.3 + +cond_exit_1402.i.3: ; preds = %cond_1402_case_0.i.3, %cond_1402_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1402_case_1.i.3 ], [ undef, %cond_1402_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1402_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1402_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1399_case_1.i.3, label %panic.i.i213 + +cond_1399_case_1.i.3: ; preds = %cond_exit_1402.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3": ; preds = %cond_1399_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1024, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1024.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_984_case_1, label %cond_exit_1024 + +cond_exit_1024: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_984_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1024.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1024 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_984_case_1.1, label %cond_exit_1024.1 + +cond_984_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1024.1 + +cond_exit_1024.1: ; preds = %cond_984_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1024 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1024.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1024.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_984_case_1.2, label %cond_exit_1024.2 + +cond_984_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1024.2 + +cond_exit_1024.2: ; preds = %cond_984_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1024.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1024.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1024.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_984_case_1.3, label %cond_exit_1024.3 + +cond_984_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1024.3 + +cond_exit_1024.3: ; preds = %cond_984_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1024.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1024.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_984_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1024 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1439_case_1, label %cond_1439_case_0 + +cond_1439_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1439 + +cond_1439_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1439 + +cond_exit_1439: ; preds = %cond_1439_case_1, %cond_1439_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1439_case_1 ], [ %.fca.2.extract, %cond_1439_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1362_case_1, label %cond_1362_case_0 + +cond_1362_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1362_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1060 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1060, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1060 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1060.1, label %cond_2283_case_0.i + +cond_exit_1060.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1060.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rxy(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1060.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1060.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1060.2, label %cond_2283_case_0.i + +cond_exit_1060.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1060.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rxy(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1060.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1060.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1060.3, label %cond_2283_case_0.i + +cond_exit_1060.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1060.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rxy(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1060.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1060: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1060 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rxy(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_helios new file mode 100644 index 000000000..ee1bcede5 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_helios @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.218.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.218.exit.8.i, %__hugr__.__tk2_qalloc.218.exit.7.i, %__hugr__.__tk2_qalloc.218.exit.6.i, %__hugr__.__tk2_qalloc.218.exit.5.i, %__hugr__.__tk2_qalloc.218.exit.4.i, %__hugr__.__tk2_qalloc.218.exit.3.i, %__hugr__.__tk2_qalloc.218.exit.2.i, %__hugr__.__tk2_qalloc.218.exit.1.i, %__hugr__.__tk2_qalloc.218.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.1.i + +__hugr__.__tk2_qalloc.218.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not.i = icmp eq i64 %7, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.2.i + +__hugr__.__tk2_qalloc.218.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not106.i = icmp eq i64 %11, 0 + br i1 %.not106.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.3.i + +__hugr__.__tk2_qalloc.218.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not107.i = icmp eq i64 %15, 0 + br i1 %.not107.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.4.i + +__hugr__.__tk2_qalloc.218.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not108.i = icmp eq i64 %19, 0 + br i1 %.not108.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.5.i + +__hugr__.__tk2_qalloc.218.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not109.i = icmp eq i64 %23, 0 + br i1 %.not109.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.6.i + +__hugr__.__tk2_qalloc.218.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not110.i = icmp eq i64 %27, 0 + br i1 %.not110.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.7.i + +__hugr__.__tk2_qalloc.218.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not111.i = icmp eq i64 %31, 0 + br i1 %.not111.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.8.i + +__hugr__.__tk2_qalloc.218.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not112.i = icmp eq i64 %35, 0 + br i1 %.not112.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not113.i = icmp eq i64 %39, 0 + br i1 %.not113.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.9.i + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.9.i ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.9.i ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.9.i ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.9.i ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.9.i ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_helios new file mode 100644 index 000000000..938ef7cb9 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_helios @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rxy(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rxy(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_helios new file mode 100644 index 000000000..2d34acc98 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_helios @@ -0,0 +1,468 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.210.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.210.exit.8.i, %__hugr__.__tk2_qalloc.210.exit.7.i, %__hugr__.__tk2_qalloc.210.exit.6.i, %__hugr__.__tk2_qalloc.210.exit.5.i, %__hugr__.__tk2_qalloc.210.exit.4.i, %__hugr__.__tk2_qalloc.210.exit.3.i, %__hugr__.__tk2_qalloc.210.exit.2.i, %__hugr__.__tk2_qalloc.210.exit.1.i, %__hugr__.__tk2_qalloc.210.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.1.i + +__hugr__.__tk2_qalloc.210.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not280.i = icmp eq i64 %7, 0 + br i1 %.not280.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.2.i + +__hugr__.__tk2_qalloc.210.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not281.i = icmp eq i64 %11, 0 + br i1 %.not281.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.3.i + +__hugr__.__tk2_qalloc.210.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not282.i = icmp eq i64 %15, 0 + br i1 %.not282.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.4.i + +__hugr__.__tk2_qalloc.210.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not283.i = icmp eq i64 %19, 0 + br i1 %.not283.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.5.i + +__hugr__.__tk2_qalloc.210.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not284.i = icmp eq i64 %23, 0 + br i1 %.not284.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.6.i + +__hugr__.__tk2_qalloc.210.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not285.i = icmp eq i64 %27, 0 + br i1 %.not285.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.7.i + +__hugr__.__tk2_qalloc.210.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not286.i = icmp eq i64 %31, 0 + br i1 %.not286.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.8.i + +__hugr__.__tk2_qalloc.210.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not287.i = icmp eq i64 %35, 0 + br i1 %.not287.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not288.i = icmp eq i64 %39, 0 + br i1 %.not288.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.9.i + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rxy(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rxy(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rxy(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rxy(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + br label %__barray_check_bounds.exit255.i + +cond_89_case_0.i: ; preds = %cond_exit_89.thread.i + %115 = load i64, ptr %72, align 4 + %116 = or i64 %115, -1024 + store i64 %116, ptr %72, align 4 + %117 = icmp eq i64 %116, -1 + br i1 %117, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +mask_block_err.i.i: ; preds = %cond_89_case_0.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit255.i: ; preds = %cond_exit_89.thread.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %"92_0.0279.i" = phi i64 [ 0, %"__hugr__.$measure_array$$n(10).280.exit.i" ], [ %118, %cond_exit_89.thread.i ] + %118 = add nuw nsw i64 %"92_0.0279.i", 1 + %119 = load i64, ptr %72, align 4 + %120 = lshr i64 %119, %"92_0.0279.i" + %121 = trunc i64 %120 to i1 + br i1 %121, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +__barray_mask_borrow.exit259.i: ; preds = %__barray_check_bounds.exit255.i + %122 = shl nuw nsw i64 1, %"92_0.0279.i" + %123 = xor i64 %119, %122 + store i64 %123, ptr %72, align 4 + %124 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"92_0.0279.i" + %125 = load { i1, i64, i1 }, ptr %124, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %125, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %__barray_check_bounds.exit255.i + %exitcond.i = icmp eq i64 %118, 10 + br i1 %exitcond.i, label %cond_89_case_0.i, label %__barray_check_bounds.exit255.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %125, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_89_case_0.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %126 = tail call i64 @teardown() + ret i64 %126 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_helios new file mode 100644 index 000000000..50ddd8eca --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_helios @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_helios new file mode 100644 index 000000000..531f2c607 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_helios new file mode 100644 index 000000000..fb5d96cd4 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_helios new file mode 100644 index 000000000..47a2a4968 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_helios @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_helios new file mode 100644 index 000000000..ff82740e6 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_helios @@ -0,0 +1,579 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_393_case_0.i, label %__barray_check_bounds.exit + +cond_393_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rxy(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_307_case_1.i, label %cond_307_case_0.i + +cond_307_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_307.i + +cond_307_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_307.i + +cond_exit_307.i: ; preds = %cond_307_case_0.i, %cond_307_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_307_case_1.i ], [ undef, %cond_307_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_307_case_1.i ], [ %.fca.2.extract120.i, %cond_307_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_304_case_1.i + +panic.i.i: ; preds = %cond_exit_307.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_304_case_1.i: ; preds = %cond_exit_307.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_303_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + +cond_303_case_1.i: ; preds = %cond_304_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit": ; preds = %cond_304_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_650_case_0: ; preds = %cond_exit_650 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_650_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_650 + %"647_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_650 ] + %49 = add nuw nsw i64 %"647_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"647_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_650, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"647_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"647_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_673_case_1, label %cond_exit_650 + +cond_exit_650: ; preds = %cond_673_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"647_0.0998", 30 + br i1 %57, label %cond_650_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_650_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_673_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_650 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rzz(i64 %132, i64 %140, double %143) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_385_case_1, label %cond_385_case_0 + +cond_385_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_385 + +cond_385_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_385 + +cond_exit_385: ; preds = %cond_385_case_1, %cond_385_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_385_case_1 ], [ %.fca.2.extract, %cond_385_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_571_case_1, label %cond_571_case_0 + +cond_571_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_571_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_helios new file mode 100644 index 000000000..634388234 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_helios @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_helios new file mode 100644 index 000000000..95ddd2420 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_helios @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_242_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_242_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_242_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_256_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_242_case_1.backedge.i.i + +cond_242_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_256_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_256_case_1.i.i + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_242_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_256_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..dc5c29a6b --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.i + +cond_1487_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1491.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1491.exit.2.i, %__hugr__.__tk2_qalloc.1491.exit.1.i, %__hugr__.__tk2_qalloc.1491.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.1.i + +__hugr__.__tk2_qalloc.1491.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.2.i + +__hugr__.__tk2_qalloc.1491.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1487_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.i + +cond_1474_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1478.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1478.exit.2.i, %__hugr__.__tk2_qalloc.1478.exit.1.i, %__hugr__.__tk2_qalloc.1478.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.1.i + +__hugr__.__tk2_qalloc.1478.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.2.i + +__hugr__.__tk2_qalloc.1478.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1474_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1980_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1980_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1948_case_0.i.i, label %__hugr__.__tk2_qalloc.1962.exit.i + +cond_1948_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1962.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1962.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1962.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rxy(i64 %47, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %58, i64 %47, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %47, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %47, double 0xBFF921FB54442D18) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i208, double 0xBFF921FB54442D18) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %106, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %117, i64 %106, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %106, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %106, double 0xBFF921FB54442D18) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %158, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %169, i64 %158, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %158, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %158, double 0xBFF921FB54442D18) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i290.i, double 0xBFF921FB54442D18) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rxy(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = add i64 %.fca.2.extract308.i.i, 3 + %255 = lshr i64 %254, 6 + %256 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %255 + %257 = load i64, ptr %256, align 4 + %258 = and i64 %254, 63 + %259 = lshr i64 %257, %258 + %260 = trunc i64 %259 to i1 + br i1 %260, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %261 = shl nuw i64 1, %258 + %262 = xor i64 %257, %261 + store i64 %262, ptr %256, align 4 + %263 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %254 + %264 = load i64, ptr %109, align 4 + %265 = lshr i64 %264, %111 + %266 = trunc i64 %265 to i1 + br i1 %266, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %267 = load i64, ptr %263, align 4 + %268 = xor i64 %264, %114 + store i64 %268, ptr %109, align 4 + %269 = load i64, ptr %116, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %269, i64 %267, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 0 + %272 = load i64, ptr %256, align 4 + %273 = lshr i64 %272, %258 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 1 + %276 = xor i64 %272, %261 + store i64 %276, ptr %256, align 4 + store i64 %275, ptr %263, align 4 + %277 = load i64, ptr %140, align 4 + %278 = lshr i64 %277, %142 + %279 = trunc i64 %278 to i1 + br i1 %279, label %panic.i806.i, label %__barray_mask_borrow.exit807.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %145 + store i64 %280, ptr %140, align 4 + %281 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %281, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %234, i64 %281, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %281, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %281, double 0xBFF921FB54442D18) + %282 = load i64, ptr %140, align 4 + %283 = lshr i64 %282, %142 + %284 = trunc i64 %283 to i1 + br i1 %284, label %__barray_mask_return.exit811.i, label %panic.i810.i + +panic.i810.i: ; preds = %__barray_mask_borrow.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit811.i: ; preds = %__barray_mask_borrow.exit807.i + %285 = xor i64 %282, %145 + store i64 %285, ptr %140, align 4 + store i64 %281, ptr %147, align 4 + %286 = load i64, ptr %109, align 4 + %287 = lshr i64 %286, %111 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_return.exit811.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_return.exit811.i + %289 = xor i64 %286, %114 + store i64 %289, ptr %109, align 4 + store i64 %271, ptr %116, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %294, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %299, i64 %294, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %294, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %294, double 0xBFF921FB54442D18) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %256, align 4 + %309 = lshr i64 %308, %258 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %261 + store i64 %311, ptr %256, align 4 + %312 = load i64, ptr %263, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %312, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %317, i64 %312, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %312, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %312, double 0xBFF921FB54442D18) + %318 = load i64, ptr %256, align 4 + %319 = lshr i64 %318, %258 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %261 + store i64 %321, ptr %256, align 4 + store i64 %312, ptr %263, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 0 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %196, align 4 + %345 = lshr i64 %344, %198 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 1 + %348 = xor i64 %344, %201 + store i64 %348, ptr %196, align 4 + store i64 %347, ptr %203, align 4 + %349 = load i64, ptr %69, align 4 + %350 = lshr i64 %349, %71 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %74 + store i64 %352, ptr %69, align 4 + store i64 %342, ptr %76, align 4 + %353 = load i64, ptr %109, align 4 + %354 = lshr i64 %353, %111 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %114 + store i64 %356, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %376, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %381, i64 %376, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %376, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %376, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 2 + %385 = load i64, ptr %140, align 4 + %386 = lshr i64 %385, %142 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 1 + %389 = xor i64 %385, %145 + store i64 %389, ptr %140, align 4 + store i64 %388, ptr %147, align 4 + %390 = load i64, ptr %69, align 4 + %391 = lshr i64 %390, %71 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %74 + store i64 %393, ptr %69, align 4 + store i64 %384, ptr %76, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %425, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %430, i64 %425, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %425, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %425, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %453, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %459, i64 %453, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %453, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %453, double 0xBFF921FB54442D18) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rxy(i64 %477, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %488, i64 %477, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %477, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %477, double 0xBFF921FB54442D18) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1402_case_1.i, label %cond_1402_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1402_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1402.i + +cond_1402_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1402.i + +cond_exit_1402.i: ; preds = %cond_1402_case_1.i, %cond_1402_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1402_case_1.i ], [ undef, %cond_1402_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1402_case_1.i ], [ %.fca.2.extract120.i, %cond_1402_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1399_case_1.i + +panic.i.i213: ; preds = %cond_exit_1402.i.3, %cond_exit_1402.i.2, %cond_exit_1402.i.1, %cond_exit_1402.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1399_case_1.i: ; preds = %cond_exit_1402.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + +cond_2053_case_1.i: ; preds = %cond_1399_case_1.i.3, %cond_1399_case_1.i.2, %cond_1399_case_1.i.1, %cond_1399_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit": ; preds = %cond_1399_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1402_case_1.i.1, label %cond_1402_case_0.i.1 + +cond_1402_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1402.i.1 + +cond_1402_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1402.i.1 + +cond_exit_1402.i.1: ; preds = %cond_1402_case_1.i.1, %cond_1402_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1402_case_1.i.1 ], [ undef, %cond_1402_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1402_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1402_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1399_case_1.i.1, label %panic.i.i213 + +cond_1399_case_1.i.1: ; preds = %cond_exit_1402.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1": ; preds = %cond_1399_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1402_case_1.i.2, label %cond_1402_case_0.i.2 + +cond_1402_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1402.i.2 + +cond_1402_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1402.i.2 + +cond_exit_1402.i.2: ; preds = %cond_1402_case_1.i.2, %cond_1402_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1402_case_1.i.2 ], [ undef, %cond_1402_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1402_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1402_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1399_case_1.i.2, label %panic.i.i213 + +cond_1399_case_1.i.2: ; preds = %cond_exit_1402.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2": ; preds = %cond_1399_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1402_case_1.i.3, label %cond_1402_case_0.i.3 + +cond_1402_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1402.i.3 + +cond_1402_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1402.i.3 + +cond_exit_1402.i.3: ; preds = %cond_1402_case_0.i.3, %cond_1402_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1402_case_1.i.3 ], [ undef, %cond_1402_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1402_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1402_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1399_case_1.i.3, label %panic.i.i213 + +cond_1399_case_1.i.3: ; preds = %cond_exit_1402.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3": ; preds = %cond_1399_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1024, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1024.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_984_case_1, label %cond_exit_1024 + +cond_exit_1024: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_984_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1024.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1024 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_984_case_1.1, label %cond_exit_1024.1 + +cond_984_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1024.1 + +cond_exit_1024.1: ; preds = %cond_984_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1024 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1024.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1024.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_984_case_1.2, label %cond_exit_1024.2 + +cond_984_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1024.2 + +cond_exit_1024.2: ; preds = %cond_984_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1024.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1024.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1024.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_984_case_1.3, label %cond_exit_1024.3 + +cond_984_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1024.3 + +cond_exit_1024.3: ; preds = %cond_984_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1024.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1024.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_984_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1024 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1439_case_1, label %cond_1439_case_0 + +cond_1439_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1439 + +cond_1439_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1439 + +cond_exit_1439: ; preds = %cond_1439_case_1, %cond_1439_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1439_case_1 ], [ %.fca.2.extract, %cond_1439_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1362_case_1, label %cond_1362_case_0 + +cond_1362_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1362_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1060 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1060, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1060 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1060.1, label %cond_2283_case_0.i + +cond_exit_1060.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1060.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rxy(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1060.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1060.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1060.2, label %cond_2283_case_0.i + +cond_exit_1060.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1060.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rxy(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1060.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1060.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1060.3, label %cond_2283_case_0.i + +cond_exit_1060.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1060.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rxy(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1060.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1060: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1060 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rxy(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..12a738dcf --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.218.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.218.exit.8.i, %__hugr__.__tk2_qalloc.218.exit.7.i, %__hugr__.__tk2_qalloc.218.exit.6.i, %__hugr__.__tk2_qalloc.218.exit.5.i, %__hugr__.__tk2_qalloc.218.exit.4.i, %__hugr__.__tk2_qalloc.218.exit.3.i, %__hugr__.__tk2_qalloc.218.exit.2.i, %__hugr__.__tk2_qalloc.218.exit.1.i, %__hugr__.__tk2_qalloc.218.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.1.i + +__hugr__.__tk2_qalloc.218.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not.i = icmp eq i64 %7, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.2.i + +__hugr__.__tk2_qalloc.218.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not106.i = icmp eq i64 %11, 0 + br i1 %.not106.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.3.i + +__hugr__.__tk2_qalloc.218.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not107.i = icmp eq i64 %15, 0 + br i1 %.not107.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.4.i + +__hugr__.__tk2_qalloc.218.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not108.i = icmp eq i64 %19, 0 + br i1 %.not108.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.5.i + +__hugr__.__tk2_qalloc.218.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not109.i = icmp eq i64 %23, 0 + br i1 %.not109.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.6.i + +__hugr__.__tk2_qalloc.218.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not110.i = icmp eq i64 %27, 0 + br i1 %.not110.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.7.i + +__hugr__.__tk2_qalloc.218.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not111.i = icmp eq i64 %31, 0 + br i1 %.not111.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.8.i + +__hugr__.__tk2_qalloc.218.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not112.i = icmp eq i64 %35, 0 + br i1 %.not112.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not113.i = icmp eq i64 %39, 0 + br i1 %.not113.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.9.i + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.9.i ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.9.i ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.9.i ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.9.i ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.9.i ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..fb7dcea0a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rxy(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rxy(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..ac069410e --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,468 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.210.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.210.exit.8.i, %__hugr__.__tk2_qalloc.210.exit.7.i, %__hugr__.__tk2_qalloc.210.exit.6.i, %__hugr__.__tk2_qalloc.210.exit.5.i, %__hugr__.__tk2_qalloc.210.exit.4.i, %__hugr__.__tk2_qalloc.210.exit.3.i, %__hugr__.__tk2_qalloc.210.exit.2.i, %__hugr__.__tk2_qalloc.210.exit.1.i, %__hugr__.__tk2_qalloc.210.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.1.i + +__hugr__.__tk2_qalloc.210.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not280.i = icmp eq i64 %7, 0 + br i1 %.not280.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.2.i + +__hugr__.__tk2_qalloc.210.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not281.i = icmp eq i64 %11, 0 + br i1 %.not281.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.3.i + +__hugr__.__tk2_qalloc.210.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not282.i = icmp eq i64 %15, 0 + br i1 %.not282.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.4.i + +__hugr__.__tk2_qalloc.210.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not283.i = icmp eq i64 %19, 0 + br i1 %.not283.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.5.i + +__hugr__.__tk2_qalloc.210.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not284.i = icmp eq i64 %23, 0 + br i1 %.not284.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.6.i + +__hugr__.__tk2_qalloc.210.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not285.i = icmp eq i64 %27, 0 + br i1 %.not285.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.7.i + +__hugr__.__tk2_qalloc.210.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not286.i = icmp eq i64 %31, 0 + br i1 %.not286.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.8.i + +__hugr__.__tk2_qalloc.210.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not287.i = icmp eq i64 %35, 0 + br i1 %.not287.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not288.i = icmp eq i64 %39, 0 + br i1 %.not288.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.9.i + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rxy(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rxy(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rxy(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rxy(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + br label %__barray_check_bounds.exit255.i + +cond_89_case_0.i: ; preds = %cond_exit_89.thread.i + %115 = load i64, ptr %72, align 4 + %116 = or i64 %115, -1024 + store i64 %116, ptr %72, align 4 + %117 = icmp eq i64 %116, -1 + br i1 %117, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +mask_block_err.i.i: ; preds = %cond_89_case_0.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit255.i: ; preds = %cond_exit_89.thread.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %"92_0.0279.i" = phi i64 [ 0, %"__hugr__.$measure_array$$n(10).280.exit.i" ], [ %118, %cond_exit_89.thread.i ] + %118 = add nuw nsw i64 %"92_0.0279.i", 1 + %119 = load i64, ptr %72, align 4 + %120 = lshr i64 %119, %"92_0.0279.i" + %121 = trunc i64 %120 to i1 + br i1 %121, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +__barray_mask_borrow.exit259.i: ; preds = %__barray_check_bounds.exit255.i + %122 = shl nuw nsw i64 1, %"92_0.0279.i" + %123 = xor i64 %119, %122 + store i64 %123, ptr %72, align 4 + %124 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"92_0.0279.i" + %125 = load { i1, i64, i1 }, ptr %124, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %125, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %__barray_check_bounds.exit255.i + %exitcond.i = icmp eq i64 %118, 10 + br i1 %exitcond.i, label %cond_89_case_0.i, label %__barray_check_bounds.exit255.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %125, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_89_case_0.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %126 = tail call i64 @teardown() + ret i64 %126 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..492a0172b --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..0cd141068 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..3035be440 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..5d57126ee --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..4b3a3ed1c --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,579 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_393_case_0.i, label %__barray_check_bounds.exit + +cond_393_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rxy(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_307_case_1.i, label %cond_307_case_0.i + +cond_307_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_307.i + +cond_307_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_307.i + +cond_exit_307.i: ; preds = %cond_307_case_0.i, %cond_307_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_307_case_1.i ], [ undef, %cond_307_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_307_case_1.i ], [ %.fca.2.extract120.i, %cond_307_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_304_case_1.i + +panic.i.i: ; preds = %cond_exit_307.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_304_case_1.i: ; preds = %cond_exit_307.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_303_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + +cond_303_case_1.i: ; preds = %cond_304_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit": ; preds = %cond_304_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_650_case_0: ; preds = %cond_exit_650 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_650_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_650 + %"647_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_650 ] + %49 = add nuw nsw i64 %"647_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"647_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_650, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"647_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"647_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_673_case_1, label %cond_exit_650 + +cond_exit_650: ; preds = %cond_673_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"647_0.0998", 30 + br i1 %57, label %cond_650_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_650_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_673_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_650 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rzz(i64 %132, i64 %140, double %143) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_385_case_1, label %cond_385_case_0 + +cond_385_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_385 + +cond_385_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_385 + +cond_exit_385: ; preds = %cond_385_case_1, %cond_385_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_385_case_1 ], [ %.fca.2.extract, %cond_385_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_571_case_1, label %cond_571_case_0 + +cond_571_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_571_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..b81ba25d8 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_helios new file mode 100644 index 000000000..917924d44 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_helios @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_242_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_242_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_242_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_256_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_242_case_1.backedge.i.i + +cond_242_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_256_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_256_case_1.i.i + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_242_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_256_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_helios new file mode 100644 index 000000000..0dd954b24 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_helios @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.i + +cond_1487_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1491.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1491.exit.2.i, %__hugr__.__tk2_qalloc.1491.exit.1.i, %__hugr__.__tk2_qalloc.1491.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.1.i + +__hugr__.__tk2_qalloc.1491.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.2.i + +__hugr__.__tk2_qalloc.1491.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1487_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.i + +cond_1474_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1478.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1478.exit.2.i, %__hugr__.__tk2_qalloc.1478.exit.1.i, %__hugr__.__tk2_qalloc.1478.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.1.i + +__hugr__.__tk2_qalloc.1478.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.2.i + +__hugr__.__tk2_qalloc.1478.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1474_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1980_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1980_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1948_case_0.i.i, label %__hugr__.__tk2_qalloc.1962.exit.i + +cond_1948_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1962.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1962.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1962.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rxy(i64 %47, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %58, i64 %47, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %47, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %47, double 0xBFF921FB54442D18) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i208, double 0xBFF921FB54442D18) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %106, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %117, i64 %106, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %106, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %106, double 0xBFF921FB54442D18) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %158, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %169, i64 %158, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %158, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %158, double 0xBFF921FB54442D18) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i290.i, double 0xBFF921FB54442D18) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rxy(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = add i64 %.fca.2.extract308.i.i, 3 + %255 = lshr i64 %254, 6 + %256 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %255 + %257 = load i64, ptr %256, align 4 + %258 = and i64 %254, 63 + %259 = lshr i64 %257, %258 + %260 = trunc i64 %259 to i1 + br i1 %260, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %261 = shl nuw i64 1, %258 + %262 = xor i64 %257, %261 + store i64 %262, ptr %256, align 4 + %263 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %254 + %264 = load i64, ptr %109, align 4 + %265 = lshr i64 %264, %111 + %266 = trunc i64 %265 to i1 + br i1 %266, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %267 = load i64, ptr %263, align 4 + %268 = xor i64 %264, %114 + store i64 %268, ptr %109, align 4 + %269 = load i64, ptr %116, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %269, i64 %267, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 0 + %272 = load i64, ptr %256, align 4 + %273 = lshr i64 %272, %258 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 1 + %276 = xor i64 %272, %261 + store i64 %276, ptr %256, align 4 + store i64 %275, ptr %263, align 4 + %277 = load i64, ptr %140, align 4 + %278 = lshr i64 %277, %142 + %279 = trunc i64 %278 to i1 + br i1 %279, label %panic.i806.i, label %__barray_mask_borrow.exit807.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %145 + store i64 %280, ptr %140, align 4 + %281 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %281, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %234, i64 %281, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %281, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %281, double 0xBFF921FB54442D18) + %282 = load i64, ptr %140, align 4 + %283 = lshr i64 %282, %142 + %284 = trunc i64 %283 to i1 + br i1 %284, label %__barray_mask_return.exit811.i, label %panic.i810.i + +panic.i810.i: ; preds = %__barray_mask_borrow.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit811.i: ; preds = %__barray_mask_borrow.exit807.i + %285 = xor i64 %282, %145 + store i64 %285, ptr %140, align 4 + store i64 %281, ptr %147, align 4 + %286 = load i64, ptr %109, align 4 + %287 = lshr i64 %286, %111 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_return.exit811.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_return.exit811.i + %289 = xor i64 %286, %114 + store i64 %289, ptr %109, align 4 + store i64 %271, ptr %116, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %294, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %299, i64 %294, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %294, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %294, double 0xBFF921FB54442D18) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %256, align 4 + %309 = lshr i64 %308, %258 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %261 + store i64 %311, ptr %256, align 4 + %312 = load i64, ptr %263, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %312, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %317, i64 %312, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %312, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %312, double 0xBFF921FB54442D18) + %318 = load i64, ptr %256, align 4 + %319 = lshr i64 %318, %258 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %261 + store i64 %321, ptr %256, align 4 + store i64 %312, ptr %263, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 0 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %196, align 4 + %345 = lshr i64 %344, %198 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 1 + %348 = xor i64 %344, %201 + store i64 %348, ptr %196, align 4 + store i64 %347, ptr %203, align 4 + %349 = load i64, ptr %69, align 4 + %350 = lshr i64 %349, %71 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %74 + store i64 %352, ptr %69, align 4 + store i64 %342, ptr %76, align 4 + %353 = load i64, ptr %109, align 4 + %354 = lshr i64 %353, %111 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %114 + store i64 %356, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %376, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %381, i64 %376, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %376, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %376, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 2 + %385 = load i64, ptr %140, align 4 + %386 = lshr i64 %385, %142 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 1 + %389 = xor i64 %385, %145 + store i64 %389, ptr %140, align 4 + store i64 %388, ptr %147, align 4 + %390 = load i64, ptr %69, align 4 + %391 = lshr i64 %390, %71 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %74 + store i64 %393, ptr %69, align 4 + store i64 %384, ptr %76, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %425, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %430, i64 %425, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %425, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %425, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %453, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %459, i64 %453, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %453, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %453, double 0xBFF921FB54442D18) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rxy(i64 %477, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %488, i64 %477, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %477, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %477, double 0xBFF921FB54442D18) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1402_case_1.i, label %cond_1402_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1402_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1402.i + +cond_1402_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1402.i + +cond_exit_1402.i: ; preds = %cond_1402_case_1.i, %cond_1402_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1402_case_1.i ], [ undef, %cond_1402_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1402_case_1.i ], [ %.fca.2.extract120.i, %cond_1402_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1399_case_1.i + +panic.i.i213: ; preds = %cond_exit_1402.i.3, %cond_exit_1402.i.2, %cond_exit_1402.i.1, %cond_exit_1402.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1399_case_1.i: ; preds = %cond_exit_1402.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + +cond_2053_case_1.i: ; preds = %cond_1399_case_1.i.3, %cond_1399_case_1.i.2, %cond_1399_case_1.i.1, %cond_1399_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit": ; preds = %cond_1399_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1402_case_1.i.1, label %cond_1402_case_0.i.1 + +cond_1402_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1402.i.1 + +cond_1402_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1402.i.1 + +cond_exit_1402.i.1: ; preds = %cond_1402_case_1.i.1, %cond_1402_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1402_case_1.i.1 ], [ undef, %cond_1402_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1402_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1402_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1399_case_1.i.1, label %panic.i.i213 + +cond_1399_case_1.i.1: ; preds = %cond_exit_1402.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1": ; preds = %cond_1399_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1402_case_1.i.2, label %cond_1402_case_0.i.2 + +cond_1402_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1402.i.2 + +cond_1402_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1402.i.2 + +cond_exit_1402.i.2: ; preds = %cond_1402_case_1.i.2, %cond_1402_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1402_case_1.i.2 ], [ undef, %cond_1402_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1402_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1402_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1399_case_1.i.2, label %panic.i.i213 + +cond_1399_case_1.i.2: ; preds = %cond_exit_1402.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2": ; preds = %cond_1399_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1402_case_1.i.3, label %cond_1402_case_0.i.3 + +cond_1402_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1402.i.3 + +cond_1402_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1402.i.3 + +cond_exit_1402.i.3: ; preds = %cond_1402_case_0.i.3, %cond_1402_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1402_case_1.i.3 ], [ undef, %cond_1402_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1402_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1402_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1399_case_1.i.3, label %panic.i.i213 + +cond_1399_case_1.i.3: ; preds = %cond_exit_1402.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3": ; preds = %cond_1399_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1024, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1024.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_984_case_1, label %cond_exit_1024 + +cond_exit_1024: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_984_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1024.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1024 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_984_case_1.1, label %cond_exit_1024.1 + +cond_984_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1024.1 + +cond_exit_1024.1: ; preds = %cond_984_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1024 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1024.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1024.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_984_case_1.2, label %cond_exit_1024.2 + +cond_984_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1024.2 + +cond_exit_1024.2: ; preds = %cond_984_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1024.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1024.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1024.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_984_case_1.3, label %cond_exit_1024.3 + +cond_984_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1024.3 + +cond_exit_1024.3: ; preds = %cond_984_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1024.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1024.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_984_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1024 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1439_case_1, label %cond_1439_case_0 + +cond_1439_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1439 + +cond_1439_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1439 + +cond_exit_1439: ; preds = %cond_1439_case_1, %cond_1439_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1439_case_1 ], [ %.fca.2.extract, %cond_1439_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1362_case_1, label %cond_1362_case_0 + +cond_1362_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1362_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1060 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1060, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1060 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1060.1, label %cond_2283_case_0.i + +cond_exit_1060.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1060.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rxy(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1060.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1060.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1060.2, label %cond_2283_case_0.i + +cond_exit_1060.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1060.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rxy(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1060.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1060.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1060.3, label %cond_2283_case_0.i + +cond_exit_1060.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1060.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rxy(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1060.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1060: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1060 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rxy(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_helios new file mode 100644 index 000000000..87a59b320 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_helios @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_helios new file mode 100644 index 000000000..692aab40e --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_helios @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rxy(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rxy(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_helios new file mode 100644 index 000000000..e17eddfda --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_helios @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rxy(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rxy(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rxy(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rxy(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_helios new file mode 100644 index 000000000..ee3bf9879 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_helios @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_helios new file mode 100644 index 000000000..dc9f382c5 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_helios new file mode 100644 index 000000000..dd808af13 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_helios new file mode 100644 index 000000000..2f2765e7d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_helios @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_helios new file mode 100644 index 000000000..68fa66a2f --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_helios @@ -0,0 +1,579 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_393_case_0.i, label %__barray_check_bounds.exit + +cond_393_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rxy(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_307_case_1.i, label %cond_307_case_0.i + +cond_307_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_307.i + +cond_307_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_307.i + +cond_exit_307.i: ; preds = %cond_307_case_0.i, %cond_307_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_307_case_1.i ], [ undef, %cond_307_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_307_case_1.i ], [ %.fca.2.extract120.i, %cond_307_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_304_case_1.i + +panic.i.i: ; preds = %cond_exit_307.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_304_case_1.i: ; preds = %cond_exit_307.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_303_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + +cond_303_case_1.i: ; preds = %cond_304_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit": ; preds = %cond_304_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_650_case_0: ; preds = %cond_exit_650 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_650_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_650 + %"647_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_650 ] + %49 = add nuw nsw i64 %"647_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"647_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_650, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"647_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"647_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_673_case_1, label %cond_exit_650 + +cond_exit_650: ; preds = %cond_673_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"647_0.0998", 30 + br i1 %57, label %cond_650_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_650_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_673_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_650 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rzz(i64 %132, i64 %140, double %143) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_385_case_1, label %cond_385_case_0 + +cond_385_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_385 + +cond_385_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_385 + +cond_exit_385: ; preds = %cond_385_case_1, %cond_385_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_385_case_1 ], [ %.fca.2.extract, %cond_385_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_571_case_1, label %cond_571_case_0 + +cond_571_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_571_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_helios new file mode 100644 index 000000000..015a87c68 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_helios @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_helios new file mode 100644 index 000000000..77f401c44 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_helios @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_242_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_242_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_242_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_256_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_242_case_1.backedge.i.i + +cond_242_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_256_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_256_case_1.i.i + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_242_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_256_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..f92345f32 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.i + +cond_1487_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1491.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1491.exit.2.i, %__hugr__.__tk2_qalloc.1491.exit.1.i, %__hugr__.__tk2_qalloc.1491.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.1.i + +__hugr__.__tk2_qalloc.1491.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.2.i + +__hugr__.__tk2_qalloc.1491.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1487_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.i + +cond_1474_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1478.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1478.exit.2.i, %__hugr__.__tk2_qalloc.1478.exit.1.i, %__hugr__.__tk2_qalloc.1478.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.1.i + +__hugr__.__tk2_qalloc.1478.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.2.i + +__hugr__.__tk2_qalloc.1478.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1474_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1980_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1980_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1948_case_0.i.i, label %__hugr__.__tk2_qalloc.1962.exit.i + +cond_1948_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1962.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1962.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1962.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rxy(i64 %47, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %58, i64 %47, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %47, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %47, double 0xBFF921FB54442D18) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i208, double 0xBFF921FB54442D18) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %106, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %117, i64 %106, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %106, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %106, double 0xBFF921FB54442D18) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %158, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %169, i64 %158, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %158, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %158, double 0xBFF921FB54442D18) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i290.i, double 0xBFF921FB54442D18) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rxy(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = add i64 %.fca.2.extract308.i.i, 3 + %255 = lshr i64 %254, 6 + %256 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %255 + %257 = load i64, ptr %256, align 4 + %258 = and i64 %254, 63 + %259 = lshr i64 %257, %258 + %260 = trunc i64 %259 to i1 + br i1 %260, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %261 = shl nuw i64 1, %258 + %262 = xor i64 %257, %261 + store i64 %262, ptr %256, align 4 + %263 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %254 + %264 = load i64, ptr %109, align 4 + %265 = lshr i64 %264, %111 + %266 = trunc i64 %265 to i1 + br i1 %266, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %267 = load i64, ptr %263, align 4 + %268 = xor i64 %264, %114 + store i64 %268, ptr %109, align 4 + %269 = load i64, ptr %116, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %269, i64 %267, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 0 + %272 = load i64, ptr %256, align 4 + %273 = lshr i64 %272, %258 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 1 + %276 = xor i64 %272, %261 + store i64 %276, ptr %256, align 4 + store i64 %275, ptr %263, align 4 + %277 = load i64, ptr %140, align 4 + %278 = lshr i64 %277, %142 + %279 = trunc i64 %278 to i1 + br i1 %279, label %panic.i806.i, label %__barray_mask_borrow.exit807.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %145 + store i64 %280, ptr %140, align 4 + %281 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %281, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %234, i64 %281, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %281, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %281, double 0xBFF921FB54442D18) + %282 = load i64, ptr %140, align 4 + %283 = lshr i64 %282, %142 + %284 = trunc i64 %283 to i1 + br i1 %284, label %__barray_mask_return.exit811.i, label %panic.i810.i + +panic.i810.i: ; preds = %__barray_mask_borrow.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit811.i: ; preds = %__barray_mask_borrow.exit807.i + %285 = xor i64 %282, %145 + store i64 %285, ptr %140, align 4 + store i64 %281, ptr %147, align 4 + %286 = load i64, ptr %109, align 4 + %287 = lshr i64 %286, %111 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_return.exit811.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_return.exit811.i + %289 = xor i64 %286, %114 + store i64 %289, ptr %109, align 4 + store i64 %271, ptr %116, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %294, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %299, i64 %294, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %294, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %294, double 0xBFF921FB54442D18) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %256, align 4 + %309 = lshr i64 %308, %258 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %261 + store i64 %311, ptr %256, align 4 + %312 = load i64, ptr %263, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %312, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %317, i64 %312, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %312, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %312, double 0xBFF921FB54442D18) + %318 = load i64, ptr %256, align 4 + %319 = lshr i64 %318, %258 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %261 + store i64 %321, ptr %256, align 4 + store i64 %312, ptr %263, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 0 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %196, align 4 + %345 = lshr i64 %344, %198 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 1 + %348 = xor i64 %344, %201 + store i64 %348, ptr %196, align 4 + store i64 %347, ptr %203, align 4 + %349 = load i64, ptr %69, align 4 + %350 = lshr i64 %349, %71 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %74 + store i64 %352, ptr %69, align 4 + store i64 %342, ptr %76, align 4 + %353 = load i64, ptr %109, align 4 + %354 = lshr i64 %353, %111 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %114 + store i64 %356, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %376, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %381, i64 %376, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %376, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %376, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 2 + %385 = load i64, ptr %140, align 4 + %386 = lshr i64 %385, %142 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 1 + %389 = xor i64 %385, %145 + store i64 %389, ptr %140, align 4 + store i64 %388, ptr %147, align 4 + %390 = load i64, ptr %69, align 4 + %391 = lshr i64 %390, %71 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %74 + store i64 %393, ptr %69, align 4 + store i64 %384, ptr %76, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %425, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %430, i64 %425, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %425, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %425, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %453, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %459, i64 %453, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %453, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %453, double 0xBFF921FB54442D18) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rxy(i64 %477, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %488, i64 %477, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %477, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %477, double 0xBFF921FB54442D18) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1402_case_1.i, label %cond_1402_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1402_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1402.i + +cond_1402_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1402.i + +cond_exit_1402.i: ; preds = %cond_1402_case_1.i, %cond_1402_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1402_case_1.i ], [ undef, %cond_1402_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1402_case_1.i ], [ %.fca.2.extract120.i, %cond_1402_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1399_case_1.i + +panic.i.i213: ; preds = %cond_exit_1402.i.3, %cond_exit_1402.i.2, %cond_exit_1402.i.1, %cond_exit_1402.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1399_case_1.i: ; preds = %cond_exit_1402.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + +cond_2053_case_1.i: ; preds = %cond_1399_case_1.i.3, %cond_1399_case_1.i.2, %cond_1399_case_1.i.1, %cond_1399_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit": ; preds = %cond_1399_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1402_case_1.i.1, label %cond_1402_case_0.i.1 + +cond_1402_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1402.i.1 + +cond_1402_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1402.i.1 + +cond_exit_1402.i.1: ; preds = %cond_1402_case_1.i.1, %cond_1402_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1402_case_1.i.1 ], [ undef, %cond_1402_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1402_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1402_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1399_case_1.i.1, label %panic.i.i213 + +cond_1399_case_1.i.1: ; preds = %cond_exit_1402.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1": ; preds = %cond_1399_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1402_case_1.i.2, label %cond_1402_case_0.i.2 + +cond_1402_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1402.i.2 + +cond_1402_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1402.i.2 + +cond_exit_1402.i.2: ; preds = %cond_1402_case_1.i.2, %cond_1402_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1402_case_1.i.2 ], [ undef, %cond_1402_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1402_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1402_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1399_case_1.i.2, label %panic.i.i213 + +cond_1399_case_1.i.2: ; preds = %cond_exit_1402.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2": ; preds = %cond_1399_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1402_case_1.i.3, label %cond_1402_case_0.i.3 + +cond_1402_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1402.i.3 + +cond_1402_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1402.i.3 + +cond_exit_1402.i.3: ; preds = %cond_1402_case_0.i.3, %cond_1402_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1402_case_1.i.3 ], [ undef, %cond_1402_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1402_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1402_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1399_case_1.i.3, label %panic.i.i213 + +cond_1399_case_1.i.3: ; preds = %cond_exit_1402.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3": ; preds = %cond_1399_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1024, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1024.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_984_case_1, label %cond_exit_1024 + +cond_exit_1024: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_984_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1024.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1024 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_984_case_1.1, label %cond_exit_1024.1 + +cond_984_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1024.1 + +cond_exit_1024.1: ; preds = %cond_984_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1024 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1024.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1024.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_984_case_1.2, label %cond_exit_1024.2 + +cond_984_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1024.2 + +cond_exit_1024.2: ; preds = %cond_984_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1024.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1024.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1024.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_984_case_1.3, label %cond_exit_1024.3 + +cond_984_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1024.3 + +cond_exit_1024.3: ; preds = %cond_984_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1024.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1024.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_984_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1024 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1439_case_1, label %cond_1439_case_0 + +cond_1439_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1439 + +cond_1439_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1439 + +cond_exit_1439: ; preds = %cond_1439_case_1, %cond_1439_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1439_case_1 ], [ %.fca.2.extract, %cond_1439_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1362_case_1, label %cond_1362_case_0 + +cond_1362_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1362_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1060 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1060, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1060 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1060.1, label %cond_2283_case_0.i + +cond_exit_1060.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1060.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rxy(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1060.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1060.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1060.2, label %cond_2283_case_0.i + +cond_exit_1060.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1060.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rxy(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1060.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1060.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1060.3, label %cond_2283_case_0.i + +cond_exit_1060.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1060.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rxy(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1060.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1060: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1060 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rxy(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..9d0d0dbab --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..9dced28f8 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rxy(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rxy(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..a61cea991 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rxy(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rxy(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rxy(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rxy(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..970d19465 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..bb4c313a8 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..fa8c093df --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..eac1eb476 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..efe9d98a1 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,579 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_393_case_0.i, label %__barray_check_bounds.exit + +cond_393_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rxy(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_307_case_1.i, label %cond_307_case_0.i + +cond_307_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_307.i + +cond_307_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_307.i + +cond_exit_307.i: ; preds = %cond_307_case_0.i, %cond_307_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_307_case_1.i ], [ undef, %cond_307_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_307_case_1.i ], [ %.fca.2.extract120.i, %cond_307_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_304_case_1.i + +panic.i.i: ; preds = %cond_exit_307.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_304_case_1.i: ; preds = %cond_exit_307.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_303_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + +cond_303_case_1.i: ; preds = %cond_304_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit": ; preds = %cond_304_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_650_case_0: ; preds = %cond_exit_650 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_650_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_650 + %"647_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_650 ] + %49 = add nuw nsw i64 %"647_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"647_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_650, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"647_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"647_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_673_case_1, label %cond_exit_650 + +cond_exit_650: ; preds = %cond_673_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"647_0.0998", 30 + br i1 %57, label %cond_650_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_650_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_673_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_650 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rzz(i64 %132, i64 %140, double %143) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_385_case_1, label %cond_385_case_0 + +cond_385_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_385 + +cond_385_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_385 + +cond_exit_385: ; preds = %cond_385_case_1, %cond_385_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_385_case_1 ], [ %.fca.2.extract, %cond_385_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_571_case_1, label %cond_571_case_0 + +cond_571_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_571_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..2d92b14ca --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_helios new file mode 100644 index 000000000..ed9940c71 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_helios @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_242_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_242_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_242_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_256_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_242_case_1.backedge.i.i + +cond_242_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_256_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_256_case_1.i.i + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_242_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_256_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_helios new file mode 100644 index 000000000..45b61fdbf --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_helios @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.i + +cond_1487_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1491.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1491.exit.2.i, %__hugr__.__tk2_qalloc.1491.exit.1.i, %__hugr__.__tk2_qalloc.1491.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.1.i + +__hugr__.__tk2_qalloc.1491.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1487_case_0.i.i, label %__hugr__.__tk2_qalloc.1491.exit.2.i + +__hugr__.__tk2_qalloc.1491.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1491.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1487_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.i + +cond_1474_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1478.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1478.exit.2.i, %__hugr__.__tk2_qalloc.1478.exit.1.i, %__hugr__.__tk2_qalloc.1478.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.1.i + +__hugr__.__tk2_qalloc.1478.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1474_case_0.i.i, label %__hugr__.__tk2_qalloc.1478.exit.2.i + +__hugr__.__tk2_qalloc.1478.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1478.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1474_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1980_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1980_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1948_case_0.i.i, label %__hugr__.__tk2_qalloc.1962.exit.i + +cond_1948_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1962.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1962.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1962.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rxy(i64 %47, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %58, i64 %47, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %47, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %47, double 0xBFF921FB54442D18) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i208, double 0xBFF921FB54442D18) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %106, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %117, i64 %106, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %106, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %106, double 0xBFF921FB54442D18) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %158, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %169, i64 %158, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %158, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %158, double 0xBFF921FB54442D18) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i290.i, double 0xBFF921FB54442D18) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rxy(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = add i64 %.fca.2.extract308.i.i, 3 + %255 = lshr i64 %254, 6 + %256 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %255 + %257 = load i64, ptr %256, align 4 + %258 = and i64 %254, 63 + %259 = lshr i64 %257, %258 + %260 = trunc i64 %259 to i1 + br i1 %260, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %261 = shl nuw i64 1, %258 + %262 = xor i64 %257, %261 + store i64 %262, ptr %256, align 4 + %263 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %254 + %264 = load i64, ptr %109, align 4 + %265 = lshr i64 %264, %111 + %266 = trunc i64 %265 to i1 + br i1 %266, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %267 = load i64, ptr %263, align 4 + %268 = xor i64 %264, %114 + store i64 %268, ptr %109, align 4 + %269 = load i64, ptr %116, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %269, i64 %267, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 0 + %272 = load i64, ptr %256, align 4 + %273 = lshr i64 %272, %258 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 1 + %276 = xor i64 %272, %261 + store i64 %276, ptr %256, align 4 + store i64 %275, ptr %263, align 4 + %277 = load i64, ptr %140, align 4 + %278 = lshr i64 %277, %142 + %279 = trunc i64 %278 to i1 + br i1 %279, label %panic.i806.i, label %__barray_mask_borrow.exit807.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %145 + store i64 %280, ptr %140, align 4 + %281 = load i64, ptr %147, align 4 + tail call void @___rxy(i64 %281, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %234, i64 %281, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %281, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %281, double 0xBFF921FB54442D18) + %282 = load i64, ptr %140, align 4 + %283 = lshr i64 %282, %142 + %284 = trunc i64 %283 to i1 + br i1 %284, label %__barray_mask_return.exit811.i, label %panic.i810.i + +panic.i810.i: ; preds = %__barray_mask_borrow.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit811.i: ; preds = %__barray_mask_borrow.exit807.i + %285 = xor i64 %282, %145 + store i64 %285, ptr %140, align 4 + store i64 %281, ptr %147, align 4 + %286 = load i64, ptr %109, align 4 + %287 = lshr i64 %286, %111 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_return.exit811.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_return.exit811.i + %289 = xor i64 %286, %114 + store i64 %289, ptr %109, align 4 + store i64 %271, ptr %116, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %294, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %299, i64 %294, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %294, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %294, double 0xBFF921FB54442D18) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %256, align 4 + %309 = lshr i64 %308, %258 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %261 + store i64 %311, ptr %256, align 4 + %312 = load i64, ptr %263, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %312, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %317, i64 %312, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %312, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %312, double 0xBFF921FB54442D18) + %318 = load i64, ptr %256, align 4 + %319 = lshr i64 %318, %258 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %261 + store i64 %321, ptr %256, align 4 + store i64 %312, ptr %263, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 0 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %196, align 4 + %345 = lshr i64 %344, %198 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 1 + %348 = xor i64 %344, %201 + store i64 %348, ptr %196, align 4 + store i64 %347, ptr %203, align 4 + %349 = load i64, ptr %69, align 4 + %350 = lshr i64 %349, %71 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %74 + store i64 %352, ptr %69, align 4 + store i64 %342, ptr %76, align 4 + %353 = load i64, ptr %109, align 4 + %354 = lshr i64 %353, %111 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %114 + store i64 %356, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rxy(i64 %376, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %381, i64 %376, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %376, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %376, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 2 + %385 = load i64, ptr %140, align 4 + %386 = lshr i64 %385, %142 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 1 + %389 = xor i64 %385, %145 + store i64 %389, ptr %140, align 4 + store i64 %388, ptr %147, align 4 + %390 = load i64, ptr %69, align 4 + %391 = lshr i64 %390, %71 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %74 + store i64 %393, ptr %69, align 4 + store i64 %384, ptr %76, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rxy(i64 %425, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %430, i64 %425, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %425, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %425, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rxy(i64 %453, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %459, i64 %453, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %453, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %453, double 0xBFF921FB54442D18) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rxy(i64 %477, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %488, i64 %477, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %477, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %477, double 0xBFF921FB54442D18) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1402_case_1.i, label %cond_1402_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1402_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1402.i + +cond_1402_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1402.i + +cond_exit_1402.i: ; preds = %cond_1402_case_1.i, %cond_1402_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1402_case_1.i ], [ undef, %cond_1402_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1402_case_1.i ], [ %.fca.2.extract120.i, %cond_1402_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1399_case_1.i + +panic.i.i213: ; preds = %cond_exit_1402.i.3, %cond_exit_1402.i.2, %cond_exit_1402.i.1, %cond_exit_1402.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1399_case_1.i: ; preds = %cond_exit_1402.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + +cond_2053_case_1.i: ; preds = %cond_1399_case_1.i.3, %cond_1399_case_1.i.2, %cond_1399_case_1.i.1, %cond_1399_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit": ; preds = %cond_1399_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1402_case_1.i.1, label %cond_1402_case_0.i.1 + +cond_1402_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1402.i.1 + +cond_1402_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1402.i.1 + +cond_exit_1402.i.1: ; preds = %cond_1402_case_1.i.1, %cond_1402_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1402_case_1.i.1 ], [ undef, %cond_1402_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1402_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1402_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1399_case_1.i.1, label %panic.i.i213 + +cond_1399_case_1.i.1: ; preds = %cond_exit_1402.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1": ; preds = %cond_1399_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1402_case_1.i.2, label %cond_1402_case_0.i.2 + +cond_1402_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1402.i.2 + +cond_1402_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1402.i.2 + +cond_exit_1402.i.2: ; preds = %cond_1402_case_1.i.2, %cond_1402_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1402_case_1.i.2 ], [ undef, %cond_1402_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1402_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1402_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1399_case_1.i.2, label %panic.i.i213 + +cond_1399_case_1.i.2: ; preds = %cond_exit_1402.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2": ; preds = %cond_1399_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1402_case_1.i.3, label %cond_1402_case_0.i.3 + +cond_1402_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1402.i.3 + +cond_1402_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1402.i.3 + +cond_exit_1402.i.3: ; preds = %cond_1402_case_0.i.3, %cond_1402_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1402_case_1.i.3 ], [ undef, %cond_1402_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1402_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1402_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1399_case_1.i.3, label %panic.i.i213 + +cond_1399_case_1.i.3: ; preds = %cond_exit_1402.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_2053_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3": ; preds = %cond_1399_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1024, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1406.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1024.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_984_case_1, label %cond_exit_1024 + +cond_exit_1024: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_984_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1024.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1024 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_984_case_1.1, label %cond_exit_1024.1 + +cond_984_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1024.1 + +cond_exit_1024.1: ; preds = %cond_984_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1024 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1024.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1024.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_984_case_1.2, label %cond_exit_1024.2 + +cond_984_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1024.2 + +cond_exit_1024.2: ; preds = %cond_984_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1024.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1024.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1024.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_984_case_1.3, label %cond_exit_1024.3 + +cond_984_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1024.3 + +cond_exit_1024.3: ; preds = %cond_984_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1024.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1024.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_984_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1024 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1439_case_1, label %cond_1439_case_0 + +cond_1439_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1439 + +cond_1439_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1439 + +cond_exit_1439: ; preds = %cond_1439_case_1, %cond_1439_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1439_case_1 ], [ %.fca.2.extract, %cond_1439_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).1365"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1362_case_1, label %cond_1362_case_0 + +cond_1362_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1362_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1060 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1060, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1060 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1060.1, label %cond_2283_case_0.i + +cond_exit_1060.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1060.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rxy(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1060.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1060.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1060.2, label %cond_2283_case_0.i + +cond_exit_1060.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1060.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rxy(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1060.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1060.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1060.3, label %cond_2283_case_0.i + +cond_exit_1060.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1060.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rxy(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1060.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1060: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1060 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rxy(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %1, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %2, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %2, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %2, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rxy(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rxy(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %0, i64 %1, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %1, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_helios new file mode 100644 index 000000000..12ac202e7 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_helios @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_helios new file mode 100644 index 000000000..9806d626b --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_helios @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rxy(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rxy(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_helios new file mode 100644 index 000000000..3e3e75456 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_helios @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rxy(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rxy(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rxy(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rxy(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_helios new file mode 100644 index 000000000..a85084143 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_helios @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_helios new file mode 100644 index 000000000..e2509c87a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_helios new file mode 100644 index 000000000..203df071d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_helios @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rxy(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_helios new file mode 100644 index 000000000..8b23d24de --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_helios @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_helios new file mode 100644 index 000000000..e1b977662 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_helios @@ -0,0 +1,579 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_393_case_0.i, label %__barray_check_bounds.exit + +cond_393_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rxy(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_307_case_1.i, label %cond_307_case_0.i + +cond_307_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_307.i + +cond_307_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_307.i + +cond_exit_307.i: ; preds = %cond_307_case_0.i, %cond_307_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_307_case_1.i ], [ undef, %cond_307_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_307_case_1.i ], [ %.fca.2.extract120.i, %cond_307_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_304_case_1.i + +panic.i.i: ; preds = %cond_exit_307.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_304_case_1.i: ; preds = %cond_exit_307.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_303_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + +cond_303_case_1.i: ; preds = %cond_304_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit": ; preds = %cond_304_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).310.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_650_case_0: ; preds = %cond_exit_650 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_650_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_650 + %"647_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_650 ] + %49 = add nuw nsw i64 %"647_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"647_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_650, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"647_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"647_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_673_case_1, label %cond_exit_650 + +cond_exit_650: ; preds = %cond_673_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"647_0.0998", 30 + br i1 %57, label %cond_650_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_650_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_673_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_650 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rzz(i64 %132, i64 %140, double %143) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_385_case_1, label %cond_385_case_0 + +cond_385_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_385 + +cond_385_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_385 + +cond_exit_385: ; preds = %cond_385_case_1, %cond_385_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_385_case_1 ], [ %.fca.2.extract, %cond_385_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).568"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_571_case_1, label %cond_571_case_0 + +cond_571_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_571_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_helios new file mode 100644 index 000000000..ecfd7366c --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_helios @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_helios b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_helios new file mode 100644 index 000000000..d9e8e4d01 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/helios-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_helios @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rxy(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rzz(i64, i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_242_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_242_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_242_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_256_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_242_case_1.backedge.i.i + +cond_242_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_256_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rzz(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rxy(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_256_case_1.i.i + tail call void @___rxy(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_242_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_256_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_sol new file mode 100644 index 000000000..e12f74cd9 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-addition_3_11/addition_3_11_aarch64-apple-darwin_sol @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.i + +cond_1503_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1507.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1507.exit.2.i, %__hugr__.__tk2_qalloc.1507.exit.1.i, %__hugr__.__tk2_qalloc.1507.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.1.i + +__hugr__.__tk2_qalloc.1507.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.2.i + +__hugr__.__tk2_qalloc.1507.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1503_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.i + +cond_1491_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1494.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1494.exit.2.i, %__hugr__.__tk2_qalloc.1494.exit.1.i, %__hugr__.__tk2_qalloc.1494.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.1.i + +__hugr__.__tk2_qalloc.1494.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.2.i + +__hugr__.__tk2_qalloc.1494.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1491_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1981_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1981_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1949_case_0.i.i, label %__hugr__.__tk2_qalloc.1963.exit.i + +cond_1949_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1963.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1963.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1963.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rp(i64 %58, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %58, i64 %47, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %58, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %47, double 0xBFF921FB54442D18, double 0.000000e+00) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %77, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %77, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0.000000e+00) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %117, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %117, i64 %106, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %117, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %106, double 0xBFF921FB54442D18, double 0.000000e+00) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %169, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %169, i64 %158, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %169, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %158, double 0xBFF921FB54442D18, double 0.000000e+00) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %214, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %214, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0.000000e+00) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rp(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = load i64, ptr %109, align 4 + %255 = lshr i64 %254, %111 + %256 = trunc i64 %255 to i1 + br i1 %256, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %257 = xor i64 %254, %114 + store i64 %257, ptr %109, align 4 + %258 = add i64 %.fca.2.extract308.i.i, 3 + %259 = lshr i64 %258, 6 + %260 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %259 + %261 = load i64, ptr %260, align 4 + %262 = and i64 %258, 63 + %263 = lshr i64 %261, %262 + %264 = trunc i64 %263 to i1 + br i1 %264, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %265 = load i64, ptr %116, align 4 + %266 = shl nuw i64 1, %262 + %267 = xor i64 %261, %266 + store i64 %267, ptr %260, align 4 + %268 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %258 + %269 = load i64, ptr %268, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %265, i64 %269, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 1 + %272 = load i64, ptr %109, align 4 + %273 = lshr i64 %272, %111 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 0 + %276 = xor i64 %272, %114 + store i64 %276, ptr %109, align 4 + store i64 %275, ptr %116, align 4 + %277 = load i64, ptr %260, align 4 + %278 = lshr i64 %277, %262 + %279 = trunc i64 %278 to i1 + br i1 %279, label %__barray_mask_return.exit807.i, label %panic.i806.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %266 + store i64 %280, ptr %260, align 4 + store i64 %271, ptr %268, align 4 + %281 = load i64, ptr %140, align 4 + %282 = lshr i64 %281, %142 + %283 = trunc i64 %282 to i1 + br i1 %283, label %panic.i808.i, label %__barray_mask_borrow.exit809.i + +panic.i808.i: ; preds = %__barray_mask_return.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit809.i: ; preds = %__barray_mask_return.exit807.i + %284 = xor i64 %281, %145 + store i64 %284, ptr %140, align 4 + %285 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %234, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %234, i64 %285, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %285, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %234, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + %286 = load i64, ptr %140, align 4 + %287 = lshr i64 %286, %142 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_borrow.exit809.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_borrow.exit809.i + %289 = xor i64 %286, %145 + store i64 %289, ptr %140, align 4 + store i64 %285, ptr %147, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %299, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %299, i64 %294, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %299, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %294, double 0xBFF921FB54442D18, double 0.000000e+00) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %260, align 4 + %309 = lshr i64 %308, %262 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %266 + store i64 %311, ptr %260, align 4 + %312 = load i64, ptr %268, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %317, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %317, i64 %312, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %317, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %312, double 0xBFF921FB54442D18, double 0.000000e+00) + %318 = load i64, ptr %260, align 4 + %319 = lshr i64 %318, %262 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %266 + store i64 %321, ptr %260, align 4 + store i64 %312, ptr %268, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 1 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %69, align 4 + %345 = lshr i64 %344, %71 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 0 + %348 = xor i64 %344, %74 + store i64 %348, ptr %69, align 4 + store i64 %347, ptr %76, align 4 + %349 = load i64, ptr %109, align 4 + %350 = lshr i64 %349, %111 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %114 + store i64 %352, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %353 = load i64, ptr %196, align 4 + %354 = lshr i64 %353, %198 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %201 + store i64 %356, ptr %196, align 4 + store i64 %342, ptr %203, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %381, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %381, i64 %376, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %381, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %376, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 1 + %385 = load i64, ptr %69, align 4 + %386 = lshr i64 %385, %71 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 2 + %389 = xor i64 %385, %74 + store i64 %389, ptr %69, align 4 + store i64 %388, ptr %76, align 4 + %390 = load i64, ptr %140, align 4 + %391 = lshr i64 %390, %142 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %145 + store i64 %393, ptr %140, align 4 + store i64 %384, ptr %147, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %430, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %430, i64 %425, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %430, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %425, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %459, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %459, i64 %453, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %459, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %453, double 0xBFF921FB54442D18, double 0.000000e+00) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rp(i64 %488, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %488, i64 %477, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %488, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %477, double 0xBFF921FB54442D18, double 0.000000e+00) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1420_case_1.i, label %cond_1420_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1420_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1420.i + +cond_1420_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1420.i + +cond_exit_1420.i: ; preds = %cond_1420_case_1.i, %cond_1420_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1420_case_1.i ], [ undef, %cond_1420_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1420_case_1.i ], [ %.fca.2.extract120.i, %cond_1420_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1417_case_1.i + +panic.i.i213: ; preds = %cond_exit_1420.i.3, %cond_exit_1420.i.2, %cond_exit_1420.i.1, %cond_exit_1420.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1417_case_1.i: ; preds = %cond_exit_1420.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + +cond_1416_case_1.i: ; preds = %cond_1417_case_1.i.3, %cond_1417_case_1.i.2, %cond_1417_case_1.i.1, %cond_1417_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit": ; preds = %cond_1417_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1420_case_1.i.1, label %cond_1420_case_0.i.1 + +cond_1420_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1420.i.1 + +cond_1420_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1420.i.1 + +cond_exit_1420.i.1: ; preds = %cond_1420_case_1.i.1, %cond_1420_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1420_case_1.i.1 ], [ undef, %cond_1420_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1420_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1420_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1417_case_1.i.1, label %panic.i.i213 + +cond_1417_case_1.i.1: ; preds = %cond_exit_1420.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1": ; preds = %cond_1417_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1420_case_1.i.2, label %cond_1420_case_0.i.2 + +cond_1420_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1420.i.2 + +cond_1420_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1420.i.2 + +cond_exit_1420.i.2: ; preds = %cond_1420_case_1.i.2, %cond_1420_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1420_case_1.i.2 ], [ undef, %cond_1420_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1420_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1420_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1417_case_1.i.2, label %panic.i.i213 + +cond_1417_case_1.i.2: ; preds = %cond_exit_1420.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2": ; preds = %cond_1417_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1420_case_1.i.3, label %cond_1420_case_0.i.3 + +cond_1420_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1420.i.3 + +cond_1420_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1420.i.3 + +cond_exit_1420.i.3: ; preds = %cond_1420_case_0.i.3, %cond_1420_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1420_case_1.i.3 ], [ undef, %cond_1420_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1420_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1420_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1417_case_1.i.3, label %panic.i.i213 + +cond_1417_case_1.i.3: ; preds = %cond_exit_1420.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3": ; preds = %cond_1417_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1043, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1043.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_1020_case_1, label %cond_exit_1043 + +cond_exit_1043: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_1020_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1043.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1043 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_1020_case_1.1, label %cond_exit_1043.1 + +cond_1020_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1043.1 + +cond_exit_1043.1: ; preds = %cond_1020_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1043 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1043.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1043.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_1020_case_1.2, label %cond_exit_1043.2 + +cond_1020_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1043.2 + +cond_exit_1043.2: ; preds = %cond_1020_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1043.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1043.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1043.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_1020_case_1.3, label %cond_exit_1043.3 + +cond_1020_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1043.3 + +cond_exit_1043.3: ; preds = %cond_1020_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1043.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1043.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1020_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1043 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1464_case_1, label %cond_1464_case_0 + +cond_1464_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1464 + +cond_1464_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1464 + +cond_exit_1464: ; preds = %cond_1464_case_1, %cond_1464_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1464_case_1 ], [ %.fca.2.extract, %cond_1464_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1380_case_1, label %cond_1380_case_0 + +cond_1380_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1380_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1082 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1082, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1082 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1082.1, label %cond_2283_case_0.i + +cond_exit_1082.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1082.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rp(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1082.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1082.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1082.2, label %cond_2283_case_0.i + +cond_exit_1082.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1082.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rp(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1082.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1082.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1082.3, label %cond_2283_case_0.i + +cond_exit_1082.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1082.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rp(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1082.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1082: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1082 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rp(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_sol new file mode 100644 index 000000000..ee1bcede5 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-discard_qb_array/discard_qb_array_aarch64-apple-darwin_sol @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.218.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.218.exit.8.i, %__hugr__.__tk2_qalloc.218.exit.7.i, %__hugr__.__tk2_qalloc.218.exit.6.i, %__hugr__.__tk2_qalloc.218.exit.5.i, %__hugr__.__tk2_qalloc.218.exit.4.i, %__hugr__.__tk2_qalloc.218.exit.3.i, %__hugr__.__tk2_qalloc.218.exit.2.i, %__hugr__.__tk2_qalloc.218.exit.1.i, %__hugr__.__tk2_qalloc.218.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.1.i + +__hugr__.__tk2_qalloc.218.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not.i = icmp eq i64 %7, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.2.i + +__hugr__.__tk2_qalloc.218.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not106.i = icmp eq i64 %11, 0 + br i1 %.not106.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.3.i + +__hugr__.__tk2_qalloc.218.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not107.i = icmp eq i64 %15, 0 + br i1 %.not107.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.4.i + +__hugr__.__tk2_qalloc.218.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not108.i = icmp eq i64 %19, 0 + br i1 %.not108.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.5.i + +__hugr__.__tk2_qalloc.218.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not109.i = icmp eq i64 %23, 0 + br i1 %.not109.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.6.i + +__hugr__.__tk2_qalloc.218.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not110.i = icmp eq i64 %27, 0 + br i1 %.not110.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.7.i + +__hugr__.__tk2_qalloc.218.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not111.i = icmp eq i64 %31, 0 + br i1 %.not111.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.8.i + +__hugr__.__tk2_qalloc.218.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not112.i = icmp eq i64 %35, 0 + br i1 %.not112.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not113.i = icmp eq i64 %39, 0 + br i1 %.not113.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.9.i + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.9.i ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.9.i ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.9.i ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.9.i ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.9.i ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_sol new file mode 100644 index 000000000..8acd30184 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-flip_some/flip_some_aarch64-apple-darwin_sol @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rp(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rp(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_sol new file mode 100644 index 000000000..998c22a5e --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-measure_qb_array/measure_qb_array_aarch64-apple-darwin_sol @@ -0,0 +1,468 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.210.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.210.exit.8.i, %__hugr__.__tk2_qalloc.210.exit.7.i, %__hugr__.__tk2_qalloc.210.exit.6.i, %__hugr__.__tk2_qalloc.210.exit.5.i, %__hugr__.__tk2_qalloc.210.exit.4.i, %__hugr__.__tk2_qalloc.210.exit.3.i, %__hugr__.__tk2_qalloc.210.exit.2.i, %__hugr__.__tk2_qalloc.210.exit.1.i, %__hugr__.__tk2_qalloc.210.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.1.i + +__hugr__.__tk2_qalloc.210.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not280.i = icmp eq i64 %7, 0 + br i1 %.not280.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.2.i + +__hugr__.__tk2_qalloc.210.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not281.i = icmp eq i64 %11, 0 + br i1 %.not281.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.3.i + +__hugr__.__tk2_qalloc.210.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not282.i = icmp eq i64 %15, 0 + br i1 %.not282.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.4.i + +__hugr__.__tk2_qalloc.210.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not283.i = icmp eq i64 %19, 0 + br i1 %.not283.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.5.i + +__hugr__.__tk2_qalloc.210.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not284.i = icmp eq i64 %23, 0 + br i1 %.not284.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.6.i + +__hugr__.__tk2_qalloc.210.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not285.i = icmp eq i64 %27, 0 + br i1 %.not285.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.7.i + +__hugr__.__tk2_qalloc.210.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not286.i = icmp eq i64 %31, 0 + br i1 %.not286.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.8.i + +__hugr__.__tk2_qalloc.210.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not287.i = icmp eq i64 %35, 0 + br i1 %.not287.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not288.i = icmp eq i64 %39, 0 + br i1 %.not288.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.9.i + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rp(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rp(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rp(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rp(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + br label %__barray_check_bounds.exit255.i + +cond_89_case_0.i: ; preds = %cond_exit_89.thread.i + %115 = load i64, ptr %72, align 4 + %116 = or i64 %115, -1024 + store i64 %116, ptr %72, align 4 + %117 = icmp eq i64 %116, -1 + br i1 %117, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +mask_block_err.i.i: ; preds = %cond_89_case_0.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit255.i: ; preds = %cond_exit_89.thread.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %"92_0.0279.i" = phi i64 [ 0, %"__hugr__.$measure_array$$n(10).280.exit.i" ], [ %118, %cond_exit_89.thread.i ] + %118 = add nuw nsw i64 %"92_0.0279.i", 1 + %119 = load i64, ptr %72, align 4 + %120 = lshr i64 %119, %"92_0.0279.i" + %121 = trunc i64 %120 to i1 + br i1 %121, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +__barray_mask_borrow.exit259.i: ; preds = %__barray_check_bounds.exit255.i + %122 = shl nuw nsw i64 1, %"92_0.0279.i" + %123 = xor i64 %119, %122 + store i64 %123, ptr %72, align 4 + %124 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"92_0.0279.i" + %125 = load { i1, i64, i1 }, ptr %124, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %125, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %__barray_check_bounds.exit255.i + %exitcond.i = icmp eq i64 %118, 10 + br i1 %exitcond.i, label %cond_89_case_0.i, label %__barray_check_bounds.exit255.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %125, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_89_case_0.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %126 = tail call i64 @teardown() + ret i64 %126 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_sol new file mode 100644 index 000000000..1e52b33fc --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-no_results/no_results_aarch64-apple-darwin_sol @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_sol new file mode 100644 index 000000000..ef6f4d0c6 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_exit/postselect_exit_aarch64-apple-darwin_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_sol new file mode 100644 index 000000000..1272ad2bd --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-postselect_panic/postselect_panic_aarch64-apple-darwin_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_sol new file mode 100644 index 000000000..47a2a4968 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-print_current_shot/print_current_shot_aarch64-apple-darwin_sol @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_sol new file mode 100644 index 000000000..d107fa19f --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-qft_32/qft_32_aarch64-apple-darwin_sol @@ -0,0 +1,583 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_386_case_0.i, label %__barray_check_bounds.exit + +cond_386_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rp(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_296_case_1.i, label %cond_296_case_0.i + +cond_296_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_296.i + +cond_296_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_296.i + +cond_exit_296.i: ; preds = %cond_296_case_0.i, %cond_296_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_296_case_1.i ], [ undef, %cond_296_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_296_case_1.i ], [ %.fca.2.extract120.i, %cond_296_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_329_case_1.i + +panic.i.i: ; preds = %cond_exit_296.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_329_case_1.i: ; preds = %cond_exit_296.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_293_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + +cond_293_case_1.i: ; preds = %cond_329_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit": ; preds = %cond_329_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_662_case_0: ; preds = %cond_exit_662 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_662_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_662 + %"659_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_662 ] + %49 = add nuw nsw i64 %"659_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"659_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_662, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"659_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"659_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_685_case_1, label %cond_exit_662 + +cond_exit_662: ; preds = %cond_685_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"659_0.0998", 30 + br i1 %57, label %cond_662_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_662_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_685_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_662 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rpp(i64 %132, i64 %140, double %143, double 0xC00921FB54442D18) + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_373_case_1, label %cond_373_case_0 + +cond_373_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_373 + +cond_373_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_373 + +cond_exit_373: ; preds = %cond_373_case_1, %cond_373_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_373_case_1 ], [ %.fca.2.extract, %cond_373_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_583_case_1, label %cond_583_case_0 + +cond_583_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_583_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_sol new file mode 100644 index 000000000..634388234 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rng/rng_aarch64-apple-darwin_sol @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_sol new file mode 100644 index 000000000..0d8199996 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-apple-darwin-rus/rus_aarch64-apple-darwin_sol @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-apple-darwin" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_240_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_240_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_240_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_254_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_240_case_1.backedge.i.i + +cond_240_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_254_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_254_case_1.i.i + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_240_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_254_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..b009a9dee --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-addition_3_11/addition_3_11_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.i + +cond_1503_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1507.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1507.exit.2.i, %__hugr__.__tk2_qalloc.1507.exit.1.i, %__hugr__.__tk2_qalloc.1507.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.1.i + +__hugr__.__tk2_qalloc.1507.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.2.i + +__hugr__.__tk2_qalloc.1507.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1503_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.i + +cond_1491_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1494.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1494.exit.2.i, %__hugr__.__tk2_qalloc.1494.exit.1.i, %__hugr__.__tk2_qalloc.1494.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.1.i + +__hugr__.__tk2_qalloc.1494.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.2.i + +__hugr__.__tk2_qalloc.1494.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1491_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1981_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1981_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1949_case_0.i.i, label %__hugr__.__tk2_qalloc.1963.exit.i + +cond_1949_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1963.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1963.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1963.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rp(i64 %58, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %58, i64 %47, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %58, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %47, double 0xBFF921FB54442D18, double 0.000000e+00) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %77, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %77, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0.000000e+00) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %117, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %117, i64 %106, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %117, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %106, double 0xBFF921FB54442D18, double 0.000000e+00) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %169, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %169, i64 %158, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %169, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %158, double 0xBFF921FB54442D18, double 0.000000e+00) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %214, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %214, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0.000000e+00) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rp(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = load i64, ptr %109, align 4 + %255 = lshr i64 %254, %111 + %256 = trunc i64 %255 to i1 + br i1 %256, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %257 = xor i64 %254, %114 + store i64 %257, ptr %109, align 4 + %258 = add i64 %.fca.2.extract308.i.i, 3 + %259 = lshr i64 %258, 6 + %260 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %259 + %261 = load i64, ptr %260, align 4 + %262 = and i64 %258, 63 + %263 = lshr i64 %261, %262 + %264 = trunc i64 %263 to i1 + br i1 %264, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %265 = load i64, ptr %116, align 4 + %266 = shl nuw i64 1, %262 + %267 = xor i64 %261, %266 + store i64 %267, ptr %260, align 4 + %268 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %258 + %269 = load i64, ptr %268, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %265, i64 %269, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 1 + %272 = load i64, ptr %109, align 4 + %273 = lshr i64 %272, %111 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 0 + %276 = xor i64 %272, %114 + store i64 %276, ptr %109, align 4 + store i64 %275, ptr %116, align 4 + %277 = load i64, ptr %260, align 4 + %278 = lshr i64 %277, %262 + %279 = trunc i64 %278 to i1 + br i1 %279, label %__barray_mask_return.exit807.i, label %panic.i806.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %266 + store i64 %280, ptr %260, align 4 + store i64 %271, ptr %268, align 4 + %281 = load i64, ptr %140, align 4 + %282 = lshr i64 %281, %142 + %283 = trunc i64 %282 to i1 + br i1 %283, label %panic.i808.i, label %__barray_mask_borrow.exit809.i + +panic.i808.i: ; preds = %__barray_mask_return.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit809.i: ; preds = %__barray_mask_return.exit807.i + %284 = xor i64 %281, %145 + store i64 %284, ptr %140, align 4 + %285 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %234, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %234, i64 %285, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %285, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %234, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + %286 = load i64, ptr %140, align 4 + %287 = lshr i64 %286, %142 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_borrow.exit809.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_borrow.exit809.i + %289 = xor i64 %286, %145 + store i64 %289, ptr %140, align 4 + store i64 %285, ptr %147, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %299, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %299, i64 %294, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %299, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %294, double 0xBFF921FB54442D18, double 0.000000e+00) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %260, align 4 + %309 = lshr i64 %308, %262 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %266 + store i64 %311, ptr %260, align 4 + %312 = load i64, ptr %268, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %317, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %317, i64 %312, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %317, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %312, double 0xBFF921FB54442D18, double 0.000000e+00) + %318 = load i64, ptr %260, align 4 + %319 = lshr i64 %318, %262 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %266 + store i64 %321, ptr %260, align 4 + store i64 %312, ptr %268, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 1 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %69, align 4 + %345 = lshr i64 %344, %71 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 0 + %348 = xor i64 %344, %74 + store i64 %348, ptr %69, align 4 + store i64 %347, ptr %76, align 4 + %349 = load i64, ptr %109, align 4 + %350 = lshr i64 %349, %111 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %114 + store i64 %352, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %353 = load i64, ptr %196, align 4 + %354 = lshr i64 %353, %198 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %201 + store i64 %356, ptr %196, align 4 + store i64 %342, ptr %203, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %381, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %381, i64 %376, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %381, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %376, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 1 + %385 = load i64, ptr %69, align 4 + %386 = lshr i64 %385, %71 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 2 + %389 = xor i64 %385, %74 + store i64 %389, ptr %69, align 4 + store i64 %388, ptr %76, align 4 + %390 = load i64, ptr %140, align 4 + %391 = lshr i64 %390, %142 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %145 + store i64 %393, ptr %140, align 4 + store i64 %384, ptr %147, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %430, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %430, i64 %425, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %430, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %425, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %459, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %459, i64 %453, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %459, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %453, double 0xBFF921FB54442D18, double 0.000000e+00) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rp(i64 %488, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %488, i64 %477, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %488, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %477, double 0xBFF921FB54442D18, double 0.000000e+00) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1420_case_1.i, label %cond_1420_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1420_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1420.i + +cond_1420_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1420.i + +cond_exit_1420.i: ; preds = %cond_1420_case_1.i, %cond_1420_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1420_case_1.i ], [ undef, %cond_1420_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1420_case_1.i ], [ %.fca.2.extract120.i, %cond_1420_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1417_case_1.i + +panic.i.i213: ; preds = %cond_exit_1420.i.3, %cond_exit_1420.i.2, %cond_exit_1420.i.1, %cond_exit_1420.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1417_case_1.i: ; preds = %cond_exit_1420.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + +cond_1416_case_1.i: ; preds = %cond_1417_case_1.i.3, %cond_1417_case_1.i.2, %cond_1417_case_1.i.1, %cond_1417_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit": ; preds = %cond_1417_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1420_case_1.i.1, label %cond_1420_case_0.i.1 + +cond_1420_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1420.i.1 + +cond_1420_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1420.i.1 + +cond_exit_1420.i.1: ; preds = %cond_1420_case_1.i.1, %cond_1420_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1420_case_1.i.1 ], [ undef, %cond_1420_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1420_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1420_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1417_case_1.i.1, label %panic.i.i213 + +cond_1417_case_1.i.1: ; preds = %cond_exit_1420.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1": ; preds = %cond_1417_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1420_case_1.i.2, label %cond_1420_case_0.i.2 + +cond_1420_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1420.i.2 + +cond_1420_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1420.i.2 + +cond_exit_1420.i.2: ; preds = %cond_1420_case_1.i.2, %cond_1420_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1420_case_1.i.2 ], [ undef, %cond_1420_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1420_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1420_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1417_case_1.i.2, label %panic.i.i213 + +cond_1417_case_1.i.2: ; preds = %cond_exit_1420.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2": ; preds = %cond_1417_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1420_case_1.i.3, label %cond_1420_case_0.i.3 + +cond_1420_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1420.i.3 + +cond_1420_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1420.i.3 + +cond_exit_1420.i.3: ; preds = %cond_1420_case_0.i.3, %cond_1420_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1420_case_1.i.3 ], [ undef, %cond_1420_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1420_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1420_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1417_case_1.i.3, label %panic.i.i213 + +cond_1417_case_1.i.3: ; preds = %cond_exit_1420.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3": ; preds = %cond_1417_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1043, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1043.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_1020_case_1, label %cond_exit_1043 + +cond_exit_1043: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_1020_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1043.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1043 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_1020_case_1.1, label %cond_exit_1043.1 + +cond_1020_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1043.1 + +cond_exit_1043.1: ; preds = %cond_1020_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1043 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1043.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1043.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_1020_case_1.2, label %cond_exit_1043.2 + +cond_1020_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1043.2 + +cond_exit_1043.2: ; preds = %cond_1020_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1043.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1043.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1043.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_1020_case_1.3, label %cond_exit_1043.3 + +cond_1020_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1043.3 + +cond_exit_1043.3: ; preds = %cond_1020_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1043.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1043.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1020_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1043 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1464_case_1, label %cond_1464_case_0 + +cond_1464_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1464 + +cond_1464_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1464 + +cond_exit_1464: ; preds = %cond_1464_case_1, %cond_1464_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1464_case_1 ], [ %.fca.2.extract, %cond_1464_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1380_case_1, label %cond_1380_case_0 + +cond_1380_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1380_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1082 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1082, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1082 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1082.1, label %cond_2283_case_0.i + +cond_exit_1082.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1082.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rp(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1082.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1082.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1082.2, label %cond_2283_case_0.i + +cond_exit_1082.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1082.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rp(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1082.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1082.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1082.3, label %cond_2283_case_0.i + +cond_exit_1082.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1082.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rp(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1082.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1082: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1082 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rp(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..12a738dcf --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-discard_qb_array/discard_qb_array_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.218.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.218.exit.8.i, %__hugr__.__tk2_qalloc.218.exit.7.i, %__hugr__.__tk2_qalloc.218.exit.6.i, %__hugr__.__tk2_qalloc.218.exit.5.i, %__hugr__.__tk2_qalloc.218.exit.4.i, %__hugr__.__tk2_qalloc.218.exit.3.i, %__hugr__.__tk2_qalloc.218.exit.2.i, %__hugr__.__tk2_qalloc.218.exit.1.i, %__hugr__.__tk2_qalloc.218.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.1.i + +__hugr__.__tk2_qalloc.218.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not.i = icmp eq i64 %7, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.2.i + +__hugr__.__tk2_qalloc.218.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not106.i = icmp eq i64 %11, 0 + br i1 %.not106.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.3.i + +__hugr__.__tk2_qalloc.218.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not107.i = icmp eq i64 %15, 0 + br i1 %.not107.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.4.i + +__hugr__.__tk2_qalloc.218.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not108.i = icmp eq i64 %19, 0 + br i1 %.not108.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.5.i + +__hugr__.__tk2_qalloc.218.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not109.i = icmp eq i64 %23, 0 + br i1 %.not109.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.6.i + +__hugr__.__tk2_qalloc.218.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not110.i = icmp eq i64 %27, 0 + br i1 %.not110.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.7.i + +__hugr__.__tk2_qalloc.218.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not111.i = icmp eq i64 %31, 0 + br i1 %.not111.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_213_case_0.i.i, label %__hugr__.__tk2_qalloc.218.exit.8.i + +__hugr__.__tk2_qalloc.218.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not112.i = icmp eq i64 %35, 0 + br i1 %.not112.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.218.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not113.i = icmp eq i64 %39, 0 + br i1 %.not113.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.9.i + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.9.i ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.9.i ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.9.i ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.9.i ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.9.i ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..92a05505c --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-flip_some/flip_some_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rp(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rp(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..a484445a0 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-measure_qb_array/measure_qb_array_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,468 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.8.i, %cond_exit_20.7.i, %cond_exit_20.6.i, %cond_exit_20.5.i, %cond_exit_20.4.i, %cond_exit_20.3.i, %cond_exit_20.2.i, %cond_exit_20.1.i, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.210.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.9.i, %__hugr__.__tk2_qalloc.210.exit.8.i, %__hugr__.__tk2_qalloc.210.exit.7.i, %__hugr__.__tk2_qalloc.210.exit.6.i, %__hugr__.__tk2_qalloc.210.exit.5.i, %__hugr__.__tk2_qalloc.210.exit.4.i, %__hugr__.__tk2_qalloc.210.exit.3.i, %__hugr__.__tk2_qalloc.210.exit.2.i, %__hugr__.__tk2_qalloc.210.exit.1.i, %__hugr__.__tk2_qalloc.210.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.1.i + +__hugr__.__tk2_qalloc.210.exit.1.i: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.1.i) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not280.i = icmp eq i64 %7, 0 + br i1 %.not280.i, label %panic.i.i, label %cond_exit_20.1.i + +cond_exit_20.1.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.1.i + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.1.i, ptr %9, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.2.i + +__hugr__.__tk2_qalloc.210.exit.2.i: ; preds = %cond_exit_20.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not281.i = icmp eq i64 %11, 0 + br i1 %.not281.i, label %panic.i.i, label %cond_exit_20.2.i + +cond_exit_20.2.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.2.i + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.2.i, ptr %13, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.3.i + +__hugr__.__tk2_qalloc.210.exit.3.i: ; preds = %cond_exit_20.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not282.i = icmp eq i64 %15, 0 + br i1 %.not282.i, label %panic.i.i, label %cond_exit_20.3.i + +cond_exit_20.3.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.3.i + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.3.i, ptr %17, align 4 + %qalloc.i.4.i = tail call i64 @___qalloc() + %not_max.not.not.i.4.i = icmp eq i64 %qalloc.i.4.i, -1 + br i1 %not_max.not.not.i.4.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.4.i + +__hugr__.__tk2_qalloc.210.exit.4.i: ; preds = %cond_exit_20.3.i + tail call void @___reset(i64 %qalloc.i.4.i) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not283.i = icmp eq i64 %19, 0 + br i1 %.not283.i, label %panic.i.i, label %cond_exit_20.4.i + +cond_exit_20.4.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.4.i + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.4.i, ptr %21, align 4 + %qalloc.i.5.i = tail call i64 @___qalloc() + %not_max.not.not.i.5.i = icmp eq i64 %qalloc.i.5.i, -1 + br i1 %not_max.not.not.i.5.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.5.i + +__hugr__.__tk2_qalloc.210.exit.5.i: ; preds = %cond_exit_20.4.i + tail call void @___reset(i64 %qalloc.i.5.i) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not284.i = icmp eq i64 %23, 0 + br i1 %.not284.i, label %panic.i.i, label %cond_exit_20.5.i + +cond_exit_20.5.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.5.i + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.5.i, ptr %25, align 4 + %qalloc.i.6.i = tail call i64 @___qalloc() + %not_max.not.not.i.6.i = icmp eq i64 %qalloc.i.6.i, -1 + br i1 %not_max.not.not.i.6.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.6.i + +__hugr__.__tk2_qalloc.210.exit.6.i: ; preds = %cond_exit_20.5.i + tail call void @___reset(i64 %qalloc.i.6.i) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not285.i = icmp eq i64 %27, 0 + br i1 %.not285.i, label %panic.i.i, label %cond_exit_20.6.i + +cond_exit_20.6.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.6.i + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.6.i, ptr %29, align 4 + %qalloc.i.7.i = tail call i64 @___qalloc() + %not_max.not.not.i.7.i = icmp eq i64 %qalloc.i.7.i, -1 + br i1 %not_max.not.not.i.7.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.7.i + +__hugr__.__tk2_qalloc.210.exit.7.i: ; preds = %cond_exit_20.6.i + tail call void @___reset(i64 %qalloc.i.7.i) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not286.i = icmp eq i64 %31, 0 + br i1 %.not286.i, label %panic.i.i, label %cond_exit_20.7.i + +cond_exit_20.7.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.7.i + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.7.i, ptr %33, align 4 + %qalloc.i.8.i = tail call i64 @___qalloc() + %not_max.not.not.i.8.i = icmp eq i64 %qalloc.i.8.i, -1 + br i1 %not_max.not.not.i.8.i, label %cond_207_case_0.i.i, label %__hugr__.__tk2_qalloc.210.exit.8.i + +__hugr__.__tk2_qalloc.210.exit.8.i: ; preds = %cond_exit_20.7.i + tail call void @___reset(i64 %qalloc.i.8.i) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not287.i = icmp eq i64 %35, 0 + br i1 %.not287.i, label %panic.i.i, label %cond_exit_20.8.i + +cond_exit_20.8.i: ; preds = %__hugr__.__tk2_qalloc.210.exit.8.i + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.8.i, ptr %37, align 4 + %qalloc.i.9.i = tail call i64 @___qalloc() + %not_max.not.not.i.9.i = icmp eq i64 %qalloc.i.9.i, -1 + br i1 %not_max.not.not.i.9.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.9.i + +__barray_check_bounds.exit.9.i: ; preds = %cond_exit_20.8.i + tail call void @___reset(i64 %qalloc.i.9.i) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not288.i = icmp eq i64 %39, 0 + br i1 %.not288.i, label %panic.i.i, label %cond_exit_20.9.i + +cond_exit_20.9.i: ; preds = %__barray_check_bounds.exit.9.i + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.9.i, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.9.i + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rp(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rp(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rp(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rp(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + br label %__barray_check_bounds.exit255.i + +cond_89_case_0.i: ; preds = %cond_exit_89.thread.i + %115 = load i64, ptr %72, align 4 + %116 = or i64 %115, -1024 + store i64 %116, ptr %72, align 4 + %117 = icmp eq i64 %116, -1 + br i1 %117, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +mask_block_err.i.i: ; preds = %cond_89_case_0.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit255.i: ; preds = %cond_exit_89.thread.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %"92_0.0279.i" = phi i64 [ 0, %"__hugr__.$measure_array$$n(10).280.exit.i" ], [ %118, %cond_exit_89.thread.i ] + %118 = add nuw nsw i64 %"92_0.0279.i", 1 + %119 = load i64, ptr %72, align 4 + %120 = lshr i64 %119, %"92_0.0279.i" + %121 = trunc i64 %120 to i1 + br i1 %121, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +__barray_mask_borrow.exit259.i: ; preds = %__barray_check_bounds.exit255.i + %122 = shl nuw nsw i64 1, %"92_0.0279.i" + %123 = xor i64 %119, %122 + store i64 %123, ptr %72, align 4 + %124 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"92_0.0279.i" + %125 = load { i1, i64, i1 }, ptr %124, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %125, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %__barray_check_bounds.exit255.i + %exitcond.i = icmp eq i64 %118, 10 + br i1 %exitcond.i, label %cond_89_case_0.i, label %__barray_check_bounds.exit255.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %125, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_89_case_0.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %126 = tail call i64 @teardown() + ret i64 %126 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..870130e80 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-no_results/no_results_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..63c9df2be --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_exit/postselect_exit_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..f7f13e8c5 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-postselect_panic/postselect_panic_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..5d57126ee --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-print_current_shot/print_current_shot_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..972ddb373 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-qft_32/qft_32_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,583 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_386_case_0.i, label %__barray_check_bounds.exit + +cond_386_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rp(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_296_case_1.i, label %cond_296_case_0.i + +cond_296_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_296.i + +cond_296_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_296.i + +cond_exit_296.i: ; preds = %cond_296_case_0.i, %cond_296_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_296_case_1.i ], [ undef, %cond_296_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_296_case_1.i ], [ %.fca.2.extract120.i, %cond_296_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_329_case_1.i + +panic.i.i: ; preds = %cond_exit_296.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_329_case_1.i: ; preds = %cond_exit_296.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_293_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + +cond_293_case_1.i: ; preds = %cond_329_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit": ; preds = %cond_329_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_662_case_0: ; preds = %cond_exit_662 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_662_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_662 + %"659_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_662 ] + %49 = add nuw nsw i64 %"659_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"659_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_662, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"659_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"659_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_685_case_1, label %cond_exit_662 + +cond_exit_662: ; preds = %cond_685_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"659_0.0998", 30 + br i1 %57, label %cond_662_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_662_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_685_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_662 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rpp(i64 %132, i64 %140, double %143, double 0xC00921FB54442D18) + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_373_case_1, label %cond_373_case_0 + +cond_373_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_373 + +cond_373_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_373 + +cond_exit_373: ; preds = %cond_373_case_1, %cond_373_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_373_case_1 ], [ %.fca.2.extract, %cond_373_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_583_case_1, label %cond_583_case_0 + +cond_583_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_583_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..b81ba25d8 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rng/rng_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_sol new file mode 100644 index 000000000..02b96a8db --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-aarch64-unknown-linux-gnu-rus/rus_aarch64-unknown-linux-gnu_sol @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" +target triple = "aarch64-unknown-linux-gnu" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_240_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_240_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_240_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_254_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_240_case_1.backedge.i.i + +cond_240_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_254_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_254_case_1.i.i + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_240_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_254_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_sol new file mode 100644 index 000000000..6dd55b692 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-addition_3_11/addition_3_11_x86_64-apple-darwin_sol @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.i + +cond_1503_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1507.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1507.exit.2.i, %__hugr__.__tk2_qalloc.1507.exit.1.i, %__hugr__.__tk2_qalloc.1507.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.1.i + +__hugr__.__tk2_qalloc.1507.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.2.i + +__hugr__.__tk2_qalloc.1507.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1503_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.i + +cond_1491_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1494.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1494.exit.2.i, %__hugr__.__tk2_qalloc.1494.exit.1.i, %__hugr__.__tk2_qalloc.1494.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.1.i + +__hugr__.__tk2_qalloc.1494.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.2.i + +__hugr__.__tk2_qalloc.1494.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1491_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1981_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1981_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1949_case_0.i.i, label %__hugr__.__tk2_qalloc.1963.exit.i + +cond_1949_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1963.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1963.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1963.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rp(i64 %58, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %58, i64 %47, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %58, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %47, double 0xBFF921FB54442D18, double 0.000000e+00) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %77, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %77, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0.000000e+00) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %117, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %117, i64 %106, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %117, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %106, double 0xBFF921FB54442D18, double 0.000000e+00) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %169, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %169, i64 %158, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %169, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %158, double 0xBFF921FB54442D18, double 0.000000e+00) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %214, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %214, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0.000000e+00) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rp(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = load i64, ptr %109, align 4 + %255 = lshr i64 %254, %111 + %256 = trunc i64 %255 to i1 + br i1 %256, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %257 = xor i64 %254, %114 + store i64 %257, ptr %109, align 4 + %258 = add i64 %.fca.2.extract308.i.i, 3 + %259 = lshr i64 %258, 6 + %260 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %259 + %261 = load i64, ptr %260, align 4 + %262 = and i64 %258, 63 + %263 = lshr i64 %261, %262 + %264 = trunc i64 %263 to i1 + br i1 %264, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %265 = load i64, ptr %116, align 4 + %266 = shl nuw i64 1, %262 + %267 = xor i64 %261, %266 + store i64 %267, ptr %260, align 4 + %268 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %258 + %269 = load i64, ptr %268, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %265, i64 %269, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 1 + %272 = load i64, ptr %109, align 4 + %273 = lshr i64 %272, %111 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 0 + %276 = xor i64 %272, %114 + store i64 %276, ptr %109, align 4 + store i64 %275, ptr %116, align 4 + %277 = load i64, ptr %260, align 4 + %278 = lshr i64 %277, %262 + %279 = trunc i64 %278 to i1 + br i1 %279, label %__barray_mask_return.exit807.i, label %panic.i806.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %266 + store i64 %280, ptr %260, align 4 + store i64 %271, ptr %268, align 4 + %281 = load i64, ptr %140, align 4 + %282 = lshr i64 %281, %142 + %283 = trunc i64 %282 to i1 + br i1 %283, label %panic.i808.i, label %__barray_mask_borrow.exit809.i + +panic.i808.i: ; preds = %__barray_mask_return.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit809.i: ; preds = %__barray_mask_return.exit807.i + %284 = xor i64 %281, %145 + store i64 %284, ptr %140, align 4 + %285 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %234, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %234, i64 %285, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %285, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %234, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + %286 = load i64, ptr %140, align 4 + %287 = lshr i64 %286, %142 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_borrow.exit809.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_borrow.exit809.i + %289 = xor i64 %286, %145 + store i64 %289, ptr %140, align 4 + store i64 %285, ptr %147, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %299, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %299, i64 %294, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %299, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %294, double 0xBFF921FB54442D18, double 0.000000e+00) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %260, align 4 + %309 = lshr i64 %308, %262 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %266 + store i64 %311, ptr %260, align 4 + %312 = load i64, ptr %268, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %317, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %317, i64 %312, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %317, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %312, double 0xBFF921FB54442D18, double 0.000000e+00) + %318 = load i64, ptr %260, align 4 + %319 = lshr i64 %318, %262 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %266 + store i64 %321, ptr %260, align 4 + store i64 %312, ptr %268, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 1 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %69, align 4 + %345 = lshr i64 %344, %71 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 0 + %348 = xor i64 %344, %74 + store i64 %348, ptr %69, align 4 + store i64 %347, ptr %76, align 4 + %349 = load i64, ptr %109, align 4 + %350 = lshr i64 %349, %111 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %114 + store i64 %352, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %353 = load i64, ptr %196, align 4 + %354 = lshr i64 %353, %198 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %201 + store i64 %356, ptr %196, align 4 + store i64 %342, ptr %203, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %381, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %381, i64 %376, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %381, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %376, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 1 + %385 = load i64, ptr %69, align 4 + %386 = lshr i64 %385, %71 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 2 + %389 = xor i64 %385, %74 + store i64 %389, ptr %69, align 4 + store i64 %388, ptr %76, align 4 + %390 = load i64, ptr %140, align 4 + %391 = lshr i64 %390, %142 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %145 + store i64 %393, ptr %140, align 4 + store i64 %384, ptr %147, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %430, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %430, i64 %425, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %430, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %425, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %459, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %459, i64 %453, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %459, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %453, double 0xBFF921FB54442D18, double 0.000000e+00) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rp(i64 %488, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %488, i64 %477, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %488, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %477, double 0xBFF921FB54442D18, double 0.000000e+00) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1420_case_1.i, label %cond_1420_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1420_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1420.i + +cond_1420_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1420.i + +cond_exit_1420.i: ; preds = %cond_1420_case_1.i, %cond_1420_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1420_case_1.i ], [ undef, %cond_1420_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1420_case_1.i ], [ %.fca.2.extract120.i, %cond_1420_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1417_case_1.i + +panic.i.i213: ; preds = %cond_exit_1420.i.3, %cond_exit_1420.i.2, %cond_exit_1420.i.1, %cond_exit_1420.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1417_case_1.i: ; preds = %cond_exit_1420.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + +cond_1416_case_1.i: ; preds = %cond_1417_case_1.i.3, %cond_1417_case_1.i.2, %cond_1417_case_1.i.1, %cond_1417_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit": ; preds = %cond_1417_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1420_case_1.i.1, label %cond_1420_case_0.i.1 + +cond_1420_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1420.i.1 + +cond_1420_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1420.i.1 + +cond_exit_1420.i.1: ; preds = %cond_1420_case_1.i.1, %cond_1420_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1420_case_1.i.1 ], [ undef, %cond_1420_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1420_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1420_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1417_case_1.i.1, label %panic.i.i213 + +cond_1417_case_1.i.1: ; preds = %cond_exit_1420.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1": ; preds = %cond_1417_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1420_case_1.i.2, label %cond_1420_case_0.i.2 + +cond_1420_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1420.i.2 + +cond_1420_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1420.i.2 + +cond_exit_1420.i.2: ; preds = %cond_1420_case_1.i.2, %cond_1420_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1420_case_1.i.2 ], [ undef, %cond_1420_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1420_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1420_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1417_case_1.i.2, label %panic.i.i213 + +cond_1417_case_1.i.2: ; preds = %cond_exit_1420.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2": ; preds = %cond_1417_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1420_case_1.i.3, label %cond_1420_case_0.i.3 + +cond_1420_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1420.i.3 + +cond_1420_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1420.i.3 + +cond_exit_1420.i.3: ; preds = %cond_1420_case_0.i.3, %cond_1420_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1420_case_1.i.3 ], [ undef, %cond_1420_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1420_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1420_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1417_case_1.i.3, label %panic.i.i213 + +cond_1417_case_1.i.3: ; preds = %cond_exit_1420.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3": ; preds = %cond_1417_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1043, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1043.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_1020_case_1, label %cond_exit_1043 + +cond_exit_1043: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_1020_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1043.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1043 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_1020_case_1.1, label %cond_exit_1043.1 + +cond_1020_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1043.1 + +cond_exit_1043.1: ; preds = %cond_1020_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1043 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1043.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1043.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_1020_case_1.2, label %cond_exit_1043.2 + +cond_1020_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1043.2 + +cond_exit_1043.2: ; preds = %cond_1020_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1043.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1043.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1043.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_1020_case_1.3, label %cond_exit_1043.3 + +cond_1020_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1043.3 + +cond_exit_1043.3: ; preds = %cond_1020_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1043.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1043.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1020_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1043 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1464_case_1, label %cond_1464_case_0 + +cond_1464_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1464 + +cond_1464_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1464 + +cond_exit_1464: ; preds = %cond_1464_case_1, %cond_1464_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1464_case_1 ], [ %.fca.2.extract, %cond_1464_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1380_case_1, label %cond_1380_case_0 + +cond_1380_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1380_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1082 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1082, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1082 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1082.1, label %cond_2283_case_0.i + +cond_exit_1082.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1082.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rp(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1082.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1082.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1082.2, label %cond_2283_case_0.i + +cond_exit_1082.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1082.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rp(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1082.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1082.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1082.3, label %cond_2283_case_0.i + +cond_exit_1082.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1082.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rp(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1082.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1082: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1082 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rp(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_sol new file mode 100644 index 000000000..87a59b320 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-discard_qb_array/discard_qb_array_x86_64-apple-darwin_sol @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_sol new file mode 100644 index 000000000..81a920e99 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-flip_some/flip_some_x86_64-apple-darwin_sol @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rp(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rp(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_sol new file mode 100644 index 000000000..af1874d86 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-measure_qb_array/measure_qb_array_x86_64-apple-darwin_sol @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rp(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rp(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rp(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rp(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_sol new file mode 100644 index 000000000..ff32af6b8 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-no_results/no_results_x86_64-apple-darwin_sol @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_sol new file mode 100644 index 000000000..d888052c7 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_exit/postselect_exit_x86_64-apple-darwin_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_sol new file mode 100644 index 000000000..c629f8a22 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-postselect_panic/postselect_panic_x86_64-apple-darwin_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_sol new file mode 100644 index 000000000..2f2765e7d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-print_current_shot/print_current_shot_x86_64-apple-darwin_sol @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_sol new file mode 100644 index 000000000..3f4c23efd --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-qft_32/qft_32_x86_64-apple-darwin_sol @@ -0,0 +1,583 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_386_case_0.i, label %__barray_check_bounds.exit + +cond_386_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rp(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_296_case_1.i, label %cond_296_case_0.i + +cond_296_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_296.i + +cond_296_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_296.i + +cond_exit_296.i: ; preds = %cond_296_case_0.i, %cond_296_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_296_case_1.i ], [ undef, %cond_296_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_296_case_1.i ], [ %.fca.2.extract120.i, %cond_296_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_329_case_1.i + +panic.i.i: ; preds = %cond_exit_296.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_329_case_1.i: ; preds = %cond_exit_296.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_293_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + +cond_293_case_1.i: ; preds = %cond_329_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit": ; preds = %cond_329_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_662_case_0: ; preds = %cond_exit_662 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_662_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_662 + %"659_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_662 ] + %49 = add nuw nsw i64 %"659_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"659_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_662, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"659_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"659_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_685_case_1, label %cond_exit_662 + +cond_exit_662: ; preds = %cond_685_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"659_0.0998", 30 + br i1 %57, label %cond_662_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_662_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_685_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_662 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rpp(i64 %132, i64 %140, double %143, double 0xC00921FB54442D18) + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_373_case_1, label %cond_373_case_0 + +cond_373_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_373 + +cond_373_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_373 + +cond_exit_373: ; preds = %cond_373_case_1, %cond_373_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_373_case_1 ], [ %.fca.2.extract, %cond_373_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_583_case_1, label %cond_583_case_0 + +cond_583_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_583_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_sol new file mode 100644 index 000000000..015a87c68 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rng/rng_x86_64-apple-darwin_sol @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_sol new file mode 100644 index 000000000..441ee0d9b --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-apple-darwin-rus/rus_x86_64-apple-darwin_sol @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-darwin" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_240_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_240_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_240_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_254_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_240_case_1.backedge.i.i + +cond_240_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_254_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_254_case_1.i.i + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_240_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_254_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..76a7d330a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-addition_3_11/addition_3_11_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.i + +cond_1503_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1507.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1507.exit.2.i, %__hugr__.__tk2_qalloc.1507.exit.1.i, %__hugr__.__tk2_qalloc.1507.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.1.i + +__hugr__.__tk2_qalloc.1507.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.2.i + +__hugr__.__tk2_qalloc.1507.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1503_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.i + +cond_1491_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1494.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1494.exit.2.i, %__hugr__.__tk2_qalloc.1494.exit.1.i, %__hugr__.__tk2_qalloc.1494.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.1.i + +__hugr__.__tk2_qalloc.1494.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.2.i + +__hugr__.__tk2_qalloc.1494.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1491_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1981_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1981_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1949_case_0.i.i, label %__hugr__.__tk2_qalloc.1963.exit.i + +cond_1949_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1963.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1963.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1963.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rp(i64 %58, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %58, i64 %47, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %58, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %47, double 0xBFF921FB54442D18, double 0.000000e+00) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %77, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %77, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0.000000e+00) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %117, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %117, i64 %106, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %117, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %106, double 0xBFF921FB54442D18, double 0.000000e+00) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %169, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %169, i64 %158, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %169, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %158, double 0xBFF921FB54442D18, double 0.000000e+00) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %214, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %214, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0.000000e+00) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rp(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = load i64, ptr %109, align 4 + %255 = lshr i64 %254, %111 + %256 = trunc i64 %255 to i1 + br i1 %256, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %257 = xor i64 %254, %114 + store i64 %257, ptr %109, align 4 + %258 = add i64 %.fca.2.extract308.i.i, 3 + %259 = lshr i64 %258, 6 + %260 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %259 + %261 = load i64, ptr %260, align 4 + %262 = and i64 %258, 63 + %263 = lshr i64 %261, %262 + %264 = trunc i64 %263 to i1 + br i1 %264, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %265 = load i64, ptr %116, align 4 + %266 = shl nuw i64 1, %262 + %267 = xor i64 %261, %266 + store i64 %267, ptr %260, align 4 + %268 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %258 + %269 = load i64, ptr %268, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %265, i64 %269, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 1 + %272 = load i64, ptr %109, align 4 + %273 = lshr i64 %272, %111 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 0 + %276 = xor i64 %272, %114 + store i64 %276, ptr %109, align 4 + store i64 %275, ptr %116, align 4 + %277 = load i64, ptr %260, align 4 + %278 = lshr i64 %277, %262 + %279 = trunc i64 %278 to i1 + br i1 %279, label %__barray_mask_return.exit807.i, label %panic.i806.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %266 + store i64 %280, ptr %260, align 4 + store i64 %271, ptr %268, align 4 + %281 = load i64, ptr %140, align 4 + %282 = lshr i64 %281, %142 + %283 = trunc i64 %282 to i1 + br i1 %283, label %panic.i808.i, label %__barray_mask_borrow.exit809.i + +panic.i808.i: ; preds = %__barray_mask_return.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit809.i: ; preds = %__barray_mask_return.exit807.i + %284 = xor i64 %281, %145 + store i64 %284, ptr %140, align 4 + %285 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %234, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %234, i64 %285, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %285, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %234, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + %286 = load i64, ptr %140, align 4 + %287 = lshr i64 %286, %142 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_borrow.exit809.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_borrow.exit809.i + %289 = xor i64 %286, %145 + store i64 %289, ptr %140, align 4 + store i64 %285, ptr %147, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %299, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %299, i64 %294, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %299, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %294, double 0xBFF921FB54442D18, double 0.000000e+00) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %260, align 4 + %309 = lshr i64 %308, %262 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %266 + store i64 %311, ptr %260, align 4 + %312 = load i64, ptr %268, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %317, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %317, i64 %312, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %317, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %312, double 0xBFF921FB54442D18, double 0.000000e+00) + %318 = load i64, ptr %260, align 4 + %319 = lshr i64 %318, %262 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %266 + store i64 %321, ptr %260, align 4 + store i64 %312, ptr %268, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 1 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %69, align 4 + %345 = lshr i64 %344, %71 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 0 + %348 = xor i64 %344, %74 + store i64 %348, ptr %69, align 4 + store i64 %347, ptr %76, align 4 + %349 = load i64, ptr %109, align 4 + %350 = lshr i64 %349, %111 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %114 + store i64 %352, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %353 = load i64, ptr %196, align 4 + %354 = lshr i64 %353, %198 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %201 + store i64 %356, ptr %196, align 4 + store i64 %342, ptr %203, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %381, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %381, i64 %376, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %381, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %376, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 1 + %385 = load i64, ptr %69, align 4 + %386 = lshr i64 %385, %71 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 2 + %389 = xor i64 %385, %74 + store i64 %389, ptr %69, align 4 + store i64 %388, ptr %76, align 4 + %390 = load i64, ptr %140, align 4 + %391 = lshr i64 %390, %142 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %145 + store i64 %393, ptr %140, align 4 + store i64 %384, ptr %147, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %430, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %430, i64 %425, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %430, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %425, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %459, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %459, i64 %453, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %459, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %453, double 0xBFF921FB54442D18, double 0.000000e+00) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rp(i64 %488, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %488, i64 %477, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %488, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %477, double 0xBFF921FB54442D18, double 0.000000e+00) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1420_case_1.i, label %cond_1420_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1420_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1420.i + +cond_1420_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1420.i + +cond_exit_1420.i: ; preds = %cond_1420_case_1.i, %cond_1420_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1420_case_1.i ], [ undef, %cond_1420_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1420_case_1.i ], [ %.fca.2.extract120.i, %cond_1420_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1417_case_1.i + +panic.i.i213: ; preds = %cond_exit_1420.i.3, %cond_exit_1420.i.2, %cond_exit_1420.i.1, %cond_exit_1420.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1417_case_1.i: ; preds = %cond_exit_1420.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + +cond_1416_case_1.i: ; preds = %cond_1417_case_1.i.3, %cond_1417_case_1.i.2, %cond_1417_case_1.i.1, %cond_1417_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit": ; preds = %cond_1417_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1420_case_1.i.1, label %cond_1420_case_0.i.1 + +cond_1420_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1420.i.1 + +cond_1420_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1420.i.1 + +cond_exit_1420.i.1: ; preds = %cond_1420_case_1.i.1, %cond_1420_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1420_case_1.i.1 ], [ undef, %cond_1420_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1420_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1420_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1417_case_1.i.1, label %panic.i.i213 + +cond_1417_case_1.i.1: ; preds = %cond_exit_1420.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1": ; preds = %cond_1417_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1420_case_1.i.2, label %cond_1420_case_0.i.2 + +cond_1420_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1420.i.2 + +cond_1420_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1420.i.2 + +cond_exit_1420.i.2: ; preds = %cond_1420_case_1.i.2, %cond_1420_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1420_case_1.i.2 ], [ undef, %cond_1420_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1420_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1420_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1417_case_1.i.2, label %panic.i.i213 + +cond_1417_case_1.i.2: ; preds = %cond_exit_1420.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2": ; preds = %cond_1417_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1420_case_1.i.3, label %cond_1420_case_0.i.3 + +cond_1420_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1420.i.3 + +cond_1420_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1420.i.3 + +cond_exit_1420.i.3: ; preds = %cond_1420_case_0.i.3, %cond_1420_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1420_case_1.i.3 ], [ undef, %cond_1420_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1420_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1420_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1417_case_1.i.3, label %panic.i.i213 + +cond_1417_case_1.i.3: ; preds = %cond_exit_1420.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3": ; preds = %cond_1417_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1043, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1043.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_1020_case_1, label %cond_exit_1043 + +cond_exit_1043: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_1020_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1043.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1043 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_1020_case_1.1, label %cond_exit_1043.1 + +cond_1020_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1043.1 + +cond_exit_1043.1: ; preds = %cond_1020_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1043 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1043.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1043.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_1020_case_1.2, label %cond_exit_1043.2 + +cond_1020_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1043.2 + +cond_exit_1043.2: ; preds = %cond_1020_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1043.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1043.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1043.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_1020_case_1.3, label %cond_exit_1043.3 + +cond_1020_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1043.3 + +cond_exit_1043.3: ; preds = %cond_1020_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1043.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1043.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1020_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1043 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1464_case_1, label %cond_1464_case_0 + +cond_1464_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1464 + +cond_1464_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1464 + +cond_exit_1464: ; preds = %cond_1464_case_1, %cond_1464_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1464_case_1 ], [ %.fca.2.extract, %cond_1464_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1380_case_1, label %cond_1380_case_0 + +cond_1380_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1380_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1082 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1082, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1082 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1082.1, label %cond_2283_case_0.i + +cond_exit_1082.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1082.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rp(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1082.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1082.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1082.2, label %cond_2283_case_0.i + +cond_exit_1082.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1082.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rp(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1082.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1082.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1082.3, label %cond_2283_case_0.i + +cond_exit_1082.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1082.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rp(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1082.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1082: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1082 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rp(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..9d0d0dbab --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-discard_qb_array/discard_qb_array_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..0e8b9804a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-flip_some/flip_some_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rp(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rp(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..e4e46d8b9 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-measure_qb_array/measure_qb_array_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rp(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rp(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rp(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rp(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..77030dd70 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-no_results/no_results_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..7cccf504a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_exit/postselect_exit_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..9db108b2d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-postselect_panic/postselect_panic_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..eac1eb476 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-print_current_shot/print_current_shot_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..d4967f05d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-qft_32/qft_32_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,583 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_386_case_0.i, label %__barray_check_bounds.exit + +cond_386_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rp(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_296_case_1.i, label %cond_296_case_0.i + +cond_296_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_296.i + +cond_296_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_296.i + +cond_exit_296.i: ; preds = %cond_296_case_0.i, %cond_296_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_296_case_1.i ], [ undef, %cond_296_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_296_case_1.i ], [ %.fca.2.extract120.i, %cond_296_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_329_case_1.i + +panic.i.i: ; preds = %cond_exit_296.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_329_case_1.i: ; preds = %cond_exit_296.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_293_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + +cond_293_case_1.i: ; preds = %cond_329_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit": ; preds = %cond_329_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_662_case_0: ; preds = %cond_exit_662 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_662_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_662 + %"659_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_662 ] + %49 = add nuw nsw i64 %"659_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"659_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_662, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"659_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"659_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_685_case_1, label %cond_exit_662 + +cond_exit_662: ; preds = %cond_685_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"659_0.0998", 30 + br i1 %57, label %cond_662_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_662_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_685_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_662 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rpp(i64 %132, i64 %140, double %143, double 0xC00921FB54442D18) + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_373_case_1, label %cond_373_case_0 + +cond_373_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_373 + +cond_373_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_373 + +cond_exit_373: ; preds = %cond_373_case_1, %cond_373_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_373_case_1 ], [ %.fca.2.extract, %cond_373_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_583_case_1, label %cond_583_case_0 + +cond_583_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_583_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..2d92b14ca --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rng/rng_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_sol new file mode 100644 index 000000000..0a437eefd --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-unknown-linux-gnu-rus/rus_x86_64-unknown-linux-gnu_sol @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_240_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_240_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_240_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_254_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_240_case_1.backedge.i.i + +cond_240_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_254_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_254_case_1.i.i + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_240_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_254_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_sol new file mode 100644 index 000000000..5ea4f36dd --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-addition_3_11/addition_3_11_x86_64-windows-msvc_sol @@ -0,0 +1,2294 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"sa.static_pyarray.%tmp160.8bfddccb.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 true] } +@"sa.static_pyarray.%tmp159.7d66e70e.0" = constant { i64, [4 x i1] } { i64 4, [4 x i1] [i1 true, i1 true, i1 false, i1 false] } +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_b_reg.8EAD6F09.0 = private constant [19 x i8] c"\12USER:BOOLARR:b_reg" +@res_carry_out.3DB2874F.0 = private constant [20 x i8] c"\13USER:BOOL:carry_out" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@e_Frozenarra.36077F52.0 = private constant [41 x i8] c"(EXIT:INT:Frozenarray index out of bounds" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 32) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + %2 = tail call ptr @heap_alloc(i64 32) + %3 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %3, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.i + +cond_1503_case_0.i.i: ; preds = %cond_exit_2178.2.i, %cond_exit_2178.1.i, %cond_exit_2178.i, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1507.exit.i: ; preds = %alloca_block + tail call void @___reset(i64 %qalloc.i.i) + %4 = load i64, ptr %3, align 4 + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_2178.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.3.i, %__hugr__.__tk2_qalloc.1507.exit.2.i, %__hugr__.__tk2_qalloc.1507.exit.1.i, %__hugr__.__tk2_qalloc.1507.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2178.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.i + %6 = and i64 %4, -2 + store i64 %6, ptr %3, align 4 + store i64 %qalloc.i.i, ptr %2, align 4 + %qalloc.i.1.i = tail call i64 @___qalloc() + %not_max.not.not.i.1.i = icmp eq i64 %qalloc.i.1.i, -1 + br i1 %not_max.not.not.i.1.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.1.i + +__hugr__.__tk2_qalloc.1507.exit.1.i: ; preds = %cond_exit_2178.i + tail call void @___reset(i64 %qalloc.i.1.i) + %7 = load i64, ptr %3, align 4 + %8 = and i64 %7, 2 + %.not.i = icmp eq i64 %8, 0 + br i1 %.not.i, label %panic.i.i, label %cond_exit_2178.1.i + +cond_exit_2178.1.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.1.i + %9 = and i64 %7, -3 + store i64 %9, ptr %3, align 4 + %10 = getelementptr inbounds nuw i8, ptr %2, i64 8 + store i64 %qalloc.i.1.i, ptr %10, align 4 + %qalloc.i.2.i = tail call i64 @___qalloc() + %not_max.not.not.i.2.i = icmp eq i64 %qalloc.i.2.i, -1 + br i1 %not_max.not.not.i.2.i, label %cond_1503_case_0.i.i, label %__hugr__.__tk2_qalloc.1507.exit.2.i + +__hugr__.__tk2_qalloc.1507.exit.2.i: ; preds = %cond_exit_2178.1.i + tail call void @___reset(i64 %qalloc.i.2.i) + %11 = load i64, ptr %3, align 4 + %12 = and i64 %11, 4 + %.not304.i = icmp eq i64 %12, 0 + br i1 %.not304.i, label %panic.i.i, label %cond_exit_2178.2.i + +cond_exit_2178.2.i: ; preds = %__hugr__.__tk2_qalloc.1507.exit.2.i + %13 = and i64 %11, -5 + store i64 %13, ptr %3, align 4 + %14 = getelementptr inbounds nuw i8, ptr %2, i64 16 + store i64 %qalloc.i.2.i, ptr %14, align 4 + %qalloc.i.3.i = tail call i64 @___qalloc() + %not_max.not.not.i.3.i = icmp eq i64 %qalloc.i.3.i, -1 + br i1 %not_max.not.not.i.3.i, label %cond_1503_case_0.i.i, label %__barray_check_bounds.exit.3.i + +__barray_check_bounds.exit.3.i: ; preds = %cond_exit_2178.2.i + tail call void @___reset(i64 %qalloc.i.3.i) + %15 = load i64, ptr %3, align 4 + %16 = and i64 %15, 8 + %.not305.i = icmp eq i64 %16, 0 + br i1 %.not305.i, label %panic.i.i, label %cond_exit_2178.3.i + +cond_exit_2178.3.i: ; preds = %__barray_check_bounds.exit.3.i + %17 = and i64 %15, -9 + store i64 %17, ptr %3, align 4 + %18 = getelementptr inbounds nuw i8, ptr %2, i64 24 + store i64 %qalloc.i.3.i, ptr %18, align 4 + %"127.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %2, 0 + %"127.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.0.insert.i", ptr %3, 1 + %"127.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"127.fca.1.insert.i", i64 0, 2 + %19 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"127.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp159.7d66e70e.0") + %qalloc.i284.i = tail call i64 @___qalloc() + %not_max.not.not.i285.i = icmp eq i64 %qalloc.i284.i, -1 + br i1 %not_max.not.not.i285.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.i + +cond_1491_case_0.i.i: ; preds = %cond_exit_2340.2.i, %cond_exit_2340.1.i, %cond_exit_2340.i, %cond_exit_2178.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1494.exit.i: ; preds = %cond_exit_2178.3.i + tail call void @___reset(i64 %qalloc.i284.i) + %20 = load i64, ptr %1, align 4 + %21 = trunc i64 %20 to i1 + br i1 %21, label %cond_exit_2340.i, label %panic.i288.i + +panic.i288.i: ; preds = %__barray_check_bounds.exit287.3.i, %__hugr__.__tk2_qalloc.1494.exit.2.i, %__hugr__.__tk2_qalloc.1494.exit.1.i, %__hugr__.__tk2_qalloc.1494.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_2340.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.i + %22 = and i64 %20, -2 + store i64 %22, ptr %1, align 4 + store i64 %qalloc.i284.i, ptr %0, align 4 + %qalloc.i284.1.i = tail call i64 @___qalloc() + %not_max.not.not.i285.1.i = icmp eq i64 %qalloc.i284.1.i, -1 + br i1 %not_max.not.not.i285.1.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.1.i + +__hugr__.__tk2_qalloc.1494.exit.1.i: ; preds = %cond_exit_2340.i + tail call void @___reset(i64 %qalloc.i284.1.i) + %23 = load i64, ptr %1, align 4 + %24 = and i64 %23, 2 + %.not306.i = icmp eq i64 %24, 0 + br i1 %.not306.i, label %panic.i288.i, label %cond_exit_2340.1.i + +cond_exit_2340.1.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.1.i + %25 = and i64 %23, -3 + store i64 %25, ptr %1, align 4 + %26 = getelementptr inbounds nuw i8, ptr %0, i64 8 + store i64 %qalloc.i284.1.i, ptr %26, align 4 + %qalloc.i284.2.i = tail call i64 @___qalloc() + %not_max.not.not.i285.2.i = icmp eq i64 %qalloc.i284.2.i, -1 + br i1 %not_max.not.not.i285.2.i, label %cond_1491_case_0.i.i, label %__hugr__.__tk2_qalloc.1494.exit.2.i + +__hugr__.__tk2_qalloc.1494.exit.2.i: ; preds = %cond_exit_2340.1.i + tail call void @___reset(i64 %qalloc.i284.2.i) + %27 = load i64, ptr %1, align 4 + %28 = and i64 %27, 4 + %.not307.i = icmp eq i64 %28, 0 + br i1 %.not307.i, label %panic.i288.i, label %cond_exit_2340.2.i + +cond_exit_2340.2.i: ; preds = %__hugr__.__tk2_qalloc.1494.exit.2.i + %29 = and i64 %27, -5 + store i64 %29, ptr %1, align 4 + %30 = getelementptr inbounds nuw i8, ptr %0, i64 16 + store i64 %qalloc.i284.2.i, ptr %30, align 4 + %qalloc.i284.3.i = tail call i64 @___qalloc() + %not_max.not.not.i285.3.i = icmp eq i64 %qalloc.i284.3.i, -1 + br i1 %not_max.not.not.i285.3.i, label %cond_1491_case_0.i.i, label %__barray_check_bounds.exit287.3.i + +__barray_check_bounds.exit287.3.i: ; preds = %cond_exit_2340.2.i + tail call void @___reset(i64 %qalloc.i284.3.i) + %31 = load i64, ptr %1, align 4 + %32 = and i64 %31, 8 + %.not308.i = icmp eq i64 %32, 0 + br i1 %.not308.i, label %panic.i288.i, label %cond_exit_2340.3.i + +cond_exit_2340.3.i: ; preds = %__barray_check_bounds.exit287.3.i + %33 = and i64 %31, -9 + store i64 %33, ptr %1, align 4 + %34 = getelementptr inbounds nuw i8, ptr %0, i64 24 + store i64 %qalloc.i284.3.i, ptr %34, align 4 + %"188.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"188.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.0.insert.i", ptr %1, 1 + %"188.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"188.fca.1.insert.i", i64 0, 2 + %35 = tail call fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %"188.fca.2.insert.i", ptr nonnull @"sa.static_pyarray.%tmp160.8bfddccb.0") + %qalloc.i290.i = tail call i64 @___qalloc() + %not_max.not.not.i291.i = icmp eq i64 %qalloc.i290.i, -1 + br i1 %not_max.not.not.i291.i, label %cond_1981_case_0.i.i, label %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + +cond_1981_case_0.i.i: ; preds = %cond_exit_2340.3.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +"__hugr__.$crc_prep_regs$$n(4).2143.exit": ; preds = %cond_exit_2340.3.i + tail call void @___reset(i64 %qalloc.i290.i) + %qalloc.i.i208 = tail call i64 @___qalloc() + %not_max.not.not.i.i209 = icmp eq i64 %qalloc.i.i208, -1 + br i1 %not_max.not.not.i.i209, label %cond_1949_case_0.i.i, label %__hugr__.__tk2_qalloc.1963.exit.i + +cond_1949_case_0.i.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.1963.exit.i: ; preds = %"__hugr__.$crc_prep_regs$$n(4).2143.exit" + tail call void @___reset(i64 %qalloc.i.i208) + %.fca.0.extract309.i.i = extractvalue { ptr, ptr, i64 } %19, 0 + %.fca.1.extract310.i.i = extractvalue { ptr, ptr, i64 } %19, 1 + %.fca.2.extract311.i.i = extractvalue { ptr, ptr, i64 } %19, 2 + %.fca.0.extract306.i.i = extractvalue { ptr, ptr, i64 } %35, 0 + %.fca.1.extract307.i.i = extractvalue { ptr, ptr, i64 } %35, 1 + %.fca.2.extract308.i.i = extractvalue { ptr, ptr, i64 } %35, 2 + br label %__barray_check_bounds.exit.i.i + +__barray_check_bounds.exit.i.i: ; preds = %__barray_mask_return.exit324.i.i, %__hugr__.__tk2_qalloc.1963.exit.i + %.fca.0.extract192.i334.i.i = phi i64 [ 1, %__hugr__.__tk2_qalloc.1963.exit.i ], [ %36, %__barray_mask_return.exit324.i.i ] + %36 = add nuw nsw i64 %.fca.0.extract192.i334.i.i, 1 + %37 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract308.i.i + %38 = lshr i64 %37, 6 + %39 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %38 + %40 = load i64, ptr %39, align 4 + %41 = and i64 %37, 63 + %42 = lshr i64 %40, %41 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i.i.i, label %__barray_check_bounds.exit315.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit315.i.i: ; preds = %__barray_check_bounds.exit.i.i + %44 = shl nuw i64 1, %41 + %45 = xor i64 %44, %40 + store i64 %45, ptr %39, align 4 + %46 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %37 + %47 = load i64, ptr %46, align 4 + %48 = add i64 %.fca.0.extract192.i334.i.i, %.fca.2.extract311.i.i + %49 = lshr i64 %48, 6 + %50 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %49 + %51 = load i64, ptr %50, align 4 + %52 = and i64 %48, 63 + %53 = lshr i64 %51, %52 + %54 = trunc i64 %53 to i1 + br i1 %54, label %panic.i316.i.i, label %__barray_check_bounds.exit319.i.i + +panic.i316.i.i: ; preds = %__barray_check_bounds.exit315.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit319.i.i: ; preds = %__barray_check_bounds.exit315.i.i + %55 = shl nuw i64 1, %52 + %56 = xor i64 %51, %55 + store i64 %56, ptr %50, align 4 + %57 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %48 + %58 = load i64, ptr %57, align 4 + tail call void @___rp(i64 %58, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %58, i64 %47, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %58, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %58, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %47, double 0xBFF921FB54442D18, double 0.000000e+00) + %59 = load i64, ptr %39, align 4 + %60 = lshr i64 %59, %41 + %61 = trunc i64 %60 to i1 + br i1 %61, label %__barray_check_bounds.exit322.i.i, label %panic.i320.i.i + +panic.i320.i.i: ; preds = %__barray_check_bounds.exit319.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit322.i.i: ; preds = %__barray_check_bounds.exit319.i.i + %62 = xor i64 %59, %44 + store i64 %62, ptr %39, align 4 + store i64 %47, ptr %46, align 4 + %63 = load i64, ptr %50, align 4 + %64 = lshr i64 %63, %52 + %65 = trunc i64 %64 to i1 + br i1 %65, label %__barray_mask_return.exit324.i.i, label %panic.i323.i.i + +panic.i323.i.i: ; preds = %__barray_check_bounds.exit322.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit324.i.i: ; preds = %__barray_check_bounds.exit322.i.i + %66 = xor i64 %63, %55 + store i64 %66, ptr %50, align 4 + store i64 %58, ptr %57, align 4 + %exitcond.not.i.i = icmp eq i64 %36, 4 + br i1 %exitcond.not.i.i, label %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i", label %__barray_check_bounds.exit.i.i + +"__hugr__.$traversal2_start_end$$n(4).2395.exit.i": ; preds = %__barray_mask_return.exit324.i.i + %67 = add i64 %.fca.2.extract311.i.i, 1 + %68 = lshr i64 %67, 6 + %69 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %68 + %70 = load i64, ptr %69, align 4 + %71 = and i64 %67, 63 + %72 = lshr i64 %70, %71 + %73 = trunc i64 %72 to i1 + br i1 %73, label %panic.i.i210, label %__barray_mask_borrow.exit.i + +panic.i.i210: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %"__hugr__.$traversal2_start_end$$n(4).2395.exit.i" + %74 = shl nuw i64 1, %71 + %75 = xor i64 %70, %74 + store i64 %75, ptr %69, align 4 + %76 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %67 + %77 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %77, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %77, i64 %qalloc.i.i208, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %77, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %77, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i208, double 0xBFF921FB54442D18, double 0.000000e+00) + %78 = load i64, ptr %69, align 4 + %79 = lshr i64 %78, %71 + %80 = trunc i64 %79 to i1 + br i1 %80, label %__barray_mask_return.exit.i, label %panic.i783.i + +panic.i783.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i: ; preds = %__barray_mask_borrow.exit.i + %81 = xor i64 %78, %74 + store i64 %81, ptr %69, align 4 + store i64 %77, ptr %76, align 4 + %82 = lshr i64 %.fca.2.extract308.i.i, 6 + %83 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %82 + %84 = load i64, ptr %83, align 4 + %85 = and i64 %.fca.2.extract308.i.i, 63 + %86 = lshr i64 %84, %85 + %87 = trunc i64 %86 to i1 + br i1 %87, label %panic.i.i785.i, label %__barray_mask_borrow.exit.i.i + +panic.i.i785.i: ; preds = %__barray_mask_return.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i.i: ; preds = %__barray_mask_return.exit.i + %88 = shl nuw i64 1, %85 + %89 = xor i64 %84, %88 + store i64 %89, ptr %83, align 4 + %90 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %.fca.2.extract308.i.i + %91 = load i64, ptr %90, align 4 + %92 = lshr i64 %.fca.2.extract311.i.i, 6 + %93 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %92 + %94 = load i64, ptr %93, align 4 + %95 = and i64 %.fca.2.extract311.i.i, 63 + %96 = lshr i64 %94, %95 + %97 = trunc i64 %96 to i1 + br i1 %97, label %panic.i618.i.i, label %__barray_mask_borrow.exit619.i.i + +panic.i618.i.i: ; preds = %__barray_mask_borrow.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit619.i.i: ; preds = %__barray_mask_borrow.exit.i.i + %98 = shl nuw i64 1, %95 + %99 = xor i64 %94, %98 + store i64 %99, ptr %93, align 4 + %100 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %.fca.2.extract311.i.i + %101 = load i64, ptr %100, align 4 + %102 = load i64, ptr %69, align 4 + %103 = lshr i64 %102, %71 + %104 = trunc i64 %103 to i1 + br i1 %104, label %panic.i620.i.i, label %__barray_mask_borrow.exit621.i.i + +panic.i620.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit621.i.i: ; preds = %__barray_mask_borrow.exit619.i.i + %105 = xor i64 %102, %74 + store i64 %105, ptr %69, align 4 + %106 = load i64, ptr %76, align 4 + %107 = add i64 %.fca.2.extract311.i.i, 2 + %108 = lshr i64 %107, 6 + %109 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %108 + %110 = load i64, ptr %109, align 4 + %111 = and i64 %107, 63 + %112 = lshr i64 %110, %111 + %113 = trunc i64 %112 to i1 + br i1 %113, label %panic.i622.i.i, label %__barray_mask_borrow.exit623.i.i + +panic.i622.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit623.i.i: ; preds = %__barray_mask_borrow.exit621.i.i + %114 = shl nuw i64 1, %111 + %115 = xor i64 %110, %114 + store i64 %115, ptr %109, align 4 + %116 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %107 + %117 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %117, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %117, i64 %106, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %117, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %117, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %106, double 0xBFF921FB54442D18, double 0.000000e+00) + %118 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %91, i64 %101, i64 %qalloc.i.i208) + %119 = extractvalue { i64, i64, i64 } %118, 1 + %120 = extractvalue { i64, i64, i64 } %118, 2 + %121 = load i64, ptr %83, align 4 + %122 = lshr i64 %121, %85 + %123 = trunc i64 %122 to i1 + br i1 %123, label %__barray_mask_return.exit.i.i, label %panic.i624.i.i + +panic.i624.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i.i: ; preds = %__barray_mask_borrow.exit623.i.i + %124 = extractvalue { i64, i64, i64 } %118, 0 + %125 = xor i64 %121, %88 + store i64 %125, ptr %83, align 4 + store i64 %124, ptr %90, align 4 + %126 = load i64, ptr %93, align 4 + %127 = lshr i64 %126, %95 + %128 = trunc i64 %127 to i1 + br i1 %128, label %__barray_mask_return.exit626.i.i, label %panic.i625.i.i + +panic.i625.i.i: ; preds = %__barray_mask_return.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit626.i.i: ; preds = %__barray_mask_return.exit.i.i + %129 = xor i64 %126, %98 + store i64 %129, ptr %93, align 4 + store i64 %119, ptr %100, align 4 + %130 = load i64, ptr %69, align 4 + %131 = lshr i64 %130, %71 + %132 = trunc i64 %131 to i1 + br i1 %132, label %__barray_mask_return.exit628.i.i, label %panic.i627.i.i + +panic.i627.i.i: ; preds = %__barray_mask_return.exit626.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit628.i.i: ; preds = %__barray_mask_return.exit626.i.i + %133 = xor i64 %130, %74 + store i64 %133, ptr %69, align 4 + store i64 %106, ptr %76, align 4 + %134 = load i64, ptr %109, align 4 + %135 = lshr i64 %134, %111 + %136 = trunc i64 %135 to i1 + br i1 %136, label %__barray_mask_return.exit630.i.i, label %panic.i629.i.i + +panic.i629.i.i: ; preds = %__barray_mask_return.exit628.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit630.i.i: ; preds = %__barray_mask_return.exit628.i.i + %137 = xor i64 %134, %114 + store i64 %137, ptr %109, align 4 + store i64 %117, ptr %116, align 4 + %138 = add i64 %.fca.2.extract308.i.i, 1 + %139 = lshr i64 %138, 6 + %140 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %139 + %141 = load i64, ptr %140, align 4 + %142 = and i64 %138, 63 + %143 = lshr i64 %141, %142 + %144 = trunc i64 %143 to i1 + br i1 %144, label %panic.i631.i.i, label %__barray_mask_borrow.exit632.i.i + +panic.i631.i.i: ; preds = %__barray_mask_return.exit630.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit632.i.i: ; preds = %__barray_mask_return.exit630.i.i + %145 = shl nuw i64 1, %142 + %146 = xor i64 %141, %145 + store i64 %146, ptr %140, align 4 + %147 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %138 + %148 = load i64, ptr %147, align 4 + %149 = load i64, ptr %69, align 4 + %150 = lshr i64 %149, %71 + %151 = trunc i64 %150 to i1 + br i1 %151, label %panic.i633.i.i, label %__barray_mask_borrow.exit634.i.i + +panic.i633.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit634.i.i: ; preds = %__barray_mask_borrow.exit632.i.i + %152 = xor i64 %149, %74 + store i64 %152, ptr %69, align 4 + %153 = load i64, ptr %76, align 4 + %154 = load i64, ptr %109, align 4 + %155 = lshr i64 %154, %111 + %156 = trunc i64 %155 to i1 + br i1 %156, label %panic.i635.i.i, label %__barray_mask_borrow.exit636.i.i + +panic.i635.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit636.i.i: ; preds = %__barray_mask_borrow.exit634.i.i + %157 = xor i64 %154, %114 + store i64 %157, ptr %109, align 4 + %158 = load i64, ptr %116, align 4 + %159 = add i64 %.fca.2.extract311.i.i, 3 + %160 = lshr i64 %159, 6 + %161 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %160 + %162 = load i64, ptr %161, align 4 + %163 = and i64 %159, 63 + %164 = lshr i64 %162, %163 + %165 = trunc i64 %164 to i1 + br i1 %165, label %panic.i637.i.i, label %__barray_mask_borrow.exit638.i.i + +panic.i637.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit638.i.i: ; preds = %__barray_mask_borrow.exit636.i.i + %166 = shl nuw i64 1, %163 + %167 = xor i64 %162, %166 + store i64 %167, ptr %161, align 4 + %168 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %159 + %169 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %169, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %169, i64 %158, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %169, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %169, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %158, double 0xBFF921FB54442D18, double 0.000000e+00) + %170 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %120, i64 %148, i64 %153) + %171 = extractvalue { i64, i64, i64 } %170, 2 + %172 = load i64, ptr %140, align 4 + %173 = lshr i64 %172, %142 + %174 = trunc i64 %173 to i1 + br i1 %174, label %__barray_mask_return.exit645.i.i, label %panic.i644.i.i + +panic.i644.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit645.i.i: ; preds = %__barray_mask_borrow.exit638.i.i + %175 = extractvalue { i64, i64, i64 } %170, 1 + %176 = xor i64 %172, %145 + store i64 %176, ptr %140, align 4 + store i64 %175, ptr %147, align 4 + %177 = load i64, ptr %69, align 4 + %178 = lshr i64 %177, %71 + %179 = trunc i64 %178 to i1 + br i1 %179, label %__barray_mask_return.exit647.i.i, label %panic.i646.i.i + +panic.i646.i.i: ; preds = %__barray_mask_return.exit645.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit647.i.i: ; preds = %__barray_mask_return.exit645.i.i + %180 = xor i64 %177, %74 + store i64 %180, ptr %69, align 4 + store i64 %171, ptr %76, align 4 + %181 = load i64, ptr %109, align 4 + %182 = lshr i64 %181, %111 + %183 = trunc i64 %182 to i1 + br i1 %183, label %__barray_mask_return.exit649.i.i, label %panic.i648.i.i + +panic.i648.i.i: ; preds = %__barray_mask_return.exit647.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit649.i.i: ; preds = %__barray_mask_return.exit647.i.i + %184 = xor i64 %181, %114 + store i64 %184, ptr %109, align 4 + store i64 %158, ptr %116, align 4 + %185 = load i64, ptr %161, align 4 + %186 = lshr i64 %185, %163 + %187 = trunc i64 %186 to i1 + br i1 %187, label %__barray_mask_return.exit651.i.i, label %panic.i650.i.i + +panic.i650.i.i: ; preds = %__barray_mask_return.exit649.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit651.i.i: ; preds = %__barray_mask_return.exit649.i.i + %188 = xor i64 %185, %166 + store i64 %188, ptr %161, align 4 + store i64 %169, ptr %168, align 4 + %189 = load i64, ptr %69, align 4 + %190 = lshr i64 %189, %71 + %191 = trunc i64 %190 to i1 + br i1 %191, label %panic.i695.i.i, label %__barray_mask_borrow.exit696.i.i + +panic.i695.i.i: ; preds = %__barray_mask_return.exit651.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i.i: ; preds = %__barray_mask_return.exit651.i.i + %192 = xor i64 %189, %74 + store i64 %192, ptr %69, align 4 + %193 = load i64, ptr %76, align 4 + %194 = add i64 %.fca.2.extract308.i.i, 2 + %195 = lshr i64 %194, 6 + %196 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %195 + %197 = load i64, ptr %196, align 4 + %198 = and i64 %194, 63 + %199 = lshr i64 %197, %198 + %200 = trunc i64 %199 to i1 + br i1 %200, label %panic.i697.i.i, label %__barray_mask_borrow.exit698.i.i + +panic.i697.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i.i: ; preds = %__barray_mask_borrow.exit696.i.i + %201 = shl nuw i64 1, %198 + %202 = xor i64 %197, %201 + store i64 %202, ptr %196, align 4 + %203 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %194 + %204 = load i64, ptr %203, align 4 + %205 = load i64, ptr %109, align 4 + %206 = lshr i64 %205, %111 + %207 = trunc i64 %206 to i1 + br i1 %207, label %panic.i699.i.i, label %__barray_mask_borrow.exit700.i.i + +panic.i699.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i.i: ; preds = %__barray_mask_borrow.exit698.i.i + %208 = xor i64 %205, %114 + store i64 %208, ptr %109, align 4 + %209 = load i64, ptr %161, align 4 + %210 = lshr i64 %209, %163 + %211 = trunc i64 %210 to i1 + br i1 %211, label %panic.i701.i.i, label %__barray_mask_borrow.exit702.i.i + +panic.i701.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit702.i.i: ; preds = %__barray_mask_borrow.exit700.i.i + %212 = load i64, ptr %116, align 4 + %213 = xor i64 %209, %166 + store i64 %213, ptr %161, align 4 + %214 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %214, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %214, i64 %qalloc.i290.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %214, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %214, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %qalloc.i290.i, double 0xBFF921FB54442D18, double 0.000000e+00) + %215 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %193, i64 %204, i64 %212) + %216 = extractvalue { i64, i64, i64 } %215, 1 + %217 = extractvalue { i64, i64, i64 } %215, 2 + %218 = load i64, ptr %69, align 4 + %219 = lshr i64 %218, %71 + %220 = trunc i64 %219 to i1 + br i1 %220, label %__barray_mask_return.exit709.i.i, label %panic.i708.i.i + +panic.i708.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit709.i.i: ; preds = %__barray_mask_borrow.exit702.i.i + %221 = extractvalue { i64, i64, i64 } %215, 0 + %222 = xor i64 %218, %74 + store i64 %222, ptr %69, align 4 + store i64 %221, ptr %76, align 4 + %223 = load i64, ptr %196, align 4 + %224 = lshr i64 %223, %198 + %225 = trunc i64 %224 to i1 + br i1 %225, label %__barray_mask_return.exit711.i.i, label %panic.i710.i.i + +panic.i710.i.i: ; preds = %__barray_mask_return.exit709.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit711.i.i: ; preds = %__barray_mask_return.exit709.i.i + %226 = xor i64 %223, %201 + store i64 %226, ptr %196, align 4 + store i64 %216, ptr %203, align 4 + %227 = load i64, ptr %109, align 4 + %228 = lshr i64 %227, %111 + %229 = trunc i64 %228 to i1 + br i1 %229, label %__barray_mask_return.exit713.i.i, label %panic.i712.i.i + +panic.i712.i.i: ; preds = %__barray_mask_return.exit711.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit713.i.i: ; preds = %__barray_mask_return.exit711.i.i + %230 = xor i64 %227, %114 + store i64 %230, ptr %109, align 4 + store i64 %217, ptr %116, align 4 + %231 = load i64, ptr %161, align 4 + %232 = lshr i64 %231, %163 + %233 = trunc i64 %232 to i1 + br i1 %233, label %"__hugr__.$_block_1_layers$$n(4).2501.exit.i", label %panic.i714.i.i + +panic.i714.i.i: ; preds = %__barray_mask_return.exit713.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_1_layers$$n(4).2501.exit.i": ; preds = %__barray_mask_return.exit713.i.i + %234 = extractvalue { i64, i64, i64 } %170, 0 + %235 = xor i64 %231, %166 + store i64 %235, ptr %161, align 4 + store i64 %214, ptr %168, align 4 + %236 = load i64, ptr %140, align 4 + %237 = lshr i64 %236, %142 + %238 = trunc i64 %237 to i1 + br i1 %238, label %panic.i794.i, label %__barray_check_bounds.exit797.i + +panic.i794.i: ; preds = %__barray_check_bounds.exit.1.i, %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit797.i: ; preds = %"__hugr__.$_block_1_layers$$n(4).2501.exit.i" + %239 = xor i64 %236, %145 + store i64 %239, ptr %140, align 4 + %240 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %240, double 0x400921FB54442D18, double 0.000000e+00) + %241 = load i64, ptr %140, align 4 + %242 = lshr i64 %241, %142 + %243 = trunc i64 %242 to i1 + br i1 %243, label %__barray_check_bounds.exit.1.i, label %panic.i798.i + +panic.i798.i: ; preds = %__barray_check_bounds.exit797.1.i, %__barray_check_bounds.exit797.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit.1.i: ; preds = %__barray_check_bounds.exit797.i + %244 = xor i64 %241, %145 + store i64 %244, ptr %140, align 4 + store i64 %240, ptr %147, align 4 + %245 = load i64, ptr %196, align 4 + %246 = lshr i64 %245, %198 + %247 = trunc i64 %246 to i1 + br i1 %247, label %panic.i794.i, label %__barray_check_bounds.exit797.1.i + +__barray_check_bounds.exit797.1.i: ; preds = %__barray_check_bounds.exit.1.i + %248 = xor i64 %245, %201 + store i64 %248, ptr %196, align 4 + %249 = load i64, ptr %203, align 4 + tail call void @___rp(i64 %249, double 0x400921FB54442D18, double 0.000000e+00) + %250 = load i64, ptr %196, align 4 + %251 = lshr i64 %250, %198 + %252 = trunc i64 %251 to i1 + br i1 %252, label %__barray_mask_return.exit799.1.i, label %panic.i798.i + +__barray_mask_return.exit799.1.i: ; preds = %__barray_check_bounds.exit797.1.i + %253 = xor i64 %250, %201 + store i64 %253, ptr %196, align 4 + store i64 %249, ptr %203, align 4 + %254 = load i64, ptr %109, align 4 + %255 = lshr i64 %254, %111 + %256 = trunc i64 %255 to i1 + br i1 %256, label %panic.i800.i, label %__barray_mask_borrow.exit801.i + +panic.i800.i: ; preds = %__barray_mask_return.exit799.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit801.i: ; preds = %__barray_mask_return.exit799.1.i + %257 = xor i64 %254, %114 + store i64 %257, ptr %109, align 4 + %258 = add i64 %.fca.2.extract308.i.i, 3 + %259 = lshr i64 %258, 6 + %260 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %259 + %261 = load i64, ptr %260, align 4 + %262 = and i64 %258, 63 + %263 = lshr i64 %261, %262 + %264 = trunc i64 %263 to i1 + br i1 %264, label %panic.i802.i, label %__barray_mask_borrow.exit803.i + +panic.i802.i: ; preds = %__barray_mask_borrow.exit801.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit803.i: ; preds = %__barray_mask_borrow.exit801.i + %265 = load i64, ptr %116, align 4 + %266 = shl nuw i64 1, %262 + %267 = xor i64 %261, %266 + store i64 %267, ptr %260, align 4 + %268 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %258 + %269 = load i64, ptr %268, align 4 + %270 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %265, i64 %269, i64 %qalloc.i290.i) + %271 = extractvalue { i64, i64, i64 } %270, 1 + %272 = load i64, ptr %109, align 4 + %273 = lshr i64 %272, %111 + %274 = trunc i64 %273 to i1 + br i1 %274, label %__barray_mask_return.exit805.i, label %panic.i804.i + +panic.i804.i: ; preds = %__barray_mask_borrow.exit803.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit805.i: ; preds = %__barray_mask_borrow.exit803.i + %275 = extractvalue { i64, i64, i64 } %270, 0 + %276 = xor i64 %272, %114 + store i64 %276, ptr %109, align 4 + store i64 %275, ptr %116, align 4 + %277 = load i64, ptr %260, align 4 + %278 = lshr i64 %277, %262 + %279 = trunc i64 %278 to i1 + br i1 %279, label %__barray_mask_return.exit807.i, label %panic.i806.i + +panic.i806.i: ; preds = %__barray_mask_return.exit805.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit807.i: ; preds = %__barray_mask_return.exit805.i + %280 = xor i64 %277, %266 + store i64 %280, ptr %260, align 4 + store i64 %271, ptr %268, align 4 + %281 = load i64, ptr %140, align 4 + %282 = lshr i64 %281, %142 + %283 = trunc i64 %282 to i1 + br i1 %283, label %panic.i808.i, label %__barray_mask_borrow.exit809.i + +panic.i808.i: ; preds = %__barray_mask_return.exit807.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit809.i: ; preds = %__barray_mask_return.exit807.i + %284 = xor i64 %281, %145 + store i64 %284, ptr %140, align 4 + %285 = load i64, ptr %147, align 4 + tail call void @___rp(i64 %234, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %234, i64 %285, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %285, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %234, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %234, double 0xBFF921FB54442D18) + %286 = load i64, ptr %140, align 4 + %287 = lshr i64 %286, %142 + %288 = trunc i64 %287 to i1 + br i1 %288, label %__barray_mask_return.exit813.i, label %panic.i812.i + +panic.i812.i: ; preds = %__barray_mask_borrow.exit809.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit813.i: ; preds = %__barray_mask_borrow.exit809.i + %289 = xor i64 %286, %145 + store i64 %289, ptr %140, align 4 + store i64 %285, ptr %147, align 4 + %290 = load i64, ptr %196, align 4 + %291 = lshr i64 %290, %198 + %292 = trunc i64 %291 to i1 + br i1 %292, label %panic.i816.i, label %__barray_mask_borrow.exit817.i + +panic.i816.i: ; preds = %__barray_check_bounds.exit815.1.i, %__barray_mask_return.exit813.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit817.i: ; preds = %__barray_mask_return.exit813.i + %293 = xor i64 %290, %201 + store i64 %293, ptr %196, align 4 + %294 = load i64, ptr %203, align 4 + %295 = load i64, ptr %69, align 4 + %296 = lshr i64 %295, %71 + %297 = trunc i64 %296 to i1 + br i1 %297, label %panic.i820.i, label %__barray_check_bounds.exit825.i + +panic.i820.i: ; preds = %__barray_check_bounds.exit819.1.i, %__barray_mask_borrow.exit817.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit825.i: ; preds = %__barray_mask_borrow.exit817.i + %298 = xor i64 %295, %74 + store i64 %298, ptr %69, align 4 + %299 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %299, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %299, i64 %294, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %299, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %299, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %294, double 0xBFF921FB54442D18, double 0.000000e+00) + %300 = load i64, ptr %196, align 4 + %301 = lshr i64 %300, %198 + %302 = trunc i64 %301 to i1 + br i1 %302, label %__barray_check_bounds.exit829.i, label %panic.i826.i + +panic.i826.i: ; preds = %__barray_check_bounds.exit825.1.i, %__barray_check_bounds.exit825.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit829.i: ; preds = %__barray_check_bounds.exit825.i + %303 = xor i64 %300, %201 + store i64 %303, ptr %196, align 4 + store i64 %294, ptr %203, align 4 + %304 = load i64, ptr %69, align 4 + %305 = lshr i64 %304, %71 + %306 = trunc i64 %305 to i1 + br i1 %306, label %__barray_check_bounds.exit815.1.i, label %panic.i830.i + +panic.i830.i: ; preds = %__barray_check_bounds.exit829.1.i, %__barray_check_bounds.exit829.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit815.1.i: ; preds = %__barray_check_bounds.exit829.i + %307 = xor i64 %304, %74 + store i64 %307, ptr %69, align 4 + store i64 %299, ptr %76, align 4 + %308 = load i64, ptr %260, align 4 + %309 = lshr i64 %308, %262 + %310 = trunc i64 %309 to i1 + br i1 %310, label %panic.i816.i, label %__barray_check_bounds.exit819.1.i + +__barray_check_bounds.exit819.1.i: ; preds = %__barray_check_bounds.exit815.1.i + %311 = xor i64 %308, %266 + store i64 %311, ptr %260, align 4 + %312 = load i64, ptr %268, align 4 + %313 = load i64, ptr %109, align 4 + %314 = lshr i64 %313, %111 + %315 = trunc i64 %314 to i1 + br i1 %315, label %panic.i820.i, label %__barray_check_bounds.exit825.1.i + +__barray_check_bounds.exit825.1.i: ; preds = %__barray_check_bounds.exit819.1.i + %316 = xor i64 %313, %114 + store i64 %316, ptr %109, align 4 + %317 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %317, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %317, i64 %312, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %317, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %317, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %312, double 0xBFF921FB54442D18, double 0.000000e+00) + %318 = load i64, ptr %260, align 4 + %319 = lshr i64 %318, %262 + %320 = trunc i64 %319 to i1 + br i1 %320, label %__barray_check_bounds.exit829.1.i, label %panic.i826.i + +__barray_check_bounds.exit829.1.i: ; preds = %__barray_check_bounds.exit825.1.i + %321 = xor i64 %318, %266 + store i64 %321, ptr %260, align 4 + store i64 %312, ptr %268, align 4 + %322 = load i64, ptr %109, align 4 + %323 = lshr i64 %322, %111 + %324 = trunc i64 %323 to i1 + br i1 %324, label %__barray_mask_return.exit831.1.i, label %panic.i830.i + +__barray_mask_return.exit831.1.i: ; preds = %__barray_check_bounds.exit829.1.i + %325 = xor i64 %322, %114 + store i64 %325, ptr %109, align 4 + store i64 %317, ptr %116, align 4 + %326 = load i64, ptr %196, align 4 + %327 = lshr i64 %326, %198 + %328 = trunc i64 %327 to i1 + br i1 %328, label %panic.i.i841.i, label %__barray_mask_borrow.exit.i832.i + +panic.i.i841.i: ; preds = %__barray_mask_return.exit831.1.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i832.i: ; preds = %__barray_mask_return.exit831.1.i + %329 = xor i64 %326, %201 + store i64 %329, ptr %196, align 4 + %330 = load i64, ptr %203, align 4 + %331 = load i64, ptr %69, align 4 + %332 = lshr i64 %331, %71 + %333 = trunc i64 %332 to i1 + br i1 %333, label %panic.i610.i.i, label %__barray_mask_borrow.exit611.i.i + +panic.i610.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit611.i.i: ; preds = %__barray_mask_borrow.exit.i832.i + %334 = xor i64 %331, %74 + store i64 %334, ptr %69, align 4 + %335 = load i64, ptr %109, align 4 + %336 = lshr i64 %335, %111 + %337 = trunc i64 %336 to i1 + br i1 %337, label %panic.i612.i.i, label %__barray_mask_borrow.exit613.i.i + +panic.i612.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit613.i.i: ; preds = %__barray_mask_borrow.exit611.i.i + %338 = load i64, ptr %76, align 4 + %339 = xor i64 %335, %114 + store i64 %339, ptr %109, align 4 + %340 = load i64, ptr %116, align 4 + %341 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %338, i64 %330, i64 %340) + %342 = extractvalue { i64, i64, i64 } %341, 1 + %343 = extractvalue { i64, i64, i64 } %341, 2 + %344 = load i64, ptr %69, align 4 + %345 = lshr i64 %344, %71 + %346 = trunc i64 %345 to i1 + br i1 %346, label %__barray_mask_return.exit.i833.i, label %panic.i614.i.i + +panic.i614.i.i: ; preds = %__barray_mask_borrow.exit613.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit.i833.i: ; preds = %__barray_mask_borrow.exit613.i.i + %347 = extractvalue { i64, i64, i64 } %341, 0 + %348 = xor i64 %344, %74 + store i64 %348, ptr %69, align 4 + store i64 %347, ptr %76, align 4 + %349 = load i64, ptr %109, align 4 + %350 = lshr i64 %349, %111 + %351 = trunc i64 %350 to i1 + br i1 %351, label %__barray_mask_return.exit616.i.i, label %panic.i615.i.i + +panic.i615.i.i: ; preds = %__barray_mask_return.exit.i833.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit616.i.i: ; preds = %__barray_mask_return.exit.i833.i + %352 = xor i64 %349, %114 + store i64 %352, ptr %109, align 4 + store i64 %343, ptr %116, align 4 + %353 = load i64, ptr %196, align 4 + %354 = lshr i64 %353, %198 + %355 = trunc i64 %354 to i1 + br i1 %355, label %__barray_mask_return.exit618.i.i, label %panic.i617.i.i + +panic.i617.i.i: ; preds = %__barray_mask_return.exit616.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit618.i.i: ; preds = %__barray_mask_return.exit616.i.i + %356 = xor i64 %353, %201 + store i64 %356, ptr %196, align 4 + store i64 %342, ptr %203, align 4 + %357 = load i64, ptr %140, align 4 + %358 = lshr i64 %357, %142 + %359 = trunc i64 %358 to i1 + br i1 %359, label %panic.i665.i.i, label %__barray_mask_borrow.exit666.i.i + +panic.i665.i.i: ; preds = %__barray_mask_return.exit618.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit666.i.i: ; preds = %__barray_mask_return.exit618.i.i + %360 = xor i64 %357, %145 + store i64 %360, ptr %140, align 4 + %361 = load i64, ptr %147, align 4 + %362 = load i64, ptr %69, align 4 + %363 = lshr i64 %362, %71 + %364 = trunc i64 %363 to i1 + br i1 %364, label %panic.i667.i.i, label %__barray_mask_borrow.exit668.i.i + +panic.i667.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit668.i.i: ; preds = %__barray_mask_borrow.exit666.i.i + %365 = xor i64 %362, %74 + store i64 %365, ptr %69, align 4 + %366 = load i64, ptr %76, align 4 + %367 = load i64, ptr %196, align 4 + %368 = lshr i64 %367, %198 + %369 = trunc i64 %368 to i1 + br i1 %369, label %panic.i669.i.i, label %__barray_mask_borrow.exit670.i.i + +panic.i669.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit670.i.i: ; preds = %__barray_mask_borrow.exit668.i.i + %370 = xor i64 %367, %201 + store i64 %370, ptr %196, align 4 + %371 = load i64, ptr %203, align 4 + %372 = load i64, ptr %109, align 4 + %373 = lshr i64 %372, %111 + %374 = trunc i64 %373 to i1 + br i1 %374, label %panic.i671.i.i, label %__barray_mask_borrow.exit672.i.i + +panic.i671.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit672.i.i: ; preds = %__barray_mask_borrow.exit670.i.i + %375 = xor i64 %372, %114 + store i64 %375, ptr %109, align 4 + %376 = load i64, ptr %116, align 4 + %377 = load i64, ptr %161, align 4 + %378 = lshr i64 %377, %163 + %379 = trunc i64 %378 to i1 + br i1 %379, label %panic.i673.i.i, label %__barray_mask_borrow.exit674.i.i + +panic.i673.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit674.i.i: ; preds = %__barray_mask_borrow.exit672.i.i + %380 = xor i64 %377, %166 + store i64 %380, ptr %161, align 4 + %381 = load i64, ptr %168, align 4 + tail call void @___rp(i64 %381, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %381, i64 %376, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %381, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %381, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %376, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %371, double 0x400921FB54442D18, double 0.000000e+00) + %382 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %234, i64 %361, i64 %366) + %383 = extractvalue { i64, i64, i64 } %382, 0 + %384 = extractvalue { i64, i64, i64 } %382, 1 + %385 = load i64, ptr %69, align 4 + %386 = lshr i64 %385, %71 + %387 = trunc i64 %386 to i1 + br i1 %387, label %__barray_mask_return.exit682.i.i, label %panic.i681.i.i + +panic.i681.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit682.i.i: ; preds = %__barray_mask_borrow.exit674.i.i + %388 = extractvalue { i64, i64, i64 } %382, 2 + %389 = xor i64 %385, %74 + store i64 %389, ptr %69, align 4 + store i64 %388, ptr %76, align 4 + %390 = load i64, ptr %140, align 4 + %391 = lshr i64 %390, %142 + %392 = trunc i64 %391 to i1 + br i1 %392, label %__barray_mask_return.exit684.i.i, label %panic.i683.i.i + +panic.i683.i.i: ; preds = %__barray_mask_return.exit682.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit684.i.i: ; preds = %__barray_mask_return.exit682.i.i + %393 = xor i64 %390, %145 + store i64 %393, ptr %140, align 4 + store i64 %384, ptr %147, align 4 + %394 = load i64, ptr %196, align 4 + %395 = lshr i64 %394, %198 + %396 = trunc i64 %395 to i1 + br i1 %396, label %__barray_mask_return.exit686.i.i, label %panic.i685.i.i + +panic.i685.i.i: ; preds = %__barray_mask_return.exit684.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit686.i.i: ; preds = %__barray_mask_return.exit684.i.i + %397 = xor i64 %394, %201 + store i64 %397, ptr %196, align 4 + store i64 %371, ptr %203, align 4 + %398 = load i64, ptr %109, align 4 + %399 = lshr i64 %398, %111 + %400 = trunc i64 %399 to i1 + br i1 %400, label %__barray_mask_return.exit688.i.i, label %panic.i687.i.i + +panic.i687.i.i: ; preds = %__barray_mask_return.exit686.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit688.i.i: ; preds = %__barray_mask_return.exit686.i.i + %401 = xor i64 %398, %114 + store i64 %401, ptr %109, align 4 + store i64 %376, ptr %116, align 4 + %402 = load i64, ptr %161, align 4 + %403 = lshr i64 %402, %163 + %404 = trunc i64 %403 to i1 + br i1 %404, label %__barray_mask_return.exit690.i.i, label %panic.i689.i.i + +panic.i689.i.i: ; preds = %__barray_mask_return.exit688.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit690.i.i: ; preds = %__barray_mask_return.exit688.i.i + %405 = xor i64 %402, %166 + store i64 %405, ptr %161, align 4 + store i64 %381, ptr %168, align 4 + %406 = load i64, ptr %83, align 4 + %407 = lshr i64 %406, %85 + %408 = trunc i64 %407 to i1 + br i1 %408, label %panic.i691.i.i, label %__barray_mask_borrow.exit692.i.i + +panic.i691.i.i: ; preds = %__barray_mask_return.exit690.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit692.i.i: ; preds = %__barray_mask_return.exit690.i.i + %409 = xor i64 %406, %88 + store i64 %409, ptr %83, align 4 + %410 = load i64, ptr %90, align 4 + %411 = load i64, ptr %93, align 4 + %412 = lshr i64 %411, %95 + %413 = trunc i64 %412 to i1 + br i1 %413, label %panic.i693.i.i, label %__barray_mask_borrow.exit694.i.i + +panic.i693.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit694.i.i: ; preds = %__barray_mask_borrow.exit692.i.i + %414 = xor i64 %411, %98 + store i64 %414, ptr %93, align 4 + %415 = load i64, ptr %100, align 4 + %416 = load i64, ptr %140, align 4 + %417 = lshr i64 %416, %142 + %418 = trunc i64 %417 to i1 + br i1 %418, label %panic.i695.i840.i, label %__barray_mask_borrow.exit696.i834.i + +panic.i695.i840.i: ; preds = %__barray_mask_borrow.exit694.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit696.i834.i: ; preds = %__barray_mask_borrow.exit694.i.i + %419 = xor i64 %416, %145 + store i64 %419, ptr %140, align 4 + %420 = load i64, ptr %147, align 4 + %421 = load i64, ptr %69, align 4 + %422 = lshr i64 %421, %71 + %423 = trunc i64 %422 to i1 + br i1 %423, label %panic.i697.i839.i, label %__barray_mask_borrow.exit698.i835.i + +panic.i697.i839.i: ; preds = %__barray_mask_borrow.exit696.i834.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit698.i835.i: ; preds = %__barray_mask_borrow.exit696.i834.i + %424 = xor i64 %421, %74 + store i64 %424, ptr %69, align 4 + %425 = load i64, ptr %76, align 4 + %426 = load i64, ptr %109, align 4 + %427 = lshr i64 %426, %111 + %428 = trunc i64 %427 to i1 + br i1 %428, label %panic.i699.i838.i, label %__barray_mask_borrow.exit700.i836.i + +panic.i699.i838.i: ; preds = %__barray_mask_borrow.exit698.i835.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit700.i836.i: ; preds = %__barray_mask_borrow.exit698.i835.i + %429 = xor i64 %426, %114 + store i64 %429, ptr %109, align 4 + %430 = load i64, ptr %116, align 4 + tail call void @___rp(i64 %430, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %430, i64 %425, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %430, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %430, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %425, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %420, double 0x400921FB54442D18, double 0.000000e+00) + %431 = tail call fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %410, i64 %415, i64 %383) + %432 = extractvalue { i64, i64, i64 } %431, 1 + %433 = load i64, ptr %83, align 4 + %434 = lshr i64 %433, %85 + %435 = trunc i64 %434 to i1 + br i1 %435, label %__barray_mask_return.exit708.i.i, label %panic.i707.i.i + +panic.i707.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit708.i.i: ; preds = %__barray_mask_borrow.exit700.i836.i + %436 = extractvalue { i64, i64, i64 } %431, 0 + %437 = xor i64 %433, %88 + store i64 %437, ptr %83, align 4 + store i64 %436, ptr %90, align 4 + %438 = load i64, ptr %93, align 4 + %439 = lshr i64 %438, %95 + %440 = trunc i64 %439 to i1 + br i1 %440, label %__barray_mask_return.exit710.i.i, label %panic.i709.i.i + +panic.i709.i.i: ; preds = %__barray_mask_return.exit708.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit710.i.i: ; preds = %__barray_mask_return.exit708.i.i + %441 = xor i64 %438, %98 + store i64 %441, ptr %93, align 4 + store i64 %432, ptr %100, align 4 + %442 = load i64, ptr %140, align 4 + %443 = lshr i64 %442, %142 + %444 = trunc i64 %443 to i1 + br i1 %444, label %__barray_mask_return.exit712.i.i, label %panic.i711.i.i + +panic.i711.i.i: ; preds = %__barray_mask_return.exit710.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit712.i.i: ; preds = %__barray_mask_return.exit710.i.i + %445 = xor i64 %442, %145 + store i64 %445, ptr %140, align 4 + store i64 %420, ptr %147, align 4 + %446 = load i64, ptr %69, align 4 + %447 = lshr i64 %446, %71 + %448 = trunc i64 %447 to i1 + br i1 %448, label %__barray_mask_return.exit714.i.i, label %panic.i713.i.i + +panic.i713.i.i: ; preds = %__barray_mask_return.exit712.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit714.i.i: ; preds = %__barray_mask_return.exit712.i.i + %449 = xor i64 %446, %74 + store i64 %449, ptr %69, align 4 + store i64 %425, ptr %76, align 4 + %450 = load i64, ptr %109, align 4 + %451 = lshr i64 %450, %111 + %452 = trunc i64 %451 to i1 + br i1 %452, label %"__hugr__.$_block_2_layers$$n(4).3218.exit.i", label %panic.i715.i.i + +panic.i715.i.i: ; preds = %__barray_mask_return.exit714.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +"__hugr__.$_block_2_layers$$n(4).3218.exit.i": ; preds = %__barray_mask_return.exit714.i.i + %453 = extractvalue { i64, i64, i64 } %431, 2 + %454 = xor i64 %450, %114 + store i64 %454, ptr %109, align 4 + store i64 %430, ptr %116, align 4 + %455 = load i64, ptr %69, align 4 + %456 = lshr i64 %455, %71 + %457 = trunc i64 %456 to i1 + br i1 %457, label %panic.i842.i, label %__barray_mask_borrow.exit843.i + +panic.i842.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit843.i: ; preds = %"__hugr__.$_block_2_layers$$n(4).3218.exit.i" + %458 = xor i64 %455, %74 + store i64 %458, ptr %69, align 4 + %459 = load i64, ptr %76, align 4 + tail call void @___rp(i64 %459, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %459, i64 %453, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %459, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %459, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %453, double 0xBFF921FB54442D18, double 0.000000e+00) + %460 = load i64, ptr %69, align 4 + %461 = lshr i64 %460, %71 + %462 = trunc i64 %461 to i1 + br i1 %462, label %__barray_mask_return.exit847.i, label %panic.i846.i + +panic.i846.i: ; preds = %__barray_mask_borrow.exit843.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit847.i: ; preds = %__barray_mask_borrow.exit843.i + %463 = xor i64 %460, %74 + store i64 %463, ptr %69, align 4 + store i64 %459, ptr %76, align 4 + %464 = tail call ptr @heap_alloc(i64 0) + %465 = tail call ptr @heap_alloc(i64 0) + br label %__barray_check_bounds.exit.i.i.i + +__barray_check_bounds.exit.i.i.i: ; preds = %__barray_mask_return.exit1273.i.i.i, %__barray_mask_return.exit847.i + %"3555_0.01288.i.i.i" = phi i64 [ 0, %__barray_mask_return.exit847.i ], [ %466, %__barray_mask_return.exit1273.i.i.i ] + %466 = add nuw nsw i64 %"3555_0.01288.i.i.i", 1 + %467 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract308.i.i + %468 = lshr i64 %467, 6 + %469 = getelementptr inbounds nuw i64, ptr %.fca.1.extract307.i.i, i64 %468 + %470 = load i64, ptr %469, align 4 + %471 = and i64 %467, 63 + %472 = lshr i64 %470, %471 + %473 = trunc i64 %472 to i1 + br i1 %473, label %panic.i.i.i.i, label %__barray_check_bounds.exit1264.i.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1264.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %474 = shl nuw i64 1, %471 + %475 = xor i64 %474, %470 + store i64 %475, ptr %469, align 4 + %476 = getelementptr inbounds i64, ptr %.fca.0.extract306.i.i, i64 %467 + %477 = load i64, ptr %476, align 4 + %478 = add i64 %"3555_0.01288.i.i.i", %.fca.2.extract311.i.i + %479 = lshr i64 %478, 6 + %480 = getelementptr inbounds nuw i64, ptr %.fca.1.extract310.i.i, i64 %479 + %481 = load i64, ptr %480, align 4 + %482 = and i64 %478, 63 + %483 = lshr i64 %481, %482 + %484 = trunc i64 %483 to i1 + br i1 %484, label %panic.i1265.i.i.i, label %__barray_check_bounds.exit1268.i.i.i + +panic.i1265.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit1268.i.i.i: ; preds = %__barray_check_bounds.exit1264.i.i.i + %485 = shl nuw i64 1, %482 + %486 = xor i64 %481, %485 + store i64 %486, ptr %480, align 4 + %487 = getelementptr inbounds i64, ptr %.fca.0.extract309.i.i, i64 %478 + %488 = load i64, ptr %487, align 4 + tail call void @___rp(i64 %488, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %488, i64 %477, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %488, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %488, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %477, double 0xBFF921FB54442D18, double 0.000000e+00) + %489 = load i64, ptr %469, align 4 + %490 = lshr i64 %489, %471 + %491 = trunc i64 %490 to i1 + br i1 %491, label %__barray_check_bounds.exit1271.i.i.i, label %panic.i1269.i.i.i + +panic.i1269.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit1271.i.i.i: ; preds = %__barray_check_bounds.exit1268.i.i.i + %492 = xor i64 %489, %474 + store i64 %492, ptr %469, align 4 + store i64 %477, ptr %476, align 4 + %493 = load i64, ptr %480, align 4 + %494 = lshr i64 %493, %482 + %495 = trunc i64 %494 to i1 + br i1 %495, label %__barray_mask_return.exit1273.i.i.i, label %panic.i1272.i.i.i + +panic.i1272.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit1273.i.i.i: ; preds = %__barray_check_bounds.exit1271.i.i.i + %496 = xor i64 %493, %485 + store i64 %496, ptr %480, align 4 + store i64 %488, ptr %487, align 4 + %exitcond.not.i.i.i = icmp eq i64 %466, 4 + br i1 %exitcond.not.i.i.i, label %"__hugr__.$ripple_carry_adder$$n(4).2370.exit", label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$ripple_carry_adder$$n(4).2370.exit": ; preds = %__barray_mask_return.exit1273.i.i.i + tail call void @heap_free(ptr %464) + tail call void @___qfree(i64 %453) + %497 = load i64, ptr %93, align 4 + %498 = lshr i64 %497, %95 + %499 = trunc i64 %498 to i1 + br i1 %499, label %panic.i.i246, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" + +panic.i.i246: ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit": ; preds = %"__hugr__.$ripple_carry_adder$$n(4).2370.exit" + %500 = xor i64 %497, %98 + store i64 %500, ptr %93, align 4 + %501 = load i64, ptr %100, align 4 + %"037.fca.1.0.0.0.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } { i1 true, { { { ptr, ptr, i64 }, i64 }, i64 } poison }, ptr %.fca.0.extract309.i.i, 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert.i", ptr %.fca.1.extract310.i.i, 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert.i", i64 %.fca.2.extract311.i.i, 1, 0, 0, 2 + %"037.fca.1.0.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert.i", i64 1, 1, 0, 1 + %"037.fca.1.1.insert.i" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert.i", i64 %501, 1, 1 + br label %cond_3965_case_1.i + +cond_3965_case_1.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit", %cond_3965_case_1.i + %502 = phi { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } [ %508, %cond_3965_case_1.i ], [ %"037.fca.1.1.insert.i", %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit" ] + %503 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %502, 1 + %.fca.1.0.0.0.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 0 + %.fca.1.0.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 1 + %.fca.1.0.0.2.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 0, 2 + %.fca.1.0.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0, 1 + %.fca.1.1.extract.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 1 + %504 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %503, 0 + %505 = insertvalue { { ptr, ptr, i64 }, i64 } %504, ptr %.fca.1.0.0.0.extract.i, 0, 0 + %506 = insertvalue { { ptr, ptr, i64 }, i64 } %505, ptr %.fca.1.0.0.1.extract.i, 0, 1 + %507 = insertvalue { { ptr, ptr, i64 }, i64 } %506, i64 %.fca.1.0.0.2.extract.i, 0, 2 + tail call void @___qfree(i64 %.fca.1.1.extract.i) + %"3882_023.fca.1.insert.i" = insertvalue { { ptr, ptr, i64 }, i64 } %507, i64 %.fca.1.0.1.extract.i, 1 + %508 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %"3882_023.fca.1.insert.i") + %.fca.0.extract99.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %508, 0 + br i1 %.fca.0.extract99.i, label %cond_3965_case_1.i, label %"__hugr__.$discard_array$$n(4).3852.exit" + +"__hugr__.$discard_array$$n(4).3852.exit": ; preds = %cond_3965_case_1.i + %509 = tail call ptr @heap_alloc(i64 96) + %510 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %510, align 1 + %511 = load i64, ptr %83, align 4 + %512 = lshr i64 %511, %85 + %513 = trunc i64 %512 to i1 + br i1 %513, label %panic.i.i261, label %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + +panic.i.i261: ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262": ; preds = %"__hugr__.$discard_array$$n(4).3852.exit" + %514 = xor i64 %511, %88 + store i64 %514, ptr %83, align 4 + %515 = load i64, ptr %90, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %515) + tail call void @___qfree(i64 %515) + %516 = load i64, ptr %510, align 4 + %517 = trunc i64 %516 to i1 + br i1 %517, label %loop_body.i, label %panic.i.i211 + +out_of_bounds.i.i: ; preds = %loop_body.3.i + %518 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 1 + %.fca.1.extract93.4.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %518, 1 + %lazy_measure.4.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.4.i) + tail call void @___qfree(i64 %.fca.1.extract93.4.i) + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +panic.i.i211: ; preds = %cond_4002_case_1.3.i, %cond_4002_case_1.2.i, %cond_4002_case_1.1.i, %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %"__hugr__.$__next__$$t(qubit)$n(4).3884.exit262" + %"4016_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"4016_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.i", i1 undef, 2 + %519 = insertvalue { { ptr, ptr, i64 }, i64 } poison, ptr %.fca.0.extract306.i.i, 0, 0 + %520 = insertvalue { { ptr, ptr, i64 }, i64 } %519, ptr %.fca.1.extract307.i.i, 0, 1 + %521 = insertvalue { { ptr, ptr, i64 }, i64 } %520, i64 %.fca.2.extract308.i.i, 0, 2 + %522 = insertvalue { { ptr, ptr, i64 }, i64 } %521, i64 1, 1 + %523 = and i64 %516, -2 + store i64 %523, ptr %510, align 4 + store { i1, i64, i1 } %"4016_054.fca.2.insert.i", ptr %509, align 4 + %524 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %522) + %.fca.0.extract97.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 0 + br i1 %.fca.0.extract97.i, label %cond_4002_case_1.1.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.1.i: ; preds = %loop_body.i + %525 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %524, 1 + %.fca.1.extract93.1.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 1 + %lazy_measure.1.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.1.i) + tail call void @___qfree(i64 %.fca.1.extract93.1.i) + %526 = load i64, ptr %510, align 4 + %527 = and i64 %526, 2 + %.not.i212 = icmp eq i64 %527, 0 + br i1 %.not.i212, label %panic.i.i211, label %loop_body.1.i + +loop_body.1.i: ; preds = %cond_4002_case_1.1.i + %"4016_054.fca.1.insert.1.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.1.i, 1 + %"4016_054.fca.2.insert.1.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.1.i", i1 undef, 2 + %528 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %525, 0 + %529 = and i64 %526, -3 + store i64 %529, ptr %510, align 4 + %530 = getelementptr inbounds nuw i8, ptr %509, i64 24 + store { i1, i64, i1 } %"4016_054.fca.2.insert.1.i", ptr %530, align 4 + %531 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %528) + %.fca.0.extract97.1.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 0 + br i1 %.fca.0.extract97.1.i, label %cond_4002_case_1.2.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.2.i: ; preds = %loop_body.1.i + %532 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %531, 1 + %.fca.1.extract93.2.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 1 + %lazy_measure.2.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.2.i) + tail call void @___qfree(i64 %.fca.1.extract93.2.i) + %533 = load i64, ptr %510, align 4 + %534 = and i64 %533, 4 + %.not158.i = icmp eq i64 %534, 0 + br i1 %.not158.i, label %panic.i.i211, label %loop_body.2.i + +loop_body.2.i: ; preds = %cond_4002_case_1.2.i + %"4016_054.fca.1.insert.2.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.2.i, 1 + %"4016_054.fca.2.insert.2.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.2.i", i1 undef, 2 + %535 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %532, 0 + %536 = and i64 %533, -5 + store i64 %536, ptr %510, align 4 + %537 = getelementptr inbounds nuw i8, ptr %509, i64 48 + store { i1, i64, i1 } %"4016_054.fca.2.insert.2.i", ptr %537, align 4 + %538 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %535) + %.fca.0.extract97.2.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 0 + br i1 %.fca.0.extract97.2.i, label %cond_4002_case_1.3.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +cond_4002_case_1.3.i: ; preds = %loop_body.2.i + %539 = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %538, 1 + %.fca.1.extract93.3.i = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 1 + %lazy_measure.3.i = tail call i64 @___lazy_measure(i64 %.fca.1.extract93.3.i) + tail call void @___qfree(i64 %.fca.1.extract93.3.i) + %540 = load i64, ptr %510, align 4 + %541 = and i64 %540, 8 + %.not159.i = icmp eq i64 %541, 0 + br i1 %.not159.i, label %panic.i.i211, label %loop_body.3.i + +loop_body.3.i: ; preds = %cond_4002_case_1.3.i + %"4016_054.fca.1.insert.3.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.3.i, 1 + %"4016_054.fca.2.insert.3.i" = insertvalue { i1, i64, i1 } %"4016_054.fca.1.insert.3.i", i1 undef, 2 + %542 = extractvalue { { { ptr, ptr, i64 }, i64 }, i64 } %539, 0 + %543 = and i64 %540, -9 + store i64 %543, ptr %510, align 4 + %544 = getelementptr inbounds nuw i8, ptr %509, i64 72 + store { i1, i64, i1 } %"4016_054.fca.2.insert.3.i", ptr %544, align 4 + %545 = tail call fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %542) + %.fca.0.extract97.3.i = extractvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %545, 0 + br i1 %.fca.0.extract97.3.i, label %out_of_bounds.i.i, label %"__hugr__.$measure_array$$n(4).3981.exit" + +"__hugr__.$measure_array$$n(4).3981.exit": ; preds = %loop_body.i, %loop_body.1.i, %loop_body.2.i, %loop_body.3.i + %546 = tail call ptr @heap_alloc(i64 128) + %547 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %547, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(128) %546, i8 0, i64 128, i1 false) + %548 = load i64, ptr %510, align 4 + %549 = and i64 %548, 15 + store i64 %549, ptr %510, align 4 + %550 = icmp eq i64 %549, 0 + br i1 %550, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + %551 = tail call ptr @heap_alloc(i64 96) + %552 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %552, align 1 + %553 = load { i1, i64, i1 }, ptr %509, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %553, 0 + br i1 %.fca.0.extract118.i, label %cond_1420_case_1.i, label %cond_1420_case_0.i + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(4).3981.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1420_case_0.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %553, 2 + br label %cond_exit_1420.i + +cond_1420_case_1.i: ; preds = %__barray_check_none_borrowed.exit + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %553, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_1420.i + +cond_exit_1420.i: ; preds = %cond_1420_case_1.i, %cond_1420_case_0.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_1420_case_1.i ], [ undef, %cond_1420_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_1420_case_1.i ], [ %.fca.2.extract120.i, %cond_1420_case_0.i ] + %554 = load i64, ptr %547, align 4 + %555 = trunc i64 %554 to i1 + br i1 %555, label %panic.i.i213, label %cond_1417_case_1.i + +panic.i.i213: ; preds = %cond_exit_1420.i.3, %cond_exit_1420.i.2, %cond_exit_1420.i.1, %cond_exit_1420.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_1417_case_1.i: ; preds = %cond_exit_1420.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %553, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %556 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %.fca.2.0.extract.i = load i1, ptr %546, align 1 + store { i1, { i1, i64, i1 } } %556, ptr %546, align 4 + br i1 %.fca.2.0.extract.i, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + +cond_1416_case_1.i: ; preds = %cond_1417_case_1.i.3, %cond_1417_case_1.i.2, %cond_1417_case_1.i.1, %cond_1417_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit": ; preds = %cond_1417_case_1.i + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %551, align 4 + %557 = getelementptr inbounds nuw i8, ptr %509, i64 24 + %558 = load { i1, i64, i1 }, ptr %557, align 4 + %.fca.0.extract118.i.1 = extractvalue { i1, i64, i1 } %558, 0 + br i1 %.fca.0.extract118.i.1, label %cond_1420_case_1.i.1, label %cond_1420_case_0.i.1 + +cond_1420_case_0.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.2.extract120.i.1 = extractvalue { i1, i64, i1 } %558, 2 + br label %cond_exit_1420.i.1 + +cond_1420_case_1.i.1: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit" + %.fca.1.extract119.i.1 = extractvalue { i1, i64, i1 } %558, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.1) + br label %cond_exit_1420.i.1 + +cond_exit_1420.i.1: ; preds = %cond_1420_case_1.i.1, %cond_1420_case_0.i.1 + %"03.sroa.3.0.i.1" = phi i64 [ %.fca.1.extract119.i.1, %cond_1420_case_1.i.1 ], [ undef, %cond_1420_case_0.i.1 ] + %"03.sroa.6.0.i.1" = phi i1 [ undef, %cond_1420_case_1.i.1 ], [ %.fca.2.extract120.i.1, %cond_1420_case_0.i.1 ] + %559 = load i64, ptr %547, align 4 + %560 = and i64 %559, 2 + %.not = icmp eq i64 %560, 0 + br i1 %.not, label %cond_1417_case_1.i.1, label %panic.i.i213 + +cond_1417_case_1.i.1: ; preds = %cond_exit_1420.i.1 + %"16.fca.1.insert.i.1" = insertvalue { i1, i64, i1 } %558, i64 %"03.sroa.3.0.i.1", 1 + %"16.fca.2.insert.i.1" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.1", i1 %"03.sroa.6.0.i.1", 2 + %561 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.1", 1 + %562 = getelementptr i8, ptr %546, i64 32 + %.fca.2.0.extract.i.1 = load i1, ptr %562, align 1 + store { i1, { i1, i64, i1 } } %561, ptr %562, align 4 + br i1 %.fca.2.0.extract.i.1, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1": ; preds = %cond_1417_case_1.i.1 + %563 = getelementptr inbounds nuw i8, ptr %551, i64 24 + store { i1, i64, i1 } %"16.fca.2.insert.i.1", ptr %563, align 4 + %564 = getelementptr inbounds nuw i8, ptr %509, i64 48 + %565 = load { i1, i64, i1 }, ptr %564, align 4 + %.fca.0.extract118.i.2 = extractvalue { i1, i64, i1 } %565, 0 + br i1 %.fca.0.extract118.i.2, label %cond_1420_case_1.i.2, label %cond_1420_case_0.i.2 + +cond_1420_case_0.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.2.extract120.i.2 = extractvalue { i1, i64, i1 } %565, 2 + br label %cond_exit_1420.i.2 + +cond_1420_case_1.i.2: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.1" + %.fca.1.extract119.i.2 = extractvalue { i1, i64, i1 } %565, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.2) + br label %cond_exit_1420.i.2 + +cond_exit_1420.i.2: ; preds = %cond_1420_case_1.i.2, %cond_1420_case_0.i.2 + %"03.sroa.3.0.i.2" = phi i64 [ %.fca.1.extract119.i.2, %cond_1420_case_1.i.2 ], [ undef, %cond_1420_case_0.i.2 ] + %"03.sroa.6.0.i.2" = phi i1 [ undef, %cond_1420_case_1.i.2 ], [ %.fca.2.extract120.i.2, %cond_1420_case_0.i.2 ] + %566 = load i64, ptr %547, align 4 + %567 = and i64 %566, 4 + %.not270 = icmp eq i64 %567, 0 + br i1 %.not270, label %cond_1417_case_1.i.2, label %panic.i.i213 + +cond_1417_case_1.i.2: ; preds = %cond_exit_1420.i.2 + %"16.fca.1.insert.i.2" = insertvalue { i1, i64, i1 } %565, i64 %"03.sroa.3.0.i.2", 1 + %"16.fca.2.insert.i.2" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.2", i1 %"03.sroa.6.0.i.2", 2 + %568 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.2", 1 + %569 = getelementptr i8, ptr %546, i64 64 + %.fca.2.0.extract.i.2 = load i1, ptr %569, align 1 + store { i1, { i1, i64, i1 } } %568, ptr %569, align 4 + br i1 %.fca.2.0.extract.i.2, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2": ; preds = %cond_1417_case_1.i.2 + %570 = getelementptr inbounds nuw i8, ptr %551, i64 48 + store { i1, i64, i1 } %"16.fca.2.insert.i.2", ptr %570, align 4 + %571 = getelementptr inbounds nuw i8, ptr %509, i64 72 + %572 = load { i1, i64, i1 }, ptr %571, align 4 + %.fca.0.extract118.i.3 = extractvalue { i1, i64, i1 } %572, 0 + br i1 %.fca.0.extract118.i.3, label %cond_1420_case_1.i.3, label %cond_1420_case_0.i.3 + +cond_1420_case_0.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.2.extract120.i.3 = extractvalue { i1, i64, i1 } %572, 2 + br label %cond_exit_1420.i.3 + +cond_1420_case_1.i.3: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.2" + %.fca.1.extract119.i.3 = extractvalue { i1, i64, i1 } %572, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i.3) + br label %cond_exit_1420.i.3 + +cond_exit_1420.i.3: ; preds = %cond_1420_case_0.i.3, %cond_1420_case_1.i.3 + %"03.sroa.3.0.i.3" = phi i64 [ %.fca.1.extract119.i.3, %cond_1420_case_1.i.3 ], [ undef, %cond_1420_case_0.i.3 ] + %"03.sroa.6.0.i.3" = phi i1 [ undef, %cond_1420_case_1.i.3 ], [ %.fca.2.extract120.i.3, %cond_1420_case_0.i.3 ] + %573 = load i64, ptr %547, align 4 + %574 = and i64 %573, 8 + %.not271 = icmp eq i64 %574, 0 + br i1 %.not271, label %cond_1417_case_1.i.3, label %panic.i.i213 + +cond_1417_case_1.i.3: ; preds = %cond_exit_1420.i.3 + %"16.fca.1.insert.i.3" = insertvalue { i1, i64, i1 } %572, i64 %"03.sroa.3.0.i.3", 1 + %"16.fca.2.insert.i.3" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i.3", i1 %"03.sroa.6.0.i.3", 2 + %575 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i.3", 1 + %576 = getelementptr i8, ptr %546, i64 96 + %.fca.2.0.extract.i.3 = load i1, ptr %576, align 1 + store { i1, { i1, i64, i1 } } %575, ptr %576, align 4 + br i1 %.fca.2.0.extract.i.3, label %cond_1416_case_1.i, label %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + +"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3": ; preds = %cond_1417_case_1.i.3 + %577 = getelementptr inbounds nuw i8, ptr %551, i64 72 + store { i1, i64, i1 } %"16.fca.2.insert.i.3", ptr %577, align 4 + tail call void @heap_free(ptr nonnull %509) + tail call void @heap_free(ptr nonnull %510) + %578 = load i64, ptr %547, align 4 + %579 = and i64 %578, 15 + store i64 %579, ptr %547, align 4 + %580 = icmp eq i64 %579, 0 + br i1 %580, label %__barray_check_none_borrowed.exit220, label %mask_block_err.i218 + +__barray_check_none_borrowed.exit220: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + %581 = tail call ptr @heap_alloc(i64 96) + %582 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %582, align 1 + %583 = load { i1, { i1, i64, i1 } }, ptr %546, align 4 + %584 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %583) + %585 = extractvalue { { i1, i64, i1 } } %584, 0 + store { i1, i64, i1 } %585, ptr %581, align 4 + %586 = load { i1, { i1, i64, i1 } }, ptr %562, align 4 + %587 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %586) + %588 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %589 = extractvalue { { i1, i64, i1 } } %587, 0 + store { i1, i64, i1 } %589, ptr %588, align 4 + %590 = load { i1, { i1, i64, i1 } }, ptr %569, align 4 + %591 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %590) + %592 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %593 = extractvalue { { i1, i64, i1 } } %591, 0 + store { i1, i64, i1 } %593, ptr %592, align 4 + %594 = load { i1, { i1, i64, i1 } }, ptr %576, align 4 + %595 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %594) + %596 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %597 = extractvalue { { i1, i64, i1 } } %595, 0 + store { i1, i64, i1 } %597, ptr %596, align 4 + tail call void @heap_free(ptr nonnull %546) + tail call void @heap_free(ptr nonnull %547) + %598 = load i64, ptr %582, align 4 + %599 = trunc i64 %598 to i1 + br i1 %599, label %cond_exit_1043, label %__barray_mask_borrow.exit + +mask_block_err.i218: ; preds = %"__hugr__.$__copy_scan$$n(4)$t([Bool]+[Future(Bool)])$n(1).1434.exit.3" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +mask_block_err.i224: ; preds = %cond_exit_1043.3 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_none_borrowed.exit220 + %600 = or disjoint i64 %598, 1 + store i64 %600, ptr %582, align 4 + %601 = load { i1, i64, i1 }, ptr %581, align 4 + %.fca.0.extract127 = extractvalue { i1, i64, i1 } %601, 0 + br i1 %.fca.0.extract127, label %cond_1020_case_1, label %cond_exit_1043 + +cond_exit_1043: ; preds = %__barray_check_none_borrowed.exit220, %__barray_mask_borrow.exit, %cond_1020_case_1 + %602 = load i64, ptr %582, align 4 + %603 = and i64 %602, 2 + %.not274 = icmp eq i64 %603, 0 + br i1 %.not274, label %__barray_mask_borrow.exit.1, label %cond_exit_1043.1 + +__barray_mask_borrow.exit.1: ; preds = %cond_exit_1043 + %604 = or disjoint i64 %602, 2 + store i64 %604, ptr %582, align 4 + %605 = getelementptr inbounds nuw i8, ptr %581, i64 24 + %606 = load { i1, i64, i1 }, ptr %605, align 4 + %.fca.0.extract127.1 = extractvalue { i1, i64, i1 } %606, 0 + br i1 %.fca.0.extract127.1, label %cond_1020_case_1.1, label %cond_exit_1043.1 + +cond_1020_case_1.1: ; preds = %__barray_mask_borrow.exit.1 + %.fca.1.extract128.1 = extractvalue { i1, i64, i1 } %606, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.1) + br label %cond_exit_1043.1 + +cond_exit_1043.1: ; preds = %cond_1020_case_1.1, %__barray_mask_borrow.exit.1, %cond_exit_1043 + %607 = load i64, ptr %582, align 4 + %608 = and i64 %607, 4 + %.not275 = icmp eq i64 %608, 0 + br i1 %.not275, label %__barray_mask_borrow.exit.2, label %cond_exit_1043.2 + +__barray_mask_borrow.exit.2: ; preds = %cond_exit_1043.1 + %609 = or disjoint i64 %607, 4 + store i64 %609, ptr %582, align 4 + %610 = getelementptr inbounds nuw i8, ptr %581, i64 48 + %611 = load { i1, i64, i1 }, ptr %610, align 4 + %.fca.0.extract127.2 = extractvalue { i1, i64, i1 } %611, 0 + br i1 %.fca.0.extract127.2, label %cond_1020_case_1.2, label %cond_exit_1043.2 + +cond_1020_case_1.2: ; preds = %__barray_mask_borrow.exit.2 + %.fca.1.extract128.2 = extractvalue { i1, i64, i1 } %611, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.2) + br label %cond_exit_1043.2 + +cond_exit_1043.2: ; preds = %cond_1020_case_1.2, %__barray_mask_borrow.exit.2, %cond_exit_1043.1 + %612 = load i64, ptr %582, align 4 + %613 = and i64 %612, 8 + %.not276 = icmp eq i64 %613, 0 + br i1 %.not276, label %__barray_mask_borrow.exit.3, label %cond_exit_1043.3 + +__barray_mask_borrow.exit.3: ; preds = %cond_exit_1043.2 + %614 = or disjoint i64 %612, 8 + store i64 %614, ptr %582, align 4 + %615 = getelementptr inbounds nuw i8, ptr %581, i64 72 + %616 = load { i1, i64, i1 }, ptr %615, align 4 + %.fca.0.extract127.3 = extractvalue { i1, i64, i1 } %616, 0 + br i1 %.fca.0.extract127.3, label %cond_1020_case_1.3, label %cond_exit_1043.3 + +cond_1020_case_1.3: ; preds = %__barray_mask_borrow.exit.3 + %.fca.1.extract128.3 = extractvalue { i1, i64, i1 } %616, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128.3) + br label %cond_exit_1043.3 + +cond_exit_1043.3: ; preds = %cond_1020_case_1.3, %__barray_mask_borrow.exit.3, %cond_exit_1043.2 + %617 = load i64, ptr %582, align 4 + %618 = or i64 %617, -16 + store i64 %618, ptr %582, align 4 + %619 = icmp eq i64 %618, -1 + br i1 %619, label %loop_out, label %mask_block_err.i224 + +loop_out: ; preds = %cond_exit_1043.3 + tail call void @heap_free(ptr nonnull %581) + tail call void @heap_free(ptr nonnull %582) + %620 = load i64, ptr %552, align 4 + %621 = and i64 %620, 15 + store i64 %621, ptr %552, align 4 + %622 = icmp eq i64 %621, 0 + br i1 %622, label %__barray_check_none_borrowed.exit233, label %mask_block_err.i231 + +__barray_check_none_borrowed.exit233: ; preds = %loop_out + %623 = tail call ptr @heap_alloc(i64 4) + %624 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %624, align 1 + %625 = load { i1, i64, i1 }, ptr %551, align 4 + %626 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %625) + %627 = extractvalue { i1 } %626, 0 + store i1 %627, ptr %623, align 1 + %628 = load { i1, i64, i1 }, ptr %563, align 4 + %629 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %628) + %630 = getelementptr inbounds nuw i8, ptr %623, i64 1 + %631 = extractvalue { i1 } %629, 0 + store i1 %631, ptr %630, align 1 + %632 = load { i1, i64, i1 }, ptr %570, align 4 + %633 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %632) + %634 = getelementptr inbounds nuw i8, ptr %623, i64 2 + %635 = extractvalue { i1 } %633, 0 + store i1 %635, ptr %634, align 1 + %636 = load { i1, i64, i1 }, ptr %577, align 4 + %637 = tail call { i1 } @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %636) + %638 = getelementptr inbounds nuw i8, ptr %623, i64 3 + %639 = extractvalue { i1 } %637, 0 + store i1 %639, ptr %638, align 1 + tail call void @heap_free(ptr nonnull %551) + tail call void @heap_free(ptr nonnull %552) + %640 = load i64, ptr %624, align 4 + %641 = and i64 %640, 15 + store i64 %641, ptr %624, align 4 + %642 = icmp eq i64 %641, 0 + br i1 %642, label %__barray_check_none_borrowed.exit239, label %mask_block_err.i237 + +mask_block_err.i231: ; preds = %loop_out + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_1020_case_1: ; preds = %__barray_mask_borrow.exit + %.fca.1.extract128 = extractvalue { i1, i64, i1 } %601, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract128) + br label %cond_exit_1043 + +__barray_check_none_borrowed.exit239: ; preds = %__barray_check_none_borrowed.exit233 + %643 = extractvalue { i64, i64, i64 } %270, 2 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %644 = alloca [4 x i1], align 4 + store i32 0, ptr %644, align 4 + store i32 4, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %623, ptr %arr_ptr, align 8 + store ptr %644, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_b_reg.8EAD6F09.0, i64 18, ptr nonnull %out_arr_alloca) + %lazy_measure = call i64 @___lazy_measure(i64 %643) + call void @___qfree(i64 %643) + %read_bool = call i1 @___read_future_bool(i64 %lazy_measure) + call void @___dec_future_refcount(i64 %lazy_measure) + call void @print_bool(ptr nonnull @res_carry_out.3DB2874F.0, i64 19, i1 %read_bool) + ret void + +mask_block_err.i237: ; preds = %__barray_check_none_borrowed.exit233 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable +} + +define internal i1 @__hugr__.array.__read_bool.3.483({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_1464_case_1, label %cond_1464_case_0 + +cond_1464_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_1464 + +cond_1464_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_1464 + +cond_exit_1464: ; preds = %cond_1464_case_1, %cond_1464_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_1464_case_1 ], [ %.fca.2.extract, %cond_1464_case_0 ] + ret i1 %"03.0" +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).2059"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_1380_case_1, label %cond_1380_case_0 + +cond_1380_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_1380_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +define internal fastcc { ptr, ptr, i64 } @"__hugr__.$apply_bitstring$$n(4).2199"({ ptr, ptr, i64 } %0, ptr readonly captures(none) %1) unnamed_addr { +alloca_block: + %.fca.0.extract379 = extractvalue { ptr, ptr, i64 } %0, 0 + %.fca.1.extract380 = extractvalue { ptr, ptr, i64 } %0, 1 + %2 = load i64, ptr %1, align 4 + %.not = icmp eq i64 %2, 0 + br i1 %.not, label %cond_2283_case_0.i, label %cond_exit_1082 + +cond_2283_case_0.i: ; preds = %cond_2265_case_1.3, %cond_2265_case_1.2, %cond_2265_case_1.1, %alloca_block + tail call void @panic(i32 1001, ptr nonnull @e_Frozenarra.36077F52.0) + unreachable + +cond_2265_case_1.1: ; preds = %cond_exit_1082, %__barray_mask_return.exit + %3 = phi i64 [ %2, %cond_exit_1082 ], [ %.pre, %__barray_mask_return.exit ] + %4 = icmp ugt i64 %3, 1 + br i1 %4, label %cond_exit_1082.1, label %cond_2283_case_0.i + +cond_exit_1082.1: ; preds = %cond_2265_case_1.1 + %5 = getelementptr inbounds nuw i8, ptr %1, i64 9 + %6 = load i1, ptr %5, align 1 + br i1 %6, label %__barray_check_bounds.exit.1, label %cond_2265_case_1.2 + +__barray_check_bounds.exit.1: ; preds = %cond_exit_1082.1 + %7 = load i64, ptr %.fca.1.extract380, align 4 + %8 = and i64 %7, 2 + %.not402 = icmp eq i64 %8, 0 + br i1 %.not402, label %__barray_check_bounds.exit383.1, label %panic.i + +__barray_check_bounds.exit383.1: ; preds = %__barray_check_bounds.exit.1 + %9 = or disjoint i64 %7, 2 + store i64 %9, ptr %.fca.1.extract380, align 4 + %10 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 8 + %11 = load i64, ptr %10, align 4 + tail call void @___rp(i64 %11, double 0x400921FB54442D18, double 0.000000e+00) + %12 = load i64, ptr %.fca.1.extract380, align 4 + %13 = and i64 %12, 2 + %.not403 = icmp eq i64 %13, 0 + br i1 %.not403, label %panic.i384, label %__barray_mask_return.exit.1 + +__barray_mask_return.exit.1: ; preds = %__barray_check_bounds.exit383.1 + %14 = and i64 %12, -3 + store i64 %14, ptr %.fca.1.extract380, align 4 + store i64 %11, ptr %10, align 4 + %.pre398 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.2 + +cond_2265_case_1.2: ; preds = %__barray_mask_return.exit.1, %cond_exit_1082.1 + %15 = phi i64 [ %.pre398, %__barray_mask_return.exit.1 ], [ %3, %cond_exit_1082.1 ] + %16 = icmp ugt i64 %15, 2 + br i1 %16, label %cond_exit_1082.2, label %cond_2283_case_0.i + +cond_exit_1082.2: ; preds = %cond_2265_case_1.2 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 10 + %18 = load i1, ptr %17, align 1 + br i1 %18, label %__barray_check_bounds.exit.2, label %cond_2265_case_1.3 + +__barray_check_bounds.exit.2: ; preds = %cond_exit_1082.2 + %19 = load i64, ptr %.fca.1.extract380, align 4 + %20 = and i64 %19, 4 + %.not404 = icmp eq i64 %20, 0 + br i1 %.not404, label %__barray_check_bounds.exit383.2, label %panic.i + +__barray_check_bounds.exit383.2: ; preds = %__barray_check_bounds.exit.2 + %21 = or disjoint i64 %19, 4 + store i64 %21, ptr %.fca.1.extract380, align 4 + %22 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 16 + %23 = load i64, ptr %22, align 4 + tail call void @___rp(i64 %23, double 0x400921FB54442D18, double 0.000000e+00) + %24 = load i64, ptr %.fca.1.extract380, align 4 + %25 = and i64 %24, 4 + %.not405 = icmp eq i64 %25, 0 + br i1 %.not405, label %panic.i384, label %__barray_mask_return.exit.2 + +__barray_mask_return.exit.2: ; preds = %__barray_check_bounds.exit383.2 + %26 = and i64 %24, -5 + store i64 %26, ptr %.fca.1.extract380, align 4 + store i64 %23, ptr %22, align 4 + %.pre400 = load i64, ptr %1, align 4 + br label %cond_2265_case_1.3 + +cond_2265_case_1.3: ; preds = %__barray_mask_return.exit.2, %cond_exit_1082.2 + %27 = phi i64 [ %.pre400, %__barray_mask_return.exit.2 ], [ %15, %cond_exit_1082.2 ] + %28 = icmp ugt i64 %27, 3 + br i1 %28, label %cond_exit_1082.3, label %cond_2283_case_0.i + +cond_exit_1082.3: ; preds = %cond_2265_case_1.3 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 11 + %30 = load i1, ptr %29, align 1 + br i1 %30, label %__barray_check_bounds.exit.3, label %cond_exit_2250 + +__barray_check_bounds.exit.3: ; preds = %cond_exit_1082.3 + %31 = load i64, ptr %.fca.1.extract380, align 4 + %32 = and i64 %31, 8 + %.not406 = icmp eq i64 %32, 0 + br i1 %.not406, label %__barray_check_bounds.exit383.3, label %panic.i + +__barray_check_bounds.exit383.3: ; preds = %__barray_check_bounds.exit.3 + %33 = or disjoint i64 %31, 8 + store i64 %33, ptr %.fca.1.extract380, align 4 + %34 = getelementptr inbounds nuw i8, ptr %.fca.0.extract379, i64 24 + %35 = load i64, ptr %34, align 4 + tail call void @___rp(i64 %35, double 0x400921FB54442D18, double 0.000000e+00) + %36 = load i64, ptr %.fca.1.extract380, align 4 + %37 = and i64 %36, 8 + %.not407 = icmp eq i64 %37, 0 + br i1 %.not407, label %panic.i384, label %__barray_mask_return.exit.3 + +__barray_mask_return.exit.3: ; preds = %__barray_check_bounds.exit383.3 + %38 = and i64 %36, -9 + store i64 %38, ptr %.fca.1.extract380, align 4 + store i64 %35, ptr %34, align 4 + br label %cond_exit_2250 + +cond_exit_2250: ; preds = %__barray_mask_return.exit.3, %cond_exit_1082.3 + %"2212_423.fca.2.insert" = insertvalue { ptr, ptr, i64 } %0, i64 0, 2 + ret { ptr, ptr, i64 } %"2212_423.fca.2.insert" + +cond_exit_1082: ; preds = %alloca_block + %39 = getelementptr inbounds nuw i8, ptr %1, i64 8 + %40 = load i1, ptr %39, align 1 + br i1 %40, label %__barray_check_bounds.exit, label %cond_2265_case_1.1 + +__barray_check_bounds.exit: ; preds = %cond_exit_1082 + %41 = load i64, ptr %.fca.1.extract380, align 4 + %42 = trunc i64 %41 to i1 + br i1 %42, label %panic.i, label %__barray_check_bounds.exit383 + +panic.i: ; preds = %__barray_check_bounds.exit.3, %__barray_check_bounds.exit.2, %__barray_check_bounds.exit.1, %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit383: ; preds = %__barray_check_bounds.exit + %43 = or disjoint i64 %41, 1 + store i64 %43, ptr %.fca.1.extract380, align 4 + %44 = load i64, ptr %.fca.0.extract379, align 4 + tail call void @___rp(i64 %44, double 0x400921FB54442D18, double 0.000000e+00) + %45 = load i64, ptr %.fca.1.extract380, align 4 + %46 = trunc i64 %45 to i1 + br i1 %46, label %__barray_mask_return.exit, label %panic.i384 + +panic.i384: ; preds = %__barray_check_bounds.exit383.3, %__barray_check_bounds.exit383.2, %__barray_check_bounds.exit383.1, %__barray_check_bounds.exit383 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit: ; preds = %__barray_check_bounds.exit383 + %47 = and i64 %45, -2 + store i64 %47, ptr %.fca.1.extract380, align 4 + store i64 %44, ptr %.fca.0.extract379, align 4 + %.pre = load i64, ptr %1, align 4 + br label %cond_2265_case_1.1 +} + +define internal fastcc { i64, i64, i64 } @__hugr__.ccx.1244(i64 %0, i64 %1, i64 %2) unnamed_addr { +alloca_block: + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %1, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %1, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %2, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %2, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rz(i64 %2, double 0x3FE921FB54442D18) + %mrv.i.i = insertvalue { i64, i64, i64 } poison, i64 %0, 0 + %mrv39.i.i = insertvalue { i64, i64, i64 } %mrv.i.i, i64 %1, 1 + tail call void @___rp(i64 %2, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %2, double 0x400921FB54442D18) + %mrv33.i = insertvalue { i64, i64, i64 } %mrv39.i.i, i64 %2, 2 + tail call void @___rz(i64 %1, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %1, double 0xBFE921FB54442D18) + tail call void @___rz(i64 %0, double 0x3FE921FB54442D18) + tail call void @___rp(i64 %0, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %0, i64 %1, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %0, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %0, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %1, double 0xBFF921FB54442D18, double 0.000000e+00) + ret { i64, i64, i64 } %mrv33.i +} + +define internal fastcc { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } @"__hugr__.$__next__$$t(qubit)$n(4).3884"({ { ptr, ptr, i64 }, i64 } %0) unnamed_addr { +alloca_block: + %.fca.1.extract97 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 1 + %1 = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0 + %.fca.0.extract80 = extractvalue { ptr, ptr, i64 } %1, 0 + %.fca.1.extract81 = extractvalue { ptr, ptr, i64 } %1, 1 + %.fca.2.extract82 = extractvalue { ptr, ptr, i64 } %1, 2 + %2 = icmp slt i64 %.fca.1.extract97, 4 + br i1 %2, label %26, label %4 + +3: ; preds = %__barray_check_all_borrowed.exit, %__barray_mask_borrow.exit + %"02.sroa.3.0" = phi ptr [ %.fca.1.0.0.0.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.6.0" = phi ptr [ %.fca.1.0.0.1.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.9.0" = phi i64 [ %.fca.1.0.0.2.extract, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.12.0" = phi i64 [ %27, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"02.sroa.15.0" = phi i64 [ %39, %__barray_mask_borrow.exit ], [ poison, %__barray_check_all_borrowed.exit ] + %"037.fca.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } poison, i1 %2, 0 + %"037.fca.1.0.0.0.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.0.insert", ptr %"02.sroa.3.0", 1, 0, 0, 0 + %"037.fca.1.0.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.0.insert", ptr %"02.sroa.6.0", 1, 0, 0, 1 + %"037.fca.1.0.0.2.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.1.insert", i64 %"02.sroa.9.0", 1, 0, 0, 2 + %"037.fca.1.0.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.0.2.insert", i64 %"02.sroa.12.0", 1, 0, 1 + %"037.fca.1.1.insert" = insertvalue { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.0.1.insert", i64 %"02.sroa.15.0", 1, 1 + ret { i1, { { { ptr, ptr, i64 }, i64 }, i64 } } %"037.fca.1.1.insert" + +4: ; preds = %alloca_block + %5 = lshr i64 %.fca.2.extract82, 6 + %6 = getelementptr i64, ptr %.fca.1.extract81, i64 %5 + %7 = load i64, ptr %6, align 4 + %8 = and i64 %.fca.2.extract82, 63 + %9 = sub nuw nsw i64 64, %8 + %10 = lshr i64 -1, %9 + %11 = icmp eq i64 %8, 0 + %12 = select i1 %11, i64 0, i64 %10 + %13 = or i64 %7, %12 + store i64 %13, ptr %6, align 4 + %last_valid.i = add i64 %.fca.2.extract82, 3 + %14 = lshr i64 %last_valid.i, 6 + %15 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %14 + %16 = load i64, ptr %15, align 4 + %17 = and i64 %last_valid.i, 63 + %18 = shl nsw i64 -2, %17 + %19 = icmp eq i64 %17, 63 + %20 = select i1 %19, i64 0, i64 %18 + %21 = or i64 %16, %20 + store i64 %21, ptr %15, align 4 + %reass.sub.i = sub nsw i64 %14, %5 + %.not.i = icmp eq i64 %reass.sub.i, -1 + br i1 %.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +22: ; preds = %mask_block_ok.i + %23 = add nuw i64 %.02.i, 1 + %exitcond.not.i = icmp eq i64 %.02.i, %reass.sub.i + br i1 %exitcond.not.i, label %__barray_check_all_borrowed.exit, label %mask_block_ok.i + +mask_block_ok.i: ; preds = %4, %22 + %.02.i = phi i64 [ %23, %22 ], [ 0, %4 ] + %gep.i = getelementptr i64, ptr %6, i64 %.02.i + %24 = load i64, ptr %gep.i, align 4 + %25 = icmp eq i64 %24, -1 + br i1 %25, label %22, label %mask_block_err.i + +mask_block_err.i: ; preds = %mask_block_ok.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_all_borrowed.exit: ; preds = %22, %4 + tail call void @heap_free(ptr %.fca.0.extract80) + tail call void @heap_free(ptr nonnull %.fca.1.extract81) + br label %3 + +26: ; preds = %alloca_block + %27 = add nsw i64 %.fca.1.extract97, 1 + %28 = icmp ult i64 %.fca.1.extract97, 4 + br i1 %28, label %__barray_check_bounds.exit, label %out_of_bounds.i + +out_of_bounds.i: ; preds = %26 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit: ; preds = %26 + %29 = add i64 %.fca.2.extract82, %.fca.1.extract97 + %30 = lshr i64 %29, 6 + %31 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81, i64 %30 + %32 = load i64, ptr %31, align 4 + %33 = and i64 %29, 63 + %34 = lshr i64 %32, %33 + %35 = trunc i64 %34 to i1 + br i1 %35, label %panic.i, label %__barray_mask_borrow.exit + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit: ; preds = %__barray_check_bounds.exit + %36 = shl nuw i64 1, %33 + %37 = xor i64 %32, %36 + store i64 %37, ptr %31, align 4 + %38 = getelementptr inbounds i64, ptr %.fca.0.extract80, i64 %29 + %39 = load i64, ptr %38, align 4 + %.fca.1.0.0.0.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 0 + %.fca.1.0.0.1.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 1 + %.fca.1.0.0.2.extract = extractvalue { { ptr, ptr, i64 }, i64 } %0, 0, 2 + br label %3 +} + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_sol new file mode 100644 index 000000000..12ac202e7 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-discard_qb_array/discard_qb_array_x86_64-windows-msvc_sol @@ -0,0 +1,295 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___qfree(i64) local_unnamed_addr + +declare void @heap_free(ptr) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_213_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_213_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + br label %__barray_check_bounds.exit.i.i.i + +43: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + %44 = lshr i64 %.fca.1.0.0.2.extract.i.i.i, 6 + %45 = getelementptr i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %44 + %46 = load i64, ptr %45, align 4 + %47 = and i64 %.fca.1.0.0.2.extract.i.i.i, 63 + %48 = sub nuw nsw i64 64, %47 + %49 = lshr i64 -1, %48 + %50 = icmp eq i64 %47, 0 + %51 = select i1 %50, i64 0, i64 %49 + %52 = or i64 %46, %51 + store i64 %52, ptr %45, align 4 + %last_valid.i.i.i.i = add i64 %.fca.1.0.0.2.extract.i.i.i, 9 + %53 = lshr i64 %last_valid.i.i.i.i, 6 + %54 = getelementptr inbounds nuw i64, ptr %.fca.1.0.0.1.extract.i.i.i, i64 %53 + %55 = load i64, ptr %54, align 4 + %56 = and i64 %last_valid.i.i.i.i, 63 + %57 = shl nsw i64 -2, %56 + %58 = icmp eq i64 %56, 63 + %59 = select i1 %58, i64 0, i64 %57 + %60 = or i64 %55, %59 + store i64 %60, ptr %54, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %53, %44 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +61: ; preds = %mask_block_ok.i.i.i.i + %62 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %__hugr__.main.1.exit, label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %43, %61 + %.02.i.i.i.i = phi i64 [ %62, %61 ], [ 0, %43 ] + %gep.i.i.i.i = getelementptr i64, ptr %45, i64 %.02.i.i.i.i + %63 = load i64, ptr %gep.i.i.i.i, align 4 + %64 = icmp eq i64 %63, -1 + br i1 %64, label %61, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i", %cond_exit_20.i.9 + %.fca.2.extract82.i185.i.i = phi i64 [ 0, %cond_exit_20.i.9 ], [ %.fca.1.0.0.2.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.1.extract81.i184.i.i = phi ptr [ %2, %cond_exit_20.i.9 ], [ %.fca.1.0.0.1.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.fca.0.extract80.i183.i.i = phi ptr [ %1, %cond_exit_20.i.9 ], [ %.fca.1.0.0.0.extract.i.i.i, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %"294_0.0182.i.i" = phi i64 [ 0, %cond_exit_20.i.9 ], [ %72, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %.pn181.i.i = phi { { ptr, ptr, i64 }, i64 } [ %42, %cond_exit_20.i.9 ], [ %80, %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" ] + %65 = add i64 %"294_0.0182.i.i", %.fca.2.extract82.i185.i.i + %66 = lshr i64 %65, 6 + %67 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i184.i.i, i64 %66 + %68 = load i64, ptr %67, align 4 + %69 = and i64 %65, 63 + %70 = lshr i64 %68, %69 + %71 = trunc i64 %70 to i1 + br i1 %71, label %panic.i.i.i.i, label %"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i" + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +"__hugr__.$ArrayIter.__next__$$t(qubit)$n(10).302.exit.thread.i.i": ; preds = %__barray_check_bounds.exit.i.i.i + %72 = add nuw nsw i64 %"294_0.0182.i.i", 1 + %73 = shl nuw i64 1, %69 + %74 = xor i64 %73, %68 + store i64 %74, ptr %67, align 4 + %75 = getelementptr inbounds i64, ptr %.fca.0.extract80.i183.i.i, i64 %65 + %76 = load i64, ptr %75, align 4 + %.fca.1.0.0.0.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 0 + %.fca.1.0.0.1.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 1 + %.fca.1.0.0.2.extract.i.i.i = extractvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, 0, 2 + %77 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn181.i.i, i64 %72, 1 + %78 = insertvalue { { ptr, ptr, i64 }, i64 } %77, ptr %.fca.1.0.0.0.extract.i.i.i, 0, 0 + %79 = insertvalue { { ptr, ptr, i64 }, i64 } %78, ptr %.fca.1.0.0.1.extract.i.i.i, 0, 1 + %80 = insertvalue { { ptr, ptr, i64 }, i64 } %79, i64 %.fca.1.0.0.2.extract.i.i.i, 0, 2 + tail call void @___qfree(i64 %76) + %.not.i.i = icmp eq i64 %"294_0.0182.i.i", 9 + br i1 %.not.i.i, label %43, label %__barray_check_bounds.exit.i.i.i + +__hugr__.main.1.exit: ; preds = %61, %43 + tail call void @heap_free(ptr %.fca.1.0.0.0.extract.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.0.0.1.extract.i.i.i) + %81 = tail call i64 @teardown() + ret i64 %81 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_sol new file mode 100644 index 000000000..c88ee2dbf --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-flip_some/flip_some_x86_64-windows-msvc_sol @@ -0,0 +1,109 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_c0.7C14CD6E.0 = private constant [13 x i8] c"\0CUSER:BOOL:c0" +@res_c1.1F7A6571.0 = private constant [13 x i8] c"\0CUSER:BOOL:c1" +@res_c2.60825383.0 = private constant [13 x i8] c"\0CUSER:BOOL:c2" +@res_c3.B223E16D.0 = private constant [13 x i8] c"\0CUSER:BOOL:c3" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_40_case_0.i.i, label %__hugr__.__tk2_qalloc.36.exit.i + +cond_40_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.36.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i101.i = tail call i64 @___qalloc() + %not_max.not.not.i102.i = icmp eq i64 %qalloc.i101.i, -1 + br i1 %not_max.not.not.i102.i, label %cond_54_case_0.i.i, label %__hugr__.__tk2_qalloc.50.exit.i + +cond_54_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.50.exit.i: ; preds = %__hugr__.__tk2_qalloc.36.exit.i + tail call void @___reset(i64 %qalloc.i101.i) + %qalloc.i103.i = tail call i64 @___qalloc() + %not_max.not.not.i104.i = icmp eq i64 %qalloc.i103.i, -1 + br i1 %not_max.not.not.i104.i, label %cond_68_case_0.i.i, label %__hugr__.__tk2_qalloc.64.exit.i + +cond_68_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.64.exit.i: ; preds = %__hugr__.__tk2_qalloc.50.exit.i + tail call void @___reset(i64 %qalloc.i103.i) + tail call void @___rp(i64 %qalloc.i103.i, double 0x400921FB54442D18, double 0.000000e+00) + %qalloc.i105.i = tail call i64 @___qalloc() + %not_max.not.not.i106.i = icmp eq i64 %qalloc.i105.i, -1 + br i1 %not_max.not.not.i106.i, label %cond_82_case_0.i.i, label %__hugr__.main.1.exit + +cond_82_case_0.i.i: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.64.exit.i + tail call void @___reset(i64 %qalloc.i105.i) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c0.7C14CD6E.0, i64 12, i1 %read_bool.i) + %lazy_measure22.i = tail call i64 @___lazy_measure(i64 %qalloc.i101.i) + tail call void @___qfree(i64 %qalloc.i101.i) + %read_bool35.i = tail call i1 @___read_future_bool(i64 %lazy_measure22.i) + tail call void @___dec_future_refcount(i64 %lazy_measure22.i) + tail call void @print_bool(ptr nonnull @res_c1.1F7A6571.0, i64 12, i1 %read_bool35.i) + %lazy_measure44.i = tail call i64 @___lazy_measure(i64 %qalloc.i103.i) + tail call void @___qfree(i64 %qalloc.i103.i) + %read_bool57.i = tail call i1 @___read_future_bool(i64 %lazy_measure44.i) + tail call void @___dec_future_refcount(i64 %lazy_measure44.i) + tail call void @print_bool(ptr nonnull @res_c2.60825383.0, i64 12, i1 %read_bool57.i) + tail call void @___rp(i64 %qalloc.i105.i, double 0x400921FB54442D18, double 0.000000e+00) + %lazy_measure67.i = tail call i64 @___lazy_measure(i64 %qalloc.i105.i) + tail call void @___qfree(i64 %qalloc.i105.i) + %read_bool80.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i) + tail call void @print_bool(ptr nonnull @res_c3.B223E16D.0, i64 12, i1 %read_bool80.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_sol new file mode 100644 index 000000000..802c6f720 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-measure_qb_array/measure_qb_array_x86_64-windows-msvc_sol @@ -0,0 +1,637 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @heap_free(ptr) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %1 = tail call ptr @heap_alloc(i64 80) + %2 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %2, align 1 + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i + +cond_207_case_0.i.i: ; preds = %cond_exit_20.i.8, %cond_exit_20.i.7, %cond_exit_20.i.6, %cond_exit_20.i.5, %cond_exit_20.i.4, %cond_exit_20.i.3, %cond_exit_20.i.2, %cond_exit_20.i.1, %cond_exit_20.i, %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %3 = load i64, ptr %2, align 4 + %4 = trunc i64 %3 to i1 + br i1 %4, label %cond_exit_20.i, label %panic.i.i + +panic.i.i: ; preds = %__barray_check_bounds.exit.i.9, %__barray_check_bounds.exit.i.8, %__barray_check_bounds.exit.i.7, %__barray_check_bounds.exit.i.6, %__barray_check_bounds.exit.i.5, %__barray_check_bounds.exit.i.4, %__barray_check_bounds.exit.i.3, %__barray_check_bounds.exit.i.2, %__barray_check_bounds.exit.i.1, %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20.i: ; preds = %__barray_check_bounds.exit.i + %5 = and i64 %3, -2 + store i64 %5, ptr %2, align 4 + store i64 %qalloc.i.i, ptr %1, align 4 + %qalloc.i.i.1 = tail call i64 @___qalloc() + %not_max.not.not.i.i.1 = icmp eq i64 %qalloc.i.i.1, -1 + br i1 %not_max.not.not.i.i.1, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.1 + +__barray_check_bounds.exit.i.1: ; preds = %cond_exit_20.i + tail call void @___reset(i64 %qalloc.i.i.1) + %6 = load i64, ptr %2, align 4 + %7 = and i64 %6, 2 + %.not = icmp eq i64 %7, 0 + br i1 %.not, label %panic.i.i, label %cond_exit_20.i.1 + +cond_exit_20.i.1: ; preds = %__barray_check_bounds.exit.i.1 + %8 = and i64 %6, -3 + store i64 %8, ptr %2, align 4 + %9 = getelementptr inbounds nuw i8, ptr %1, i64 8 + store i64 %qalloc.i.i.1, ptr %9, align 4 + %qalloc.i.i.2 = tail call i64 @___qalloc() + %not_max.not.not.i.i.2 = icmp eq i64 %qalloc.i.i.2, -1 + br i1 %not_max.not.not.i.i.2, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.2 + +__barray_check_bounds.exit.i.2: ; preds = %cond_exit_20.i.1 + tail call void @___reset(i64 %qalloc.i.i.2) + %10 = load i64, ptr %2, align 4 + %11 = and i64 %10, 4 + %.not1 = icmp eq i64 %11, 0 + br i1 %.not1, label %panic.i.i, label %cond_exit_20.i.2 + +cond_exit_20.i.2: ; preds = %__barray_check_bounds.exit.i.2 + %12 = and i64 %10, -5 + store i64 %12, ptr %2, align 4 + %13 = getelementptr inbounds nuw i8, ptr %1, i64 16 + store i64 %qalloc.i.i.2, ptr %13, align 4 + %qalloc.i.i.3 = tail call i64 @___qalloc() + %not_max.not.not.i.i.3 = icmp eq i64 %qalloc.i.i.3, -1 + br i1 %not_max.not.not.i.i.3, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.3 + +__barray_check_bounds.exit.i.3: ; preds = %cond_exit_20.i.2 + tail call void @___reset(i64 %qalloc.i.i.3) + %14 = load i64, ptr %2, align 4 + %15 = and i64 %14, 8 + %.not2 = icmp eq i64 %15, 0 + br i1 %.not2, label %panic.i.i, label %cond_exit_20.i.3 + +cond_exit_20.i.3: ; preds = %__barray_check_bounds.exit.i.3 + %16 = and i64 %14, -9 + store i64 %16, ptr %2, align 4 + %17 = getelementptr inbounds nuw i8, ptr %1, i64 24 + store i64 %qalloc.i.i.3, ptr %17, align 4 + %qalloc.i.i.4 = tail call i64 @___qalloc() + %not_max.not.not.i.i.4 = icmp eq i64 %qalloc.i.i.4, -1 + br i1 %not_max.not.not.i.i.4, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.4 + +__barray_check_bounds.exit.i.4: ; preds = %cond_exit_20.i.3 + tail call void @___reset(i64 %qalloc.i.i.4) + %18 = load i64, ptr %2, align 4 + %19 = and i64 %18, 16 + %.not3 = icmp eq i64 %19, 0 + br i1 %.not3, label %panic.i.i, label %cond_exit_20.i.4 + +cond_exit_20.i.4: ; preds = %__barray_check_bounds.exit.i.4 + %20 = and i64 %18, -17 + store i64 %20, ptr %2, align 4 + %21 = getelementptr inbounds nuw i8, ptr %1, i64 32 + store i64 %qalloc.i.i.4, ptr %21, align 4 + %qalloc.i.i.5 = tail call i64 @___qalloc() + %not_max.not.not.i.i.5 = icmp eq i64 %qalloc.i.i.5, -1 + br i1 %not_max.not.not.i.i.5, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.5 + +__barray_check_bounds.exit.i.5: ; preds = %cond_exit_20.i.4 + tail call void @___reset(i64 %qalloc.i.i.5) + %22 = load i64, ptr %2, align 4 + %23 = and i64 %22, 32 + %.not4 = icmp eq i64 %23, 0 + br i1 %.not4, label %panic.i.i, label %cond_exit_20.i.5 + +cond_exit_20.i.5: ; preds = %__barray_check_bounds.exit.i.5 + %24 = and i64 %22, -33 + store i64 %24, ptr %2, align 4 + %25 = getelementptr inbounds nuw i8, ptr %1, i64 40 + store i64 %qalloc.i.i.5, ptr %25, align 4 + %qalloc.i.i.6 = tail call i64 @___qalloc() + %not_max.not.not.i.i.6 = icmp eq i64 %qalloc.i.i.6, -1 + br i1 %not_max.not.not.i.i.6, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.6 + +__barray_check_bounds.exit.i.6: ; preds = %cond_exit_20.i.5 + tail call void @___reset(i64 %qalloc.i.i.6) + %26 = load i64, ptr %2, align 4 + %27 = and i64 %26, 64 + %.not5 = icmp eq i64 %27, 0 + br i1 %.not5, label %panic.i.i, label %cond_exit_20.i.6 + +cond_exit_20.i.6: ; preds = %__barray_check_bounds.exit.i.6 + %28 = and i64 %26, -65 + store i64 %28, ptr %2, align 4 + %29 = getelementptr inbounds nuw i8, ptr %1, i64 48 + store i64 %qalloc.i.i.6, ptr %29, align 4 + %qalloc.i.i.7 = tail call i64 @___qalloc() + %not_max.not.not.i.i.7 = icmp eq i64 %qalloc.i.i.7, -1 + br i1 %not_max.not.not.i.i.7, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.7 + +__barray_check_bounds.exit.i.7: ; preds = %cond_exit_20.i.6 + tail call void @___reset(i64 %qalloc.i.i.7) + %30 = load i64, ptr %2, align 4 + %31 = and i64 %30, 128 + %.not6 = icmp eq i64 %31, 0 + br i1 %.not6, label %panic.i.i, label %cond_exit_20.i.7 + +cond_exit_20.i.7: ; preds = %__barray_check_bounds.exit.i.7 + %32 = and i64 %30, -129 + store i64 %32, ptr %2, align 4 + %33 = getelementptr inbounds nuw i8, ptr %1, i64 56 + store i64 %qalloc.i.i.7, ptr %33, align 4 + %qalloc.i.i.8 = tail call i64 @___qalloc() + %not_max.not.not.i.i.8 = icmp eq i64 %qalloc.i.i.8, -1 + br i1 %not_max.not.not.i.i.8, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.8 + +__barray_check_bounds.exit.i.8: ; preds = %cond_exit_20.i.7 + tail call void @___reset(i64 %qalloc.i.i.8) + %34 = load i64, ptr %2, align 4 + %35 = and i64 %34, 256 + %.not7 = icmp eq i64 %35, 0 + br i1 %.not7, label %panic.i.i, label %cond_exit_20.i.8 + +cond_exit_20.i.8: ; preds = %__barray_check_bounds.exit.i.8 + %36 = and i64 %34, -257 + store i64 %36, ptr %2, align 4 + %37 = getelementptr inbounds nuw i8, ptr %1, i64 64 + store i64 %qalloc.i.i.8, ptr %37, align 4 + %qalloc.i.i.9 = tail call i64 @___qalloc() + %not_max.not.not.i.i.9 = icmp eq i64 %qalloc.i.i.9, -1 + br i1 %not_max.not.not.i.i.9, label %cond_207_case_0.i.i, label %__barray_check_bounds.exit.i.9 + +__barray_check_bounds.exit.i.9: ; preds = %cond_exit_20.i.8 + tail call void @___reset(i64 %qalloc.i.i.9) + %38 = load i64, ptr %2, align 4 + %39 = and i64 %38, 512 + %.not8 = icmp eq i64 %39, 0 + br i1 %.not8, label %panic.i.i, label %cond_exit_20.i.9 + +cond_exit_20.i.9: ; preds = %__barray_check_bounds.exit.i.9 + %40 = and i64 %38, -513 + store i64 %40, ptr %2, align 4 + %41 = getelementptr inbounds nuw i8, ptr %1, i64 72 + store i64 %qalloc.i.i.9, ptr %41, align 4 + %"116.fca.0.insert.i" = insertvalue { ptr, ptr, i64 } poison, ptr %1, 0 + %"116.fca.1.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.0.insert.i", ptr %2, 1 + %"116.fca.2.insert.i" = insertvalue { ptr, ptr, i64 } %"116.fca.1.insert.i", i64 0, 2 + %42 = load i64, ptr %2, align 4 + %43 = trunc i64 %42 to i1 + br i1 %43, label %panic.i238.i, label %__barray_mask_borrow.exit.i + +panic.i238.i: ; preds = %cond_exit_20.i.9 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit.i: ; preds = %cond_exit_20.i.9 + %44 = or disjoint i64 %42, 1 + store i64 %44, ptr %2, align 4 + %45 = load i64, ptr %1, align 4 + tail call void @___rp(i64 %45, double 0x400921FB54442D18, double 0.000000e+00) + %46 = load i64, ptr %2, align 4 + %47 = trunc i64 %46 to i1 + br i1 %47, label %__barray_mask_return.exit240.i, label %panic.i239.i + +panic.i239.i: ; preds = %__barray_mask_borrow.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit240.i: ; preds = %__barray_mask_borrow.exit.i + %48 = and i64 %46, -2 + store i64 %48, ptr %2, align 4 + store i64 %45, ptr %1, align 4 + %49 = load i64, ptr %2, align 4 + %50 = and i64 %49, 4 + %.not.i = icmp eq i64 %50, 0 + br i1 %.not.i, label %__barray_mask_borrow.exit242.i, label %panic.i241.i + +panic.i241.i: ; preds = %__barray_mask_return.exit240.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit242.i: ; preds = %__barray_mask_return.exit240.i + %51 = or disjoint i64 %49, 4 + store i64 %51, ptr %2, align 4 + %52 = load i64, ptr %13, align 4 + tail call void @___rp(i64 %52, double 0x400921FB54442D18, double 0.000000e+00) + %53 = load i64, ptr %2, align 4 + %54 = and i64 %53, 4 + %.not268.i = icmp eq i64 %54, 0 + br i1 %.not268.i, label %panic.i243.i, label %__barray_mask_return.exit244.i + +panic.i243.i: ; preds = %__barray_mask_borrow.exit242.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit244.i: ; preds = %__barray_mask_borrow.exit242.i + %55 = and i64 %53, -5 + store i64 %55, ptr %2, align 4 + store i64 %52, ptr %13, align 4 + %56 = load i64, ptr %2, align 4 + %57 = and i64 %56, 8 + %.not269.i = icmp eq i64 %57, 0 + br i1 %.not269.i, label %__barray_mask_borrow.exit246.i, label %panic.i245.i + +panic.i245.i: ; preds = %__barray_mask_return.exit244.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit246.i: ; preds = %__barray_mask_return.exit244.i + %58 = or disjoint i64 %56, 8 + store i64 %58, ptr %2, align 4 + %59 = load i64, ptr %17, align 4 + tail call void @___rp(i64 %59, double 0x400921FB54442D18, double 0.000000e+00) + %60 = load i64, ptr %2, align 4 + %61 = and i64 %60, 8 + %.not270.i = icmp eq i64 %61, 0 + br i1 %.not270.i, label %panic.i247.i, label %__barray_mask_return.exit248.i + +panic.i247.i: ; preds = %__barray_mask_borrow.exit246.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit248.i: ; preds = %__barray_mask_borrow.exit246.i + %62 = and i64 %60, -9 + store i64 %62, ptr %2, align 4 + store i64 %59, ptr %17, align 4 + %63 = load i64, ptr %2, align 4 + %64 = and i64 %63, 512 + %.not271.i = icmp eq i64 %64, 0 + br i1 %.not271.i, label %__barray_mask_borrow.exit250.i, label %panic.i249.i + +panic.i249.i: ; preds = %__barray_mask_return.exit248.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_mask_borrow.exit250.i: ; preds = %__barray_mask_return.exit248.i + %65 = or disjoint i64 %63, 512 + store i64 %65, ptr %2, align 4 + %66 = load i64, ptr %41, align 4 + tail call void @___rp(i64 %66, double 0x400921FB54442D18, double 0.000000e+00) + %67 = load i64, ptr %2, align 4 + %68 = and i64 %67, 512 + %.not272.i = icmp eq i64 %68, 0 + br i1 %.not272.i, label %panic.i251.i, label %__barray_mask_return.exit252.i + +panic.i251.i: ; preds = %__barray_mask_borrow.exit250.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit252.i: ; preds = %__barray_mask_borrow.exit250.i + %69 = and i64 %67, -513 + store i64 %69, ptr %2, align 4 + store i64 %66, ptr %41, align 4 + %70 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"116.fca.2.insert.i", 0 + %71 = tail call ptr @heap_alloc(i64 240) + %72 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %72, align 1 + br label %__barray_check_bounds.exit.i.i.i + +73: ; preds = %loop_body.i.i + %74 = lshr i64 %.fca.2.extract82.i.i.i, 6 + %75 = getelementptr i64, ptr %.fca.1.extract81.i.i.i, i64 %74 + %76 = load i64, ptr %75, align 4 + %77 = and i64 %.fca.2.extract82.i.i.i, 63 + %78 = sub nuw nsw i64 64, %77 + %79 = lshr i64 -1, %78 + %80 = icmp eq i64 %77, 0 + %81 = select i1 %80, i64 0, i64 %79 + %82 = or i64 %76, %81 + store i64 %82, ptr %75, align 4 + %last_valid.i.i.i.i = add i64 %.fca.2.extract82.i.i.i, 9 + %83 = lshr i64 %last_valid.i.i.i.i, 6 + %84 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i.i, i64 %83 + %85 = load i64, ptr %84, align 4 + %86 = and i64 %last_valid.i.i.i.i, 63 + %87 = shl nsw i64 -2, %86 + %88 = icmp eq i64 %86, 63 + %89 = select i1 %88, i64 0, i64 %87 + %90 = or i64 %85, %89 + store i64 %90, ptr %84, align 4 + %reass.sub.i.i.i.i = sub nsw i64 %83, %74 + %.not.i.i.i.i = icmp eq i64 %reass.sub.i.i.i.i, -1 + br i1 %.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +91: ; preds = %mask_block_ok.i.i.i.i + %92 = add nuw i64 %.02.i.i.i.i, 1 + %exitcond.not.i.i.i.i = icmp eq i64 %.02.i.i.i.i, %reass.sub.i.i.i.i + br i1 %exitcond.not.i.i.i.i, label %"__hugr__.$measure_array$$n(10).280.exit.i", label %mask_block_ok.i.i.i.i + +mask_block_ok.i.i.i.i: ; preds = %73, %91 + %.02.i.i.i.i = phi i64 [ %92, %91 ], [ 0, %73 ] + %gep.i.i.i.i = getelementptr i64, ptr %75, i64 %.02.i.i.i.i + %93 = load i64, ptr %gep.i.i.i.i, align 4 + %94 = icmp eq i64 %93, -1 + br i1 %94, label %91, label %mask_block_err.i.i.i.i + +mask_block_err.i.i.i.i: ; preds = %mask_block_ok.i.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i.i: ; preds = %loop_body.i.i, %__barray_mask_return.exit252.i + %.fca.2.extract82.i187.i.i = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %.fca.2.extract82.i.i.i, %loop_body.i.i ] + %.fca.1.extract81.i186.i.i = phi ptr [ %2, %__barray_mask_return.exit252.i ], [ %.fca.1.extract81.i.i.i, %loop_body.i.i ] + %.fca.0.extract80.i185.i.i = phi ptr [ %1, %__barray_mask_return.exit252.i ], [ %.fca.0.extract80.i.i.i, %loop_body.i.i ] + %"306_0.sroa.15.0184.i.i" = phi i64 [ 0, %__barray_mask_return.exit252.i ], [ %95, %loop_body.i.i ] + %.pn165183.i.i = phi { { ptr, ptr, i64 }, i64 } [ %70, %__barray_mask_return.exit252.i ], [ %110, %loop_body.i.i ] + %95 = add nuw nsw i64 %"306_0.sroa.15.0184.i.i", 1 + %96 = add i64 %"306_0.sroa.15.0184.i.i", %.fca.2.extract82.i187.i.i + %97 = lshr i64 %96, 6 + %98 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i.i, i64 %97 + %99 = load i64, ptr %98, align 4 + %100 = and i64 %96, 63 + %101 = lshr i64 %99, %100 + %102 = trunc i64 %101 to i1 + br i1 %102, label %panic.i.i.i.i, label %__barray_check_bounds.exit.i.i + +panic.i.i.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %__barray_check_bounds.exit.i.i.i + %103 = shl nuw i64 1, %100 + %104 = xor i64 %103, %99 + store i64 %104, ptr %98, align 4 + %105 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i.i, i64 %96 + %106 = load i64, ptr %105, align 4 + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %106) + tail call void @___qfree(i64 %106) + %107 = load i64, ptr %72, align 4 + %108 = lshr i64 %107, %"306_0.sroa.15.0184.i.i" + %109 = trunc i64 %108 to i1 + br i1 %109, label %loop_body.i.i, label %panic.i.i.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i.i: ; preds = %__barray_check_bounds.exit.i.i + %"371_054.fca.1.insert.i.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i.i, 1 + %"371_054.fca.2.insert.i.i" = insertvalue { i1, i64, i1 } %"371_054.fca.1.insert.i.i", i1 undef, 2 + %110 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, i64 %95, 1 + %111 = shl nuw nsw i64 1, %"306_0.sroa.15.0184.i.i" + %112 = xor i64 %107, %111 + store i64 %112, ptr %72, align 4 + %113 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %71, i64 %"306_0.sroa.15.0184.i.i" + store { i1, i64, i1 } %"371_054.fca.2.insert.i.i", ptr %113, align 4 + %114 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i.i, 0 + %.fca.0.extract80.i.i.i = extractvalue { ptr, ptr, i64 } %114, 0 + %.fca.1.extract81.i.i.i = extractvalue { ptr, ptr, i64 } %114, 1 + %.fca.2.extract82.i.i.i = extractvalue { ptr, ptr, i64 } %114, 2 + %exitcond.not.i.i = icmp eq i64 %95, 10 + br i1 %exitcond.not.i.i, label %73, label %__barray_check_bounds.exit.i.i.i + +"__hugr__.$measure_array$$n(10).280.exit.i": ; preds = %91, %73 + tail call void @heap_free(ptr %.fca.0.extract80.i.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i.i) + %115 = load i64, ptr %72, align 4 + %116 = trunc i64 %115 to i1 + br i1 %116, label %cond_exit_89.thread.i, label %__barray_mask_borrow.exit259.i + +mask_block_err.i.i: ; preds = %cond_exit_89.thread.9.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_mask_borrow.exit259.i: ; preds = %"__hugr__.$measure_array$$n(10).280.exit.i" + %117 = or disjoint i64 %115, 1 + store i64 %117, ptr %72, align 4 + %118 = load { i1, i64, i1 }, ptr %71, align 4 + %.fca.0.extract167.i = extractvalue { i1, i64, i1 } %118, 0 + br i1 %.fca.0.extract167.i, label %cond_392_case_1.i, label %cond_exit_89.thread.i + +cond_exit_89.thread.i: ; preds = %cond_392_case_1.i, %__barray_mask_borrow.exit259.i, %"__hugr__.$measure_array$$n(10).280.exit.i" + %119 = phi i64 [ %.pre.i, %cond_392_case_1.i ], [ %117, %__barray_mask_borrow.exit259.i ], [ %115, %"__hugr__.$measure_array$$n(10).280.exit.i" ] + %120 = and i64 %119, 2 + %.not290.i = icmp eq i64 %120, 0 + br i1 %.not290.i, label %__barray_mask_borrow.exit259.1.i, label %cond_exit_89.thread.1.i + +__barray_mask_borrow.exit259.1.i: ; preds = %cond_exit_89.thread.i + %121 = or disjoint i64 %119, 2 + store i64 %121, ptr %72, align 4 + %122 = getelementptr inbounds nuw i8, ptr %71, i64 24 + %123 = load { i1, i64, i1 }, ptr %122, align 4 + %.fca.0.extract167.1.i = extractvalue { i1, i64, i1 } %123, 0 + br i1 %.fca.0.extract167.1.i, label %cond_392_case_1.1.i, label %cond_exit_89.thread.1.i + +cond_392_case_1.1.i: ; preds = %__barray_mask_borrow.exit259.1.i + %.fca.1.extract.1.i = extractvalue { i1, i64, i1 } %123, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.1.i) + %.pre281.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.1.i + +cond_exit_89.thread.1.i: ; preds = %cond_392_case_1.1.i, %__barray_mask_borrow.exit259.1.i, %cond_exit_89.thread.i + %124 = phi i64 [ %.pre281.i, %cond_392_case_1.1.i ], [ %121, %__barray_mask_borrow.exit259.1.i ], [ %119, %cond_exit_89.thread.i ] + %125 = and i64 %124, 4 + %.not291.i = icmp eq i64 %125, 0 + br i1 %.not291.i, label %__barray_mask_borrow.exit259.2.i, label %cond_exit_89.thread.2.i + +__barray_mask_borrow.exit259.2.i: ; preds = %cond_exit_89.thread.1.i + %126 = or disjoint i64 %124, 4 + store i64 %126, ptr %72, align 4 + %127 = getelementptr inbounds nuw i8, ptr %71, i64 48 + %128 = load { i1, i64, i1 }, ptr %127, align 4 + %.fca.0.extract167.2.i = extractvalue { i1, i64, i1 } %128, 0 + br i1 %.fca.0.extract167.2.i, label %cond_392_case_1.2.i, label %cond_exit_89.thread.2.i + +cond_392_case_1.2.i: ; preds = %__barray_mask_borrow.exit259.2.i + %.fca.1.extract.2.i = extractvalue { i1, i64, i1 } %128, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.2.i) + %.pre282.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.2.i + +cond_exit_89.thread.2.i: ; preds = %cond_392_case_1.2.i, %__barray_mask_borrow.exit259.2.i, %cond_exit_89.thread.1.i + %129 = phi i64 [ %.pre282.i, %cond_392_case_1.2.i ], [ %126, %__barray_mask_borrow.exit259.2.i ], [ %124, %cond_exit_89.thread.1.i ] + %130 = and i64 %129, 8 + %.not292.i = icmp eq i64 %130, 0 + br i1 %.not292.i, label %__barray_mask_borrow.exit259.3.i, label %cond_exit_89.thread.3.i + +__barray_mask_borrow.exit259.3.i: ; preds = %cond_exit_89.thread.2.i + %131 = or disjoint i64 %129, 8 + store i64 %131, ptr %72, align 4 + %132 = getelementptr inbounds nuw i8, ptr %71, i64 72 + %133 = load { i1, i64, i1 }, ptr %132, align 4 + %.fca.0.extract167.3.i = extractvalue { i1, i64, i1 } %133, 0 + br i1 %.fca.0.extract167.3.i, label %cond_392_case_1.3.i, label %cond_exit_89.thread.3.i + +cond_392_case_1.3.i: ; preds = %__barray_mask_borrow.exit259.3.i + %.fca.1.extract.3.i = extractvalue { i1, i64, i1 } %133, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.3.i) + %.pre283.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.3.i + +cond_exit_89.thread.3.i: ; preds = %cond_392_case_1.3.i, %__barray_mask_borrow.exit259.3.i, %cond_exit_89.thread.2.i + %134 = phi i64 [ %.pre283.i, %cond_392_case_1.3.i ], [ %131, %__barray_mask_borrow.exit259.3.i ], [ %129, %cond_exit_89.thread.2.i ] + %135 = and i64 %134, 16 + %.not293.i = icmp eq i64 %135, 0 + br i1 %.not293.i, label %__barray_mask_borrow.exit259.4.i, label %cond_exit_89.thread.4.i + +__barray_mask_borrow.exit259.4.i: ; preds = %cond_exit_89.thread.3.i + %136 = or disjoint i64 %134, 16 + store i64 %136, ptr %72, align 4 + %137 = getelementptr inbounds nuw i8, ptr %71, i64 96 + %138 = load { i1, i64, i1 }, ptr %137, align 4 + %.fca.0.extract167.4.i = extractvalue { i1, i64, i1 } %138, 0 + br i1 %.fca.0.extract167.4.i, label %cond_392_case_1.4.i, label %cond_exit_89.thread.4.i + +cond_392_case_1.4.i: ; preds = %__barray_mask_borrow.exit259.4.i + %.fca.1.extract.4.i = extractvalue { i1, i64, i1 } %138, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.4.i) + %.pre284.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.4.i + +cond_exit_89.thread.4.i: ; preds = %cond_392_case_1.4.i, %__barray_mask_borrow.exit259.4.i, %cond_exit_89.thread.3.i + %139 = phi i64 [ %.pre284.i, %cond_392_case_1.4.i ], [ %136, %__barray_mask_borrow.exit259.4.i ], [ %134, %cond_exit_89.thread.3.i ] + %140 = and i64 %139, 32 + %.not294.i = icmp eq i64 %140, 0 + br i1 %.not294.i, label %__barray_mask_borrow.exit259.5.i, label %cond_exit_89.thread.5.i + +__barray_mask_borrow.exit259.5.i: ; preds = %cond_exit_89.thread.4.i + %141 = or disjoint i64 %139, 32 + store i64 %141, ptr %72, align 4 + %142 = getelementptr inbounds nuw i8, ptr %71, i64 120 + %143 = load { i1, i64, i1 }, ptr %142, align 4 + %.fca.0.extract167.5.i = extractvalue { i1, i64, i1 } %143, 0 + br i1 %.fca.0.extract167.5.i, label %cond_392_case_1.5.i, label %cond_exit_89.thread.5.i + +cond_392_case_1.5.i: ; preds = %__barray_mask_borrow.exit259.5.i + %.fca.1.extract.5.i = extractvalue { i1, i64, i1 } %143, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.5.i) + %.pre285.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.5.i + +cond_exit_89.thread.5.i: ; preds = %cond_392_case_1.5.i, %__barray_mask_borrow.exit259.5.i, %cond_exit_89.thread.4.i + %144 = phi i64 [ %.pre285.i, %cond_392_case_1.5.i ], [ %141, %__barray_mask_borrow.exit259.5.i ], [ %139, %cond_exit_89.thread.4.i ] + %145 = and i64 %144, 64 + %.not295.i = icmp eq i64 %145, 0 + br i1 %.not295.i, label %__barray_mask_borrow.exit259.6.i, label %cond_exit_89.thread.6.i + +__barray_mask_borrow.exit259.6.i: ; preds = %cond_exit_89.thread.5.i + %146 = or disjoint i64 %144, 64 + store i64 %146, ptr %72, align 4 + %147 = getelementptr inbounds nuw i8, ptr %71, i64 144 + %148 = load { i1, i64, i1 }, ptr %147, align 4 + %.fca.0.extract167.6.i = extractvalue { i1, i64, i1 } %148, 0 + br i1 %.fca.0.extract167.6.i, label %cond_392_case_1.6.i, label %cond_exit_89.thread.6.i + +cond_392_case_1.6.i: ; preds = %__barray_mask_borrow.exit259.6.i + %.fca.1.extract.6.i = extractvalue { i1, i64, i1 } %148, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.6.i) + %.pre286.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.6.i + +cond_exit_89.thread.6.i: ; preds = %cond_392_case_1.6.i, %__barray_mask_borrow.exit259.6.i, %cond_exit_89.thread.5.i + %149 = phi i64 [ %.pre286.i, %cond_392_case_1.6.i ], [ %146, %__barray_mask_borrow.exit259.6.i ], [ %144, %cond_exit_89.thread.5.i ] + %150 = and i64 %149, 128 + %.not296.i = icmp eq i64 %150, 0 + br i1 %.not296.i, label %__barray_mask_borrow.exit259.7.i, label %cond_exit_89.thread.7.i + +__barray_mask_borrow.exit259.7.i: ; preds = %cond_exit_89.thread.6.i + %151 = or disjoint i64 %149, 128 + store i64 %151, ptr %72, align 4 + %152 = getelementptr inbounds nuw i8, ptr %71, i64 168 + %153 = load { i1, i64, i1 }, ptr %152, align 4 + %.fca.0.extract167.7.i = extractvalue { i1, i64, i1 } %153, 0 + br i1 %.fca.0.extract167.7.i, label %cond_392_case_1.7.i, label %cond_exit_89.thread.7.i + +cond_392_case_1.7.i: ; preds = %__barray_mask_borrow.exit259.7.i + %.fca.1.extract.7.i = extractvalue { i1, i64, i1 } %153, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.7.i) + %.pre287.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.7.i + +cond_exit_89.thread.7.i: ; preds = %cond_392_case_1.7.i, %__barray_mask_borrow.exit259.7.i, %cond_exit_89.thread.6.i + %154 = phi i64 [ %.pre287.i, %cond_392_case_1.7.i ], [ %151, %__barray_mask_borrow.exit259.7.i ], [ %149, %cond_exit_89.thread.6.i ] + %155 = and i64 %154, 256 + %.not297.i = icmp eq i64 %155, 0 + br i1 %.not297.i, label %__barray_mask_borrow.exit259.8.i, label %cond_exit_89.thread.8.i + +__barray_mask_borrow.exit259.8.i: ; preds = %cond_exit_89.thread.7.i + %156 = or disjoint i64 %154, 256 + store i64 %156, ptr %72, align 4 + %157 = getelementptr inbounds nuw i8, ptr %71, i64 192 + %158 = load { i1, i64, i1 }, ptr %157, align 4 + %.fca.0.extract167.8.i = extractvalue { i1, i64, i1 } %158, 0 + br i1 %.fca.0.extract167.8.i, label %cond_392_case_1.8.i, label %cond_exit_89.thread.8.i + +cond_392_case_1.8.i: ; preds = %__barray_mask_borrow.exit259.8.i + %.fca.1.extract.8.i = extractvalue { i1, i64, i1 } %158, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.8.i) + %.pre288.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.8.i + +cond_exit_89.thread.8.i: ; preds = %cond_392_case_1.8.i, %__barray_mask_borrow.exit259.8.i, %cond_exit_89.thread.7.i + %159 = phi i64 [ %.pre288.i, %cond_392_case_1.8.i ], [ %156, %__barray_mask_borrow.exit259.8.i ], [ %154, %cond_exit_89.thread.7.i ] + %160 = and i64 %159, 512 + %.not298.i = icmp eq i64 %160, 0 + br i1 %.not298.i, label %__barray_mask_borrow.exit259.9.i, label %cond_exit_89.thread.9.i + +__barray_mask_borrow.exit259.9.i: ; preds = %cond_exit_89.thread.8.i + %161 = or disjoint i64 %159, 512 + store i64 %161, ptr %72, align 4 + %162 = getelementptr inbounds nuw i8, ptr %71, i64 216 + %163 = load { i1, i64, i1 }, ptr %162, align 4 + %.fca.0.extract167.9.i = extractvalue { i1, i64, i1 } %163, 0 + br i1 %.fca.0.extract167.9.i, label %cond_392_case_1.9.i, label %cond_exit_89.thread.9.i + +cond_392_case_1.9.i: ; preds = %__barray_mask_borrow.exit259.9.i + %.fca.1.extract.9.i = extractvalue { i1, i64, i1 } %163, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.9.i) + %.pre289.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.9.i + +cond_exit_89.thread.9.i: ; preds = %cond_392_case_1.9.i, %__barray_mask_borrow.exit259.9.i, %cond_exit_89.thread.8.i + %164 = phi i64 [ %.pre289.i, %cond_392_case_1.9.i ], [ %161, %__barray_mask_borrow.exit259.9.i ], [ %159, %cond_exit_89.thread.8.i ] + %165 = or i64 %164, -1024 + store i64 %165, ptr %72, align 4 + %166 = icmp eq i64 %165, -1 + br i1 %166, label %__hugr__.main.1.exit, label %mask_block_err.i.i + +cond_392_case_1.i: ; preds = %__barray_mask_borrow.exit259.i + %.fca.1.extract.i = extractvalue { i1, i64, i1 } %118, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract.i) + %.pre.i = load i64, ptr %72, align 4 + br label %cond_exit_89.thread.i + +__hugr__.main.1.exit: ; preds = %cond_exit_89.thread.9.i + tail call void @heap_free(ptr %71) + tail call void @heap_free(ptr nonnull %72) + %167 = tail call i64 @teardown() + ret i64 %167 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_sol new file mode 100644 index 000000000..87449a882 --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-no_results/no_results_x86_64-windows-msvc_sol @@ -0,0 +1,55 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_18_case_0.i.i, label %__hugr__.bar.1.exit + +cond_18_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.bar.1.exit: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_sol new file mode 100644 index 000000000..d45034b5a --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_exit/postselect_exit_x86_64-windows-msvc_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_45_case_0.i.i, label %__hugr__.__tk2_qalloc.41.exit.i + +cond_45_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.41.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + tail call void @panic(i32 42, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.41.exit.i + %read_bool66.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool66.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_sol new file mode 100644 index 000000000..13b2ee26e --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-postselect_panic/postselect_panic_x86_64-windows-msvc_sol @@ -0,0 +1,75 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@s_Postselect.13DF1CD0.0 = private constant [21 x i8] c"\14Postselection failed" +@res_c.1C9EF4D1.0 = private constant [12 x i8] c"\0BUSER:BOOL:c" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_43_case_0.i.i, label %__hugr__.__tk2_qalloc.39.exit.i + +cond_43_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.39.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + tail call void @___inc_future_refcount(i64 %lazy_measure.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + br i1 %read_bool.i, label %1, label %__hugr__.main.1.exit + +1: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + tail call void @panic(i32 1001, ptr nonnull @s_Postselect.13DF1CD0.0) + unreachable + +__hugr__.main.1.exit: ; preds = %__hugr__.__tk2_qalloc.39.exit.i + %read_bool65.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_c.1C9EF4D1.0, i64 11, i1 %read_bool65.i) + %2 = tail call i64 @teardown() + ret i64 %2 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_sol new file mode 100644 index 000000000..8b23d24de --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-print_current_shot/print_current_shot_x86_64-windows-msvc_sol @@ -0,0 +1,27 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_shot.6D86EAF7.0 = private constant [14 x i8] c"\0DUSER:INT:shot" + +declare i64 @get_current_shot() local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %shot.i = tail call i64 @get_current_shot() + tail call void @print_int(ptr nonnull @res_shot.6D86EAF7.0, i64 13, i64 %shot.i) + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_sol new file mode 100644 index 000000000..d4f685e3d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-qft_32/qft_32_x86_64-windows-msvc_sol @@ -0,0 +1,583 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@"e_Index out .DD115165.0" = private constant [29 x i8] c"\1CEXIT:INT:Index out of bounds" +@"e_Array alre.5A300C2A.0" = private constant [57 x i8] c"8EXIT:INT:Array already contains an element at this index" +@"e_Some array.A77EF32E.0" = private constant [48 x i8] c"/EXIT:INT:Some array elements have been borrowed" +@"e_Array cont.EFA5AC45.0" = private constant [70 x i8] c"EEXIT:INT:Array contains non-borrowed elements and cannot be discarded" +@"e_Array elem.E746B1A3.0" = private constant [43 x i8] c"*EXIT:INT:Array element is already borrowed" +@res_cs.46C3C4B5.0 = private constant [16 x i8] c"\0FUSER:BOOLARR:cs" +@e_tket.rotat.20D0216B.0 = private constant [55 x i8] c"6EXIT:INT:tket.rotation.from_halfturns_unchecked failed" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." +@"e_Expected v.E6312129.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 1 but got variant 0" +@"e_Expected v.2F17E0A9.0" = private constant [46 x i8] c"-EXIT:INT:Expected variant 0 but got variant 1" + +define internal fastcc void @__hugr__.main.1() unnamed_addr { +alloca_block: + %0 = tail call ptr @heap_alloc(i64 256) + %1 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %1, align 1 + br label %cond_20_case_1 + +cond_exit_169.loopexit: ; preds = %__barray_mask_return.exit949 + %indvars.iv.next = add nsw i64 %indvars.iv, -1 + %exitcond991.not = icmp eq i64 %9, 32 + br i1 %exitcond991.not, label %cond_exit_82, label %__barray_check_bounds.exit896 + +cond_20_case_1: ; preds = %alloca_block, %cond_exit_20 + %"15_0.sroa.0.0978" = phi i64 [ 0, %alloca_block ], [ %2, %cond_exit_20 ] + %2 = add nuw nsw i64 %"15_0.sroa.0.0978", 1 + %qalloc.i = tail call i64 @___qalloc() + %not_max.not.not.i = icmp eq i64 %qalloc.i, -1 + br i1 %not_max.not.not.i, label %cond_386_case_0.i, label %__barray_check_bounds.exit + +cond_386_case_0.i: ; preds = %cond_20_case_1 + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__barray_check_bounds.exit: ; preds = %cond_20_case_1 + tail call void @___reset(i64 %qalloc.i) + %3 = load i64, ptr %1, align 4 + %4 = lshr i64 %3, %"15_0.sroa.0.0978" + %5 = trunc i64 %4 to i1 + br i1 %5, label %cond_exit_20, label %panic.i + +panic.i: ; preds = %__barray_check_bounds.exit + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +cond_exit_20: ; preds = %__barray_check_bounds.exit + %6 = shl nuw nsw i64 1, %"15_0.sroa.0.0978" + %7 = xor i64 %3, %6 + store i64 %7, ptr %1, align 4 + %8 = getelementptr inbounds nuw i64, ptr %0, i64 %"15_0.sroa.0.0978" + store i64 %qalloc.i, ptr %8, align 4 + %exitcond.not = icmp eq i64 %2, 32 + br i1 %exitcond.not, label %__barray_check_bounds.exit896, label %cond_20_case_1 + +__barray_check_bounds.exit896: ; preds = %cond_exit_20, %cond_exit_169.loopexit + %indvars.iv = phi i64 [ %indvars.iv.next, %cond_exit_169.loopexit ], [ 31, %cond_exit_20 ] + %"45_0.0981" = phi i64 [ %9, %cond_exit_169.loopexit ], [ 0, %cond_exit_20 ] + %smax = tail call i64 @llvm.smax.i64(i64 %indvars.iv, i64 1) + %9 = add nuw nsw i64 %"45_0.0981", 1 + %10 = load i64, ptr %1, align 4 + %11 = lshr i64 %10, %"45_0.0981" + %12 = trunc i64 %11 to i1 + br i1 %12, label %panic.i897, label %__barray_check_bounds.exit899 + +panic.i897: ; preds = %__barray_check_bounds.exit896 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit899: ; preds = %__barray_check_bounds.exit896 + %13 = shl nuw nsw i64 1, %"45_0.0981" + %14 = xor i64 %10, %13 + store i64 %14, ptr %1, align 4 + %15 = getelementptr inbounds nuw i64, ptr %0, i64 %"45_0.0981" + %16 = load i64, ptr %15, align 4 + tail call void @___rp(i64 %16, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %16, double 0x400921FB54442D18) + %17 = load i64, ptr %1, align 4 + %18 = lshr i64 %17, %"45_0.0981" + %19 = trunc i64 %18 to i1 + br i1 %19, label %__barray_mask_return.exit901, label %panic.i900 + +panic.i900: ; preds = %__barray_check_bounds.exit899 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit901: ; preds = %__barray_check_bounds.exit899 + %20 = xor i64 %17, %13 + store i64 %20, ptr %1, align 4 + store i64 %16, ptr %15, align 4 + %.not = icmp eq i64 %"45_0.0981", 31 + br i1 %.not, label %cond_exit_82, label %.lr.ph + +__barray_check_none_borrowed.exit: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + %21 = tail call ptr @heap_alloc(i64 768) + %22 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %22, align 1 + br label %23 + +mask_block_err.i: ; preds = %"__hugr__.$measure_array$$n(32).465.exit" + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +23: ; preds = %__barray_check_none_borrowed.exit, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + %storemerge835986 = phi i64 [ 0, %__barray_check_none_borrowed.exit ], [ %31, %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" ] + %24 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %storemerge835986 + %25 = load { i1, i64, i1 }, ptr %24, align 4 + %.fca.0.extract118.i = extractvalue { i1, i64, i1 } %25, 0 + br i1 %.fca.0.extract118.i, label %cond_296_case_1.i, label %cond_296_case_0.i + +cond_296_case_0.i: ; preds = %23 + %.fca.2.extract120.i = extractvalue { i1, i64, i1 } %25, 2 + br label %cond_exit_296.i + +cond_296_case_1.i: ; preds = %23 + %.fca.1.extract119.i = extractvalue { i1, i64, i1 } %25, 1 + tail call void @___inc_future_refcount(i64 %.fca.1.extract119.i) + br label %cond_exit_296.i + +cond_exit_296.i: ; preds = %cond_296_case_0.i, %cond_296_case_1.i + %"03.sroa.3.0.i" = phi i64 [ %.fca.1.extract119.i, %cond_296_case_1.i ], [ undef, %cond_296_case_0.i ] + %"03.sroa.6.0.i" = phi i1 [ undef, %cond_296_case_1.i ], [ %.fca.2.extract120.i, %cond_296_case_0.i ] + %26 = load i64, ptr %120, align 4 + %27 = lshr i64 %26, %storemerge835986 + %28 = trunc i64 %27 to i1 + br i1 %28, label %panic.i.i, label %cond_329_case_1.i + +panic.i.i: ; preds = %cond_exit_296.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_329_case_1.i: ; preds = %cond_exit_296.i + %"16.fca.1.insert.i" = insertvalue { i1, i64, i1 } %25, i64 %"03.sroa.3.0.i", 1 + %"16.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"16.fca.1.insert.i", i1 %"03.sroa.6.0.i", 2 + %29 = insertvalue { i1, { i1, i64, i1 } } { i1 true, { i1, i64, i1 } poison }, { i1, i64, i1 } %"16.fca.2.insert.i", 1 + %30 = getelementptr inbounds nuw { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge835986 + %.fca.2.0.extract.i = load i1, ptr %30, align 1 + store { i1, { i1, i64, i1 } } %29, ptr %30, align 4 + br i1 %.fca.2.0.extract.i, label %cond_293_case_1.i, label %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + +cond_293_case_1.i: ; preds = %cond_329_case_1.i + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.2F17E0A9.0") + unreachable + +"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit": ; preds = %cond_329_case_1.i + %31 = add nuw nsw i64 %storemerge835986, 1 + %32 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge835986 + store { i1, i64, i1 } %"16.fca.2.insert.i", ptr %32, align 4 + %exitcond992.not = icmp eq i64 %31, 32 + br i1 %exitcond992.not, label %mask_block_ok.i902, label %23 + +mask_block_ok.i902: ; preds = %"__hugr__.$__copy_scan$$n(32)$t([Bool]+[Future(Bool)])$n(1).300.exit" + tail call void @heap_free(ptr nonnull %75) + tail call void @heap_free(ptr nonnull %76) + %33 = load i64, ptr %120, align 4 + %34 = and i64 %33, 4294967295 + store i64 %34, ptr %120, align 4 + %35 = icmp eq i64 %34, 0 + br i1 %35, label %__barray_check_none_borrowed.exit907, label %mask_block_err.i905 + +__barray_check_none_borrowed.exit907: ; preds = %mask_block_ok.i902 + %36 = tail call ptr @heap_alloc(i64 768) + %37 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %37, align 1 + br label %38 + +mask_block_err.i905: ; preds = %mask_block_ok.i902 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +38: ; preds = %__barray_check_none_borrowed.exit907, %38 + %storemerge840987 = phi i64 [ 0, %__barray_check_none_borrowed.exit907 ], [ %44, %38 ] + %39 = getelementptr { i1, { i1, i64, i1 } }, ptr %119, i64 %storemerge840987 + %40 = load { i1, { i1, i64, i1 } }, ptr %39, align 4 + %41 = tail call { { i1, i64, i1 } } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %40) + %42 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %storemerge840987 + %43 = extractvalue { { i1, i64, i1 } } %41, 0 + store { i1, i64, i1 } %43, ptr %42, align 4 + %44 = add nuw nsw i64 %storemerge840987, 1 + %exitcond993.not = icmp eq i64 %44, 32 + br i1 %exitcond993.not, label %45, label %38 + +45: ; preds = %38 + tail call void @heap_free(ptr nonnull %119) + tail call void @heap_free(ptr nonnull %120) + br label %__barray_check_bounds.exit914 + +cond_662_case_0: ; preds = %cond_exit_662 + %46 = load i64, ptr %37, align 4 + %47 = or i64 %46, -4294967296 + store i64 %47, ptr %37, align 4 + %48 = icmp eq i64 %47, -1 + br i1 %48, label %loop_out141, label %mask_block_err.i911 + +mask_block_err.i911: ; preds = %cond_662_case_0 + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit914: ; preds = %45, %cond_exit_662 + %"659_0.0998" = phi i64 [ 0, %45 ], [ %49, %cond_exit_662 ] + %49 = add nuw nsw i64 %"659_0.0998", 1 + %50 = load i64, ptr %37, align 4 + %51 = lshr i64 %50, %"659_0.0998" + %52 = trunc i64 %51 to i1 + br i1 %52, label %cond_exit_662, label %__barray_mask_borrow.exit918 + +__barray_mask_borrow.exit918: ; preds = %__barray_check_bounds.exit914 + %53 = shl nuw nsw i64 1, %"659_0.0998" + %54 = xor i64 %50, %53 + store i64 %54, ptr %37, align 4 + %55 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %36, i64 %"659_0.0998" + %56 = load { i1, i64, i1 }, ptr %55, align 4 + %.fca.0.extract604 = extractvalue { i1, i64, i1 } %56, 0 + br i1 %.fca.0.extract604, label %cond_685_case_1, label %cond_exit_662 + +cond_exit_662: ; preds = %cond_685_case_1, %__barray_mask_borrow.exit918, %__barray_check_bounds.exit914 + %57 = icmp samesign ugt i64 %"659_0.0998", 30 + br i1 %57, label %cond_662_case_0, label %__barray_check_bounds.exit914 + +loop_out141: ; preds = %cond_662_case_0 + tail call void @heap_free(ptr %36) + tail call void @heap_free(ptr nonnull %37) + %58 = load i64, ptr %22, align 4 + %59 = and i64 %58, 4294967295 + store i64 %59, ptr %22, align 4 + %60 = icmp eq i64 %59, 0 + br i1 %60, label %__barray_check_none_borrowed.exit924, label %mask_block_err.i922 + +__barray_check_none_borrowed.exit924: ; preds = %loop_out141 + %61 = tail call ptr @heap_alloc(i64 32) + %62 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %62, align 1 + br label %63 + +mask_block_err.i922: ; preds = %loop_out141 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_685_case_1: ; preds = %__barray_mask_borrow.exit918 + %.fca.1.extract605 = extractvalue { i1, i64, i1 } %56, 1 + tail call void @___dec_future_refcount(i64 %.fca.1.extract605) + br label %cond_exit_662 + +63: ; preds = %__barray_check_none_borrowed.exit924, %63 + %storemerge841988 = phi i64 [ 0, %__barray_check_none_borrowed.exit924 ], [ %69, %63 ] + %64 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %21, i64 %storemerge841988 + %65 = load { i1, i64, i1 }, ptr %64, align 4 + %66 = tail call { i1 } @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %65) + %67 = getelementptr inbounds nuw i1, ptr %61, i64 %storemerge841988 + %68 = extractvalue { i1 } %66, 0 + store i1 %68, ptr %67, align 1 + %69 = add nuw nsw i64 %storemerge841988, 1 + %exitcond994.not = icmp eq i64 %69, 32 + br i1 %exitcond994.not, label %mask_block_ok.i925, label %63 + +mask_block_ok.i925: ; preds = %63 + tail call void @heap_free(ptr nonnull %21) + tail call void @heap_free(ptr nonnull %22) + %70 = load i64, ptr %62, align 4 + %71 = and i64 %70, 4294967295 + store i64 %71, ptr %62, align 4 + %72 = icmp eq i64 %71, 0 + br i1 %72, label %__barray_check_none_borrowed.exit930, label %mask_block_err.i928 + +__barray_check_none_borrowed.exit930: ; preds = %mask_block_ok.i925 + %out_arr_alloca = alloca <{ i32, i32, ptr, ptr }>, align 8 + %y_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 4 + %arr_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 8 + %mask_ptr = getelementptr inbounds nuw i8, ptr %out_arr_alloca, i64 16 + %73 = alloca [32 x i1], align 1 + call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %73, i8 0, i64 32, i1 false) + store i32 32, ptr %out_arr_alloca, align 8 + store i32 1, ptr %y_ptr, align 4 + store ptr %61, ptr %arr_ptr, align 8 + store ptr %73, ptr %mask_ptr, align 8 + call void @print_bool_arr(ptr nonnull @res_cs.46C3C4B5.0, i64 15, ptr nonnull %out_arr_alloca) + ret void + +mask_block_err.i928: ; preds = %mask_block_ok.i925 + tail call void @panic(i32 1002, ptr nonnull @"e_Some array.A77EF32E.0") + unreachable + +cond_exit_82: ; preds = %__barray_mask_return.exit901, %cond_exit_169.loopexit + %"45_368.fca.0.insert" = insertvalue { ptr, ptr, i64 } poison, ptr %0, 0 + %"45_368.fca.1.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.0.insert", ptr %1, 1 + %"45_368.fca.2.insert" = insertvalue { ptr, ptr, i64 } %"45_368.fca.1.insert", i64 0, 2 + %74 = insertvalue { { ptr, ptr, i64 }, i64 } poison, { ptr, ptr, i64 } %"45_368.fca.2.insert", 0 + %75 = tail call ptr @heap_alloc(i64 768) + %76 = tail call ptr @heap_alloc(i64 8) + store i64 -1, ptr %76, align 1 + br label %__barray_check_bounds.exit.i.i + +77: ; preds = %loop_body.i + %78 = lshr i64 %.fca.2.extract82.i.i, 6 + %79 = getelementptr i64, ptr %.fca.1.extract81.i.i, i64 %78 + %80 = load i64, ptr %79, align 4 + %81 = and i64 %.fca.2.extract82.i.i, 63 + %82 = sub nuw nsw i64 64, %81 + %83 = lshr i64 -1, %82 + %84 = icmp eq i64 %81, 0 + %85 = select i1 %84, i64 0, i64 %83 + %86 = or i64 %80, %85 + store i64 %86, ptr %79, align 4 + %last_valid.i.i.i = add i64 %.fca.2.extract82.i.i, 31 + %87 = lshr i64 %last_valid.i.i.i, 6 + %88 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i.i, i64 %87 + %89 = load i64, ptr %88, align 4 + %90 = and i64 %last_valid.i.i.i, 63 + %91 = shl nsw i64 -2, %90 + %92 = icmp eq i64 %90, 63 + %93 = select i1 %92, i64 0, i64 %91 + %94 = or i64 %89, %93 + store i64 %94, ptr %88, align 4 + %reass.sub.i.i.i = sub nsw i64 %87, %78 + %.not.i.i.i = icmp eq i64 %reass.sub.i.i.i, -1 + br i1 %.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +95: ; preds = %mask_block_ok.i.i.i + %96 = add nuw i64 %.02.i.i.i, 1 + %exitcond.not.i.i.i = icmp eq i64 %.02.i.i.i, %reass.sub.i.i.i + br i1 %exitcond.not.i.i.i, label %"__hugr__.$measure_array$$n(32).465.exit", label %mask_block_ok.i.i.i + +mask_block_ok.i.i.i: ; preds = %77, %95 + %.02.i.i.i = phi i64 [ %96, %95 ], [ 0, %77 ] + %gep.i.i.i = getelementptr i64, ptr %79, i64 %.02.i.i.i + %97 = load i64, ptr %gep.i.i.i, align 4 + %98 = icmp eq i64 %97, -1 + br i1 %98, label %95, label %mask_block_err.i.i.i + +mask_block_err.i.i.i: ; preds = %mask_block_ok.i.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array cont.EFA5AC45.0") + unreachable + +__barray_check_bounds.exit.i.i: ; preds = %loop_body.i, %cond_exit_82 + %.fca.2.extract82.i187.i = phi i64 [ 0, %cond_exit_82 ], [ %.fca.2.extract82.i.i, %loop_body.i ] + %.fca.1.extract81.i186.i = phi ptr [ %1, %cond_exit_82 ], [ %.fca.1.extract81.i.i, %loop_body.i ] + %.fca.0.extract80.i185.i = phi ptr [ %0, %cond_exit_82 ], [ %.fca.0.extract80.i.i, %loop_body.i ] + %"491_0.sroa.15.0184.i" = phi i64 [ 0, %cond_exit_82 ], [ %99, %loop_body.i ] + %.pn165183.i = phi { { ptr, ptr, i64 }, i64 } [ %74, %cond_exit_82 ], [ %114, %loop_body.i ] + %99 = add nuw nsw i64 %"491_0.sroa.15.0184.i", 1 + %100 = add i64 %"491_0.sroa.15.0184.i", %.fca.2.extract82.i187.i + %101 = lshr i64 %100, 6 + %102 = getelementptr inbounds nuw i64, ptr %.fca.1.extract81.i186.i, i64 %101 + %103 = load i64, ptr %102, align 4 + %104 = and i64 %100, 63 + %105 = lshr i64 %103, %104 + %106 = trunc i64 %105 to i1 + br i1 %106, label %panic.i.i.i, label %__barray_check_bounds.exit.i + +panic.i.i.i: ; preds = %__barray_check_bounds.exit.i.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit.i: ; preds = %__barray_check_bounds.exit.i.i + %107 = shl nuw i64 1, %104 + %108 = xor i64 %107, %103 + store i64 %108, ptr %102, align 4 + %109 = getelementptr inbounds i64, ptr %.fca.0.extract80.i185.i, i64 %100 + %110 = load i64, ptr %109, align 4 + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %110) + tail call void @___qfree(i64 %110) + %111 = load i64, ptr %76, align 4 + %112 = lshr i64 %111, %"491_0.sroa.15.0184.i" + %113 = trunc i64 %112 to i1 + br i1 %113, label %loop_body.i, label %panic.i.i931 + +panic.i.i931: ; preds = %__barray_check_bounds.exit.i + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +loop_body.i: ; preds = %__barray_check_bounds.exit.i + %"555_054.fca.1.insert.i" = insertvalue { i1, i64, i1 } { i1 true, i64 poison, i1 undef }, i64 %lazy_measure.i, 1 + %"555_054.fca.2.insert.i" = insertvalue { i1, i64, i1 } %"555_054.fca.1.insert.i", i1 undef, 2 + %114 = insertvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, i64 %99, 1 + %115 = shl nuw nsw i64 1, %"491_0.sroa.15.0184.i" + %116 = xor i64 %111, %115 + store i64 %116, ptr %76, align 4 + %117 = getelementptr inbounds nuw { i1, i64, i1 }, ptr %75, i64 %"491_0.sroa.15.0184.i" + store { i1, i64, i1 } %"555_054.fca.2.insert.i", ptr %117, align 4 + %118 = extractvalue { { ptr, ptr, i64 }, i64 } %.pn165183.i, 0 + %.fca.0.extract80.i.i = extractvalue { ptr, ptr, i64 } %118, 0 + %.fca.1.extract81.i.i = extractvalue { ptr, ptr, i64 } %118, 1 + %.fca.2.extract82.i.i = extractvalue { ptr, ptr, i64 } %118, 2 + %exitcond.not.i932 = icmp eq i64 %99, 32 + br i1 %exitcond.not.i932, label %77, label %__barray_check_bounds.exit.i.i + +"__hugr__.$measure_array$$n(32).465.exit": ; preds = %95, %77 + tail call void @heap_free(ptr %.fca.0.extract80.i.i) + tail call void @heap_free(ptr nonnull %.fca.1.extract81.i.i) + %119 = tail call ptr @heap_alloc(i64 1024) + %120 = tail call ptr @heap_alloc(i64 8) + store i64 0, ptr %120, align 1 + tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %119, i8 0, i64 1024, i1 false) + %121 = load i64, ptr %76, align 4 + %122 = and i64 %121, 4294967295 + store i64 %122, ptr %76, align 4 + %123 = icmp eq i64 %122, 0 + br i1 %123, label %__barray_check_none_borrowed.exit, label %mask_block_err.i + +.lr.ph: ; preds = %__barray_mask_return.exit901, %__barray_mask_return.exit949 + %"131_3.0980" = phi i64 [ %124, %__barray_mask_return.exit949 ], [ 0, %__barray_mask_return.exit901 ] + %"131_6.0979" = phi double [ %133, %__barray_mask_return.exit949 ], [ 5.000000e-01, %__barray_mask_return.exit901 ] + %124 = add nuw nsw i64 %"131_3.0980", 1 + %125 = tail call double @llvm.fabs.f64(double %"131_6.0979") + %126 = fcmp ueq double %125, 0x7FF0000000000000 + br i1 %126, label %127, label %__barray_check_bounds.exit934 + +127: ; preds = %.lr.ph + tail call void @panic(i32 1001, ptr nonnull @e_tket.rotat.20D0216B.0) + unreachable + +__barray_check_bounds.exit934: ; preds = %.lr.ph + %128 = load i64, ptr %1, align 4 + %129 = lshr i64 %128, %"45_0.0981" + %130 = trunc i64 %129 to i1 + br i1 %130, label %panic.i935, label %cond_184_case_1 + +panic.i935: ; preds = %__barray_check_bounds.exit934 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +cond_184_case_1: ; preds = %__barray_check_bounds.exit934 + %131 = xor i64 %128, %13 + store i64 %131, ptr %1, align 4 + %132 = load i64, ptr %15, align 4 + %133 = fmul double %"131_6.0979", 5.000000e-01 + %134 = add nuw nsw i64 %9, %"131_3.0980" + %exitcond989.not = icmp eq i64 %"131_3.0980", %indvars.iv + br i1 %exitcond989.not, label %out_of_bounds.i937, label %__barray_check_bounds.exit938 + +out_of_bounds.i937: ; preds = %cond_184_case_1 + tail call void @panic(i32 1002, ptr nonnull @"e_Index out .DD115165.0") + unreachable + +__barray_check_bounds.exit938: ; preds = %cond_184_case_1 + %135 = lshr i64 %131, %134 + %136 = trunc i64 %135 to i1 + br i1 %136, label %panic.i939, label %__barray_check_bounds.exit943 + +panic.i939: ; preds = %__barray_check_bounds.exit938 + tail call void @panic(i32 1002, ptr nonnull @"e_Array elem.E746B1A3.0") + unreachable + +__barray_check_bounds.exit943: ; preds = %__barray_check_bounds.exit938 + %137 = shl nuw nsw i64 1, %134 + %138 = xor i64 %131, %137 + store i64 %138, ptr %1, align 4 + %139 = getelementptr inbounds nuw i64, ptr %0, i64 %134 + %140 = load i64, ptr %139, align 4 + %141 = fmul double %"131_6.0979", 0x400921FB54442D18 + %142 = fmul double %141, 5.000000e-01 + %143 = fneg double %142 + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rpp(i64 %132, i64 %140, double %143, double 0xC00921FB54442D18) + tail call void @___rp(i64 %132, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rp(i64 %140, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %140, double %142) + %144 = load i64, ptr %1, align 4 + %145 = lshr i64 %144, %"45_0.0981" + %146 = trunc i64 %145 to i1 + br i1 %146, label %__barray_check_bounds.exit947, label %panic.i944 + +panic.i944: ; preds = %__barray_check_bounds.exit943 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_check_bounds.exit947: ; preds = %__barray_check_bounds.exit943 + %147 = xor i64 %144, %13 + store i64 %147, ptr %1, align 4 + store i64 %132, ptr %15, align 4 + %148 = load i64, ptr %1, align 4 + %149 = lshr i64 %148, %134 + %150 = trunc i64 %149 to i1 + br i1 %150, label %__barray_mask_return.exit949, label %panic.i948 + +panic.i948: ; preds = %__barray_check_bounds.exit947 + tail call void @panic(i32 1002, ptr nonnull @"e_Array alre.5A300C2A.0") + unreachable + +__barray_mask_return.exit949: ; preds = %__barray_check_bounds.exit947 + %151 = xor i64 %148, %137 + store i64 %151, ptr %1, align 4 + store i64 %140, ptr %139, align 4 + %exitcond990.not = icmp eq i64 %124, %smax + br i1 %exitcond990.not, label %cond_exit_169.loopexit, label %.lr.ph +} + +declare ptr @heap_alloc(i64) local_unnamed_addr + +; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) +declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg) #0 + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #1 + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +define internal i1 @__hugr__.array.__read_bool.3.330({ i1, i64, i1 } %0) unnamed_addr { +alloca_block: + %.fca.0.extract = extractvalue { i1, i64, i1 } %0, 0 + br i1 %.fca.0.extract, label %cond_373_case_1, label %cond_373_case_0 + +cond_373_case_0: ; preds = %alloca_block + %.fca.2.extract = extractvalue { i1, i64, i1 } %0, 2 + br label %cond_exit_373 + +cond_373_case_1: ; preds = %alloca_block + %.fca.1.extract = extractvalue { i1, i64, i1 } %0, 1 + %read_bool = tail call i1 @___read_future_bool(i64 %.fca.1.extract) + tail call void @___dec_future_refcount(i64 %.fca.1.extract) + br label %cond_exit_373 + +cond_exit_373: ; preds = %cond_373_case_1, %cond_373_case_0 + %"03.0" = phi i1 [ %read_bool, %cond_373_case_1 ], [ %.fca.2.extract, %cond_373_case_0 ] + ret i1 %"03.0" +} + +declare void @heap_free(ptr) local_unnamed_addr + +define internal { i1, i64, i1 } @"__hugr__.$__unwrap$$t([Bool]+[Future(Bool)]).580"({ i1, { i1, i64, i1 } } %0) unnamed_addr { +alloca_block: + %.fca.0.extract11 = extractvalue { i1, { i1, i64, i1 } } %0, 0 + br i1 %.fca.0.extract11, label %cond_583_case_1, label %cond_583_case_0 + +cond_583_case_1: ; preds = %alloca_block + %1 = extractvalue { i1, { i1, i64, i1 } } %0, 1 + ret { i1, i64, i1 } %1 + +cond_583_case_0: ; preds = %alloca_block + tail call void @panic(i32 1001, ptr nonnull @"e_Expected v.E6312129.0") + unreachable +} + +declare void @print_bool_arr(ptr, i64, ptr) local_unnamed_addr + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +declare void @___inc_future_refcount(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call fastcc void @__hugr__.main.1() + %1 = tail call i64 @teardown() + ret i64 %1 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare double @llvm.fabs.f64(double) #2 + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i64 @llvm.smax.i64(i64, i64) #2 + +attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) } +attributes #1 = { noreturn } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_sol new file mode 100644 index 000000000..ecfd7366c --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rng/rng_x86_64-windows-msvc_sol @@ -0,0 +1,60 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_rint.B928E41E.0 = private constant [14 x i8] c"\0DUSER:INT:rint" +@res_rint1.0884EC03.0 = private constant [15 x i8] c"\0EUSER:INT:rint1" +@res_rfloat.F0E4DD2C.0 = private constant [18 x i8] c"\11USER:FLOAT:rfloat" +@res_rint_bnd.CB1E6B0D.0 = private constant [18 x i8] c"\11USER:INT:rint_bnd" +@res_rint2.F0335598.0 = private constant [15 x i8] c"\0EUSER:INT:rint2" +@res_rfloat2.4DAB941F.0 = private constant [19 x i8] c"\12USER:FLOAT:rfloat2" +@res_rint_bnd2.169DE399.0 = private constant [19 x i8] c"\12USER:INT:rint_bnd2" + +declare i32 @random_int() local_unnamed_addr + +declare double @random_float() local_unnamed_addr + +declare i32 @random_rng(i32) local_unnamed_addr + +declare void @print_int(ptr, i64, i64) local_unnamed_addr + +declare void @print_float(ptr, i64, double) local_unnamed_addr + +declare void @random_seed(i64) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + tail call void @random_seed(i64 42) + %rint.i = tail call i32 @random_int() + %rint14.i = tail call i32 @random_int() + %rfloat.i = tail call double @random_float() + %rintb.i = tail call i32 @random_rng(i32 100) + %1 = sext i32 %rintb.i to i64 + %2 = sext i32 %rint14.i to i64 + %3 = sext i32 %rint.i to i64 + tail call void @print_int(ptr nonnull @res_rint.B928E41E.0, i64 13, i64 %3) + tail call void @print_int(ptr nonnull @res_rint1.0884EC03.0, i64 14, i64 %2) + tail call void @print_float(ptr nonnull @res_rfloat.F0E4DD2C.0, i64 17, double %rfloat.i) + tail call void @print_int(ptr nonnull @res_rint_bnd.CB1E6B0D.0, i64 17, i64 %1) + tail call void @random_seed(i64 84) + %rint47.i = tail call i32 @random_int() + %rfloat49.i = tail call double @random_float() + %rintb52.i = tail call i32 @random_rng(i32 200) + %4 = sext i32 %rintb52.i to i64 + %5 = sext i32 %rint47.i to i64 + tail call void @print_int(ptr nonnull @res_rint2.F0335598.0, i64 14, i64 %5) + tail call void @print_float(ptr nonnull @res_rfloat2.4DAB941F.0, i64 18, double %rfloat49.i) + tail call void @print_int(ptr nonnull @res_rint_bnd2.169DE399.0, i64 18, i64 %4) + %6 = tail call i64 @teardown() + ret i64 %6 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_sol b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_sol new file mode 100644 index 000000000..2d53ec62d --- /dev/null +++ b/qis-compiler/python/tests/snapshots/test_qsystem_platforms/test_llvm_multiplatform/sol-x86_64-windows-msvc-rus/rus_x86_64-windows-msvc_sol @@ -0,0 +1,129 @@ +; ModuleID = 'hugr' +source_filename = "hugr" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-windows-msvc" + +@res_result.457DE32D.0 = private constant [17 x i8] c"\10USER:BOOL:result" +@"e_No more qu.3B2EEBF0.0" = private constant [47 x i8] c".EXIT:INT:No more qubits available to allocate." + +declare i64 @___lazy_measure(i64) local_unnamed_addr + +declare void @___qfree(i64) local_unnamed_addr + +declare i1 @___read_future_bool(i64) local_unnamed_addr + +declare void @___dec_future_refcount(i64) local_unnamed_addr + +declare void @print_bool(ptr, i64, i1) local_unnamed_addr + +declare i64 @___qalloc() local_unnamed_addr + +declare void @___reset(i64) local_unnamed_addr + +; Function Attrs: noreturn +declare void @panic(i32, ptr) local_unnamed_addr #0 + +declare void @___rp(i64, double, double) local_unnamed_addr + +declare void @___rz(i64, double) local_unnamed_addr + +declare void @___rpp(i64, i64, double, double) local_unnamed_addr + +define i64 @qmain(i64 %0) local_unnamed_addr { +entry: + tail call void @setup(i64 %0) + %qalloc.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i = icmp eq i64 %qalloc.i.i, -1 + br i1 %not_max.not.not.i.i, label %cond_87_case_0.i.i, label %__hugr__.__tk2_qalloc.83.exit.i + +cond_87_case_0.i.i: ; preds = %entry + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.83.exit.i: ; preds = %entry + tail call void @___reset(i64 %qalloc.i.i) + %qalloc.i132.i.i = tail call i64 @___qalloc() + %not_max.not.not.i133.i.i = icmp eq i64 %qalloc.i132.i.i, -1 + br i1 %not_max.not.not.i133.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_101_case_0.i.i.i: ; preds = %cond_240_case_1.backedge.i.i, %__hugr__.__tk2_qalloc.83.exit.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.97.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.83.exit.i, %cond_240_case_1.backedge.i.i + %qalloc.i134.i.i = phi i64 [ %qalloc.i.i.i, %cond_240_case_1.backedge.i.i ], [ %qalloc.i132.i.i, %__hugr__.__tk2_qalloc.83.exit.i ] + tail call void @___reset(i64 %qalloc.i134.i.i) + %qalloc.i128.i.i = tail call i64 @___qalloc() + %not_max.not.not.i129.i.i = icmp eq i64 %qalloc.i128.i.i, -1 + br i1 %not_max.not.not.i129.i.i, label %cond_115_case_0.i.i.i, label %__hugr__.__tk2_qalloc.111.exit.i.i + +cond_115_case_0.i.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @panic(i32 1001, ptr nonnull @"e_No more qu.3B2EEBF0.0") + unreachable + +__hugr__.__tk2_qalloc.111.exit.i.i: ; preds = %__hugr__.__tk2_qalloc.97.exit.i.i + tail call void @___reset(i64 %qalloc.i128.i.i) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x400921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0xBFE921FB54442D18) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i128.i.i, i64 %qalloc.i134.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i134.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i134.i.i, double 0x3FE921FB54442D18) + %lazy_measure.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i134.i.i) + tail call void @___qfree(i64 %qalloc.i134.i.i) + %read_bool.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i.i) + br i1 %read_bool.i.i, label %cond_254_case_1.i.i, label %1 + +1: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___qfree(i64 %qalloc.i128.i.i) + br label %cond_240_case_1.backedge.i.i + +cond_240_case_1.backedge.i.i: ; preds = %2, %1 + %qalloc.i.i.i = tail call i64 @___qalloc() + %not_max.not.not.i.i.i = icmp eq i64 %qalloc.i.i.i, -1 + br i1 %not_max.not.not.i.i.i, label %cond_101_case_0.i.i.i, label %__hugr__.__tk2_qalloc.97.exit.i.i + +cond_254_case_1.i.i: ; preds = %__hugr__.__tk2_qalloc.111.exit.i.i + tail call void @___rz(i64 %qalloc.i.i, double 0x3FE921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0x400921FB54442D18) + tail call void @___rp(i64 %qalloc.i.i, double 0x3FF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rpp(i64 %qalloc.i.i, i64 %qalloc.i128.i.i, double 0x3FF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i128.i.i, double 0xBFF921FB54442D18, double 0.000000e+00) + tail call void @___rp(i64 %qalloc.i.i, double 0xBFF921FB54442D18, double 0x3FF921FB54442D18) + tail call void @___rz(i64 %qalloc.i.i, double 0xBFF921FB54442D18) + tail call void @___rz(i64 %qalloc.i128.i.i, double 0x3FE921FB54442D18) + %lazy_measure67.i.i = tail call i64 @___lazy_measure(i64 %qalloc.i128.i.i) + tail call void @___qfree(i64 %qalloc.i128.i.i) + %read_bool80.i.i = tail call i1 @___read_future_bool(i64 %lazy_measure67.i.i) + tail call void @___dec_future_refcount(i64 %lazy_measure67.i.i) + br i1 %read_bool80.i.i, label %__hugr__.main.1.exit, label %2 + +2: ; preds = %cond_254_case_1.i.i + tail call void @___rp(i64 %qalloc.i.i, double 0x400921FB54442D18, double 0.000000e+00) + br label %cond_240_case_1.backedge.i.i + +__hugr__.main.1.exit: ; preds = %cond_254_case_1.i.i + %lazy_measure.i = tail call i64 @___lazy_measure(i64 %qalloc.i.i) + tail call void @___qfree(i64 %qalloc.i.i) + %read_bool.i = tail call i1 @___read_future_bool(i64 %lazy_measure.i) + tail call void @___dec_future_refcount(i64 %lazy_measure.i) + tail call void @print_bool(ptr nonnull @res_result.457DE32D.0, i64 16, i1 %read_bool.i) + %3 = tail call i64 @teardown() + ret i64 %3 +} + +declare void @setup(i64) local_unnamed_addr + +declare i64 @teardown() local_unnamed_addr + +attributes #0 = { noreturn } + +!name = !{!0} + +!0 = !{!"mainlib"} diff --git a/qis-compiler/python/tests/test_qsystem_platforms.py b/qis-compiler/python/tests/test_qsystem_platforms.py new file mode 100644 index 000000000..fb1ca4992 --- /dev/null +++ b/qis-compiler/python/tests/test_qsystem_platforms.py @@ -0,0 +1,69 @@ +from pathlib import Path + +import pytest +from pytest_snapshot.plugin import Snapshot +from selene_hugr_qis_compiler import compile_to_llvm_ir # , HugrReadError, check_hugr + +resources_dir = Path(__file__).parent / "resources" + +triples = [ + "x86_64-unknown-linux-gnu", + "aarch64-unknown-linux-gnu", + "x86_64-apple-darwin", + # TODO: The test doesn't seem to like Apple Silicon, it throws a warning + # > 'aarch64' is not a recognized processor for this target (ignoring processor) + "aarch64-apple-darwin", + "x86_64-windows-msvc", +] + +platforms = ["helios", "sol"] + + +def load(name: str) -> bytes: + hugr_file = resources_dir / f"{name}.hugr" + return hugr_file.read_bytes() + + +@pytest.mark.parametrize( + "hugr_file", + [ + "no_results", + "flip_some", + "discard_qb_array", + "measure_qb_array", + "postselect_exit", + "postselect_panic", + "print_current_shot", + "rng", + "rus", + "qft_32", + "addition_3_11", + ], +) +@pytest.mark.parametrize("target_triple", triples) +@pytest.mark.parametrize("platform", platforms) +def test_llvm_multiplatform( + snapshot: Snapshot, hugr_file: str, target_triple: str, platform: str +) -> None: + hugr_envelope = load(hugr_file) + ir = compile_to_llvm_ir( + hugr_envelope, target_triple=target_triple, platform=platform + ) # type: ignore[call-arg] + snapshot.assert_match(ir, f"{hugr_file}_{target_triple}_{platform}") + + +@pytest.mark.xfail( + reason="Requires tket2 functionality that is not yet implemented for Sol" +) +@pytest.mark.parametrize( + "hugr_file", + [ + # Look ma, no unimplemented gates! + ], +) +@pytest.mark.parametrize("target_triple", triples) +def test_llvm_multiplatform_todos( + snapshot: Snapshot, hugr_file: str, target_triple: str +) -> None: + hugr_envelope = load(hugr_file) + compile_to_llvm_ir(hugr_envelope, target_triple=target_triple, platform="Sol") # type: ignore[call-arg] diff --git a/qis-compiler/rust/lib.rs b/qis-compiler/rust/lib.rs index a94eb19bf..3edea83f3 100644 --- a/qis-compiler/rust/lib.rs +++ b/qis-compiler/rust/lib.rs @@ -142,12 +142,12 @@ fn get_hugr_llvm_module<'c, 'hugr, 'a: 'c>( .finish()) } -fn process_hugr(hugr: &mut Hugr) -> Result<()> { - QSystemPass::default().run(hugr)?; +fn process_hugr(platform: qsystem::QSystemPlatform, hugr: &mut Hugr) -> Result<()> { + QSystemPass::defaults(platform).run(hugr)?; Ok(()) } -fn codegen_extensions() -> CodegenExtsMap<'static, Hugr> { +fn codegen_extensions(platform: qsystem::QSystemPlatform) -> CodegenExtsMap<'static, Hugr> { use array::SeleneHeapArrayCodegen; let pcg = QISPreludeCodegen; CodegenExtsBuilder::default() @@ -160,7 +160,7 @@ fn codegen_extensions() -> CodegenExtsMap<'static, Hugr> { .add_default_static_array_extensions() .add_borrow_array_extensions(array::SeleneHeapBorrowArrayCodegen(pcg.clone())) .add_extension(FuturesCodegenExtension) - .add_extension(QSystemCodegenExtension::from(pcg.clone())) + .add_extension(QSystemCodegenExtension::new(platform, pcg.clone())) .add_extension(RandomCodegenExtension) // Results use standard arrays. .add_extension(ResultsCodegenExtension::new( @@ -182,7 +182,7 @@ fn get_module_with_std_exts<'c>( namer: Rc, hugr: &'c mut Hugr, ) -> Result> { - process_hugr(hugr)?; + process_hugr(args.platform, hugr)?; if let Some(filename) = &args.save_hugr { let file = fs::File::create(PathBuf::from(filename))?; hugr.store(file, EnvelopeConfig::text())?; @@ -192,7 +192,7 @@ fn get_module_with_std_exts<'c>( namer, hugr, &args.name, - Rc::new(codegen_extensions()), + Rc::new(codegen_extensions(args.platform)), ) } @@ -290,6 +290,8 @@ struct CompileArgs<'a> { target_machine: &'a TargetMachine, /// Optimization level opt_level: OptimizationLevel, + /// Target quantum platform + platform: qsystem::QSystemPlatform, } impl<'a> CompileArgs<'a> { @@ -297,6 +299,7 @@ impl<'a> CompileArgs<'a> { name: &impl ToString, target_machine: &'a TargetMachine, opt_level: OptimizationLevel, + platform: qsystem::QSystemPlatform, ) -> Self { Self { entry: None, @@ -304,6 +307,7 @@ impl<'a> CompileArgs<'a> { save_hugr: None, target_machine, opt_level, + platform, } } } @@ -408,6 +412,17 @@ pub fn get_opt_level(opt_level: u32) -> Result { } } +/// Get the QSystemPlatform from the given string. Can be "helios" or "sol". +pub fn get_platform(platform: &str) -> Result { + match platform.to_lowercase().as_str() { + "helios" => Ok(qsystem::QSystemPlatform::Helios), + "sol" => Ok(qsystem::QSystemPlatform::Sol), + _ => Err(anyhow!( + "Unknown platform: {platform} (expected 'helios' or 'sol')" + )), + } +} + // -------------------- Python bindings ----------------------- mod exceptions { use pyo3::exceptions::PyException; @@ -418,7 +433,7 @@ mod exceptions { mod selene_hugr_qis_compiler { use super::{ CompileArgs, Context, Hugr, PyResult, compile, get_native_target_machine, get_opt_level, - get_target_machine_from_triple, pyfunction, read_hugr_envelope, + get_platform, get_target_machine_from_triple, pyfunction, read_hugr_envelope, }; #[pymodule_export] @@ -436,11 +451,12 @@ mod selene_hugr_qis_compiler { /// Compile HUGR package to LLVM IR string #[pyfunction] - #[pyo3(signature = (pkg_bytes, opt_level=2, target_triple="native"))] + #[pyo3(signature = (pkg_bytes, opt_level=2, target_triple="native", platform="helios"))] pub fn compile_to_llvm_ir( pkg_bytes: &[u8], opt_level: u32, target_triple: &str, + platform: &str, ) -> PyResult { let opt = get_opt_level(opt_level)?; let target_machine = if target_triple == "native" { @@ -448,10 +464,11 @@ mod selene_hugr_qis_compiler { } else { get_target_machine_from_triple(target_triple, opt) }?; + let platform = get_platform(platform)?; let mut hugr = py_read_envelope(pkg_bytes)?; let ctx = Context::create(); let llvm_module = compile( - &CompileArgs::new(&"hugr", &target_machine, opt), + &CompileArgs::new(&"hugr", &target_machine, opt, platform), &ctx, &mut hugr, )?; @@ -460,11 +477,12 @@ mod selene_hugr_qis_compiler { /// Compile HUGR package to LLVM bitcode #[pyfunction] - #[pyo3(signature = (pkg_bytes, opt_level=2, target_triple="native"))] + #[pyo3(signature = (pkg_bytes, opt_level=2, target_triple="native", platform="helios"))] pub fn compile_to_bitcode( pkg_bytes: &[u8], opt_level: u32, target_triple: &str, + platform: &str, ) -> PyResult> { let opt = get_opt_level(opt_level)?; let target_machine = if target_triple == "native" { @@ -472,10 +490,11 @@ mod selene_hugr_qis_compiler { } else { get_target_machine_from_triple(target_triple, opt) }?; + let platform = get_platform(platform)?; let mut hugr = py_read_envelope(pkg_bytes)?; let ctx = Context::create(); let llvm_module = compile( - &CompileArgs::new(&"hugr", &target_machine, opt), + &CompileArgs::new(&"hugr", &target_machine, opt, platform), &ctx, &mut hugr, )?; diff --git a/tket-exts/src/tket_exts/data/tket/qsystem.json b/tket-exts/src/tket_exts/data/tket/qsystem.json index 52f83def9..b5d743ae6 100644 --- a/tket-exts/src/tket_exts/data/tket/qsystem.json +++ b/tket-exts/src/tket_exts/data/tket/qsystem.json @@ -1,5 +1,5 @@ { - "version": "0.5.0", + "version": "0.5.1", "name": "tket.qsystem", "types": {}, "operations": { @@ -203,6 +203,47 @@ }, "binary": false }, + "PhasedXX": { + "extension": "tket.qsystem", + "name": "PhasedXX", + "description": "PhasedXX gate, a.k.a. rpp, specific to the Sol platform.", + "signature": { + "params": [], + "body": { + "input": [ + { + "t": "Q" + }, + { + "t": "Q" + }, + { + "t": "Opaque", + "extension": "arithmetic.float.types", + "id": "float64", + "args": [], + "bound": "C" + }, + { + "t": "Opaque", + "extension": "arithmetic.float.types", + "id": "float64", + "args": [], + "bound": "C" + } + ], + "output": [ + { + "t": "Q" + }, + { + "t": "Q" + } + ] + } + }, + "binary": false + }, "QFree": { "extension": "tket.qsystem", "name": "QFree", @@ -308,7 +349,7 @@ "Rz": { "extension": "tket.qsystem", "name": "Rz", - "description": "Rotate a qubit around the Z axis. Not physical.", + "description": "Rotate a qubit around the Z axis. Not physical on Helios or Sol platforms.", "signature": { "params": [], "body": { @@ -333,6 +374,54 @@ }, "binary": false }, + "Tk2": { + "extension": "tket.qsystem", + "name": "Tk2", + "description": "Tk2 gate, a.k.a. rxxyyzz. Specific to the Sol platform.", + "signature": { + "params": [], + "body": { + "input": [ + { + "t": "Q" + }, + { + "t": "Q" + }, + { + "t": "Opaque", + "extension": "arithmetic.float.types", + "id": "float64", + "args": [], + "bound": "C" + }, + { + "t": "Opaque", + "extension": "arithmetic.float.types", + "id": "float64", + "args": [], + "bound": "C" + }, + { + "t": "Opaque", + "extension": "arithmetic.float.types", + "id": "float64", + "args": [], + "bound": "C" + } + ], + "output": [ + { + "t": "Q" + }, + { + "t": "Q" + } + ] + } + }, + "binary": false + }, "TryQAlloc": { "extension": "tket.qsystem", "name": "TryQAlloc", @@ -362,7 +451,7 @@ "ZZPhase": { "extension": "tket.qsystem", "name": "ZZPhase", - "description": "ZZ gate with an angle.", + "description": "ZZ gate with an angle, specific to the Helios platform.", "signature": { "params": [], "body": { diff --git a/tket-exts/src/tket_exts/tket/qsystem/__init__.py b/tket-exts/src/tket_exts/tket/qsystem/__init__.py index d351e3d92..e69ce3eb3 100644 --- a/tket-exts/src/tket_exts/tket/qsystem/__init__.py +++ b/tket-exts/src/tket_exts/tket/qsystem/__init__.py @@ -11,7 +11,7 @@ from hugr.tys import BoundedNatArg from .._util import TketExtension, load_extension -__all__ = ["QSystemRandomExtension", "QSystemUtilsExtension", "QSystemExtension"] +__all__ = ["QSystemRandomExtension", "QSystemUtilsExtension", "QSystemGenericExtension"] class QSystemExtension(TketExtension): @@ -41,6 +41,8 @@ def OPS(self) -> List[OpDef]: self.Rz.op_def(), self.try_QAlloc.op_def(), self.ZZPhase.op_def(), + self.phasedXX.op_def(), + self.tk2.op_def(), ] @functools.cached_property @@ -118,3 +120,13 @@ def try_QAlloc(self) -> ExtOp: def ZZPhase(self) -> ExtOp: """Two-qubit ZZ gate with a float angle.""" return self().get_op("ZZPhase").instantiate() + + @functools.cached_property + def phasedXX(self) -> ExtOp: + """Two-qubit XX gate (alias 'rpp').""" + return self().get_op("PhasedXX").instantiate() + + @functools.cached_property + def tk2(self) -> ExtOp: + """Tk2 gate (alias 'rxxyyzz').""" + return self().get_op("Tk2").instantiate() diff --git a/tket-exts/tests/test_validate_exts.py b/tket-exts/tests/test_validate_exts.py index 2527bc4e8..14972da05 100644 --- a/tket-exts/tests/test_validate_exts.py +++ b/tket-exts/tests/test_validate_exts.py @@ -87,6 +87,8 @@ def ext_qsystem() -> Tuple[TketExtension, List[ExtType], List[ExtOp]]: ext.Rz, ext.try_QAlloc, ext.ZZPhase, + ext.phasedXX, + ext.tk2, ], ) diff --git a/tket-qsystem/src/extension/qsystem.rs b/tket-qsystem/src/extension/qsystem.rs index 9d599cf3d..dc5e23ad1 100644 --- a/tket-qsystem/src/extension/qsystem.rs +++ b/tket-qsystem/src/extension/qsystem.rs @@ -46,7 +46,7 @@ pub use lower::{LowerTk2Error, LowerTketToQSystemPass, check_lowered, lower_tk2_ /// The "tket.qsystem" extension id. pub const EXTENSION_ID: ExtensionId = ExtensionId::new_unchecked("tket.qsystem"); /// The "tket.qsystem" extension version. -pub const EXTENSION_VERSION: Version = Version::new(0, 5, 0); +pub const EXTENSION_VERSION: Version = Version::new(0, 5, 1); lazy_static! { /// The "tket.qsystem" extension. @@ -67,6 +67,16 @@ lazy_static! { ]); } +/// Target platform for QSystem operations. This can determine supported operations, +/// the native gateset, and steer optimisation choices. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum QSystemPlatform { + /// Quantinuum Helios, supporting rxy, rzz, rz + Helios, + /// Quantinuum Sol, supporting rp, rpp, rpg, tk2 + Sol, +} + /// Quantum operations for Quantinuum H-series quantum computers. #[derive( Clone, @@ -92,11 +102,11 @@ pub enum QSystemOp { LazyMeasure, /// Lazily measure a qubit and reset it to the Z |0> eigenstate. LazyMeasureReset, - /// Rotate a qubit around the Z axis. Not physical. + /// Rotate a qubit around the Z axis, not physical (alias 'rz') Rz, - /// PhasedX gate. + /// PhasedX gate (aliases 'rxy', 'rp'). PhasedX, - /// ZZ gate with an angle. + /// ZZ gate with an angle, helios-only (alias 'rzz'). ZZPhase, /// Allocate a qubit in the Z |0> eigenstate. TryQAlloc, @@ -108,6 +118,10 @@ pub enum QSystemOp { MeasureReset, /// Measure a qubit (return 0 or 1) or detect leakage (return 2). LazyMeasureLeaked, + /// PhasedXX gate, sol-only (alias 'rpp') + PhasedXX, + /// Tk2 gate, sol-only (alias 'rxxyyzz') + Tk2, } impl MakeOpDef for QSystemOp { @@ -126,7 +140,7 @@ impl MakeOpDef for QSystemOp { Signature::new(one_qb_row.clone(), vec![qb_t(), future_type(bool_t())]) } Reset => Signature::new(one_qb_row.clone(), one_qb_row.clone()), - ZZPhase => Signature::new(vec![qb_t(), qb_t(), float64_type()], two_qb_row), + ZZPhase => Signature::new(vec![qb_t(), qb_t(), float64_type()], two_qb_row.clone()), Measure => Signature::new(one_qb_row.clone(), vec![bool_type()]), Rz => Signature::new(vec![qb_t(), float64_type()], one_qb_row.clone()), PhasedX => Signature::new( @@ -139,6 +153,20 @@ impl MakeOpDef for QSystemOp { ), QFree => Signature::new(one_qb_row.clone(), type_row![]), MeasureReset => Signature::new(one_qb_row, vec![qb_t(), bool_type()]), + PhasedXX => Signature::new( + vec![qb_t(), qb_t(), float64_type(), float64_type()], + two_qb_row.clone(), + ), + Tk2 => Signature::new( + vec![ + qb_t(), + qb_t(), + float64_type(), + float64_type(), + float64_type(), + ], + two_qb_row, + ), } .into() } @@ -159,9 +187,11 @@ impl MakeOpDef for QSystemOp { match self { QSystemOp::Measure => "Measure a qubit and lose it.", QSystemOp::LazyMeasure => "Lazily measure a qubit and lose it.", - QSystemOp::Rz => "Rotate a qubit around the Z axis. Not physical.", + QSystemOp::Rz => { + "Rotate a qubit around the Z axis. Not physical on Helios or Sol platforms." + } QSystemOp::PhasedX => "PhasedX gate.", - QSystemOp::ZZPhase => "ZZ gate with an angle.", + QSystemOp::ZZPhase => "ZZ gate with an angle, specific to the Helios platform.", QSystemOp::TryQAlloc => "Allocate a qubit in the Z |0> eigenstate.", QSystemOp::QFree => "Free a qubit (lose track of it).", QSystemOp::Reset => "Reset a qubit to the Z |0> eigenstate.", @@ -172,6 +202,8 @@ impl MakeOpDef for QSystemOp { QSystemOp::LazyMeasureReset => { "Lazily measure a qubit and reset it to the Z |0> eigenstate." } + QSystemOp::PhasedXX => "PhasedXX gate, a.k.a. rpp, specific to the Sol platform.", + QSystemOp::Tk2 => "Tk2 gate, a.k.a. rxxyyzz. Specific to the Sol platform.", } .to_string() } @@ -251,6 +283,44 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder + ArrayOpBuilder { .add_dataflow_op(QSystemOp::LazyMeasure, [qb])? .out_wire(0)) } + /// Add a "tket.qsystem.PhasedXX" op. + fn add_phased_xx( + &mut self, + platform: QSystemPlatform, + qb1: Wire, + qb2: Wire, + angle1: Wire, + angle2: Wire, + ) -> Result<[Wire; 2], BuildError> { + match platform { + QSystemPlatform::Helios => { + unimplemented!("PhasedXX lowering for Helios is not yet implemented") + } + QSystemPlatform::Sol => Ok(self + .add_dataflow_op(QSystemOp::PhasedXX, [qb1, qb2, angle1, angle2])? + .outputs_arr()), + } + } + + /// Add a "tket.qsystem.Tk2" op. + fn add_tk2( + &mut self, + platform: QSystemPlatform, + qb1: Wire, + qb2: Wire, + angle1: Wire, + angle2: Wire, + angle3: Wire, + ) -> Result<[Wire; 2], BuildError> { + match platform { + QSystemPlatform::Helios => { + unimplemented!("Tk2 lowering for Helios is not yet implemented") + } + QSystemPlatform::Sol => Ok(self + .add_dataflow_op(QSystemOp::Tk2, [qb1, qb2, angle1, angle2, angle3])? + .outputs_arr()), + } + } /// Add a "tket.qsystem.LazyMeasureLeaked" op. fn add_lazy_measure_leaked(&mut self, qb: Wire) -> Result { @@ -277,27 +347,80 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder + ArrayOpBuilder { } /// Add a maximally entangling "tket.qsystem.ZZPhase(pi/2)" op. - fn build_zz_max(&mut self, qb1: Wire, qb2: Wire) -> Result<[Wire; 2], BuildError> { - let pi_2 = pi_mul_f64(self, 0.5); - self.add_zz_phase(qb1, qb2, pi_2) + fn build_zz_max( + &mut self, + platform: QSystemPlatform, + qb1: Wire, + qb2: Wire, + ) -> Result<[Wire; 2], BuildError> { + match platform { + QSystemPlatform::Helios => { + let pi_2 = pi_mul_f64(self, 0.5); + self.add_zz_phase(platform, qb1, qb2, pi_2) + } + QSystemPlatform::Sol => { + let pi_minus = pi_mul_f64(self, -1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let qb1 = self.add_phased_x(platform, qb1, pi_2, pi_minus_2)?; + let qb2 = self.add_phased_x(platform, qb2, pi_2, pi_minus_2)?; + let [qb1, qb2] = self.add_phased_xx(platform, qb1, qb2, pi_2, pi_minus)?; + let qb1 = self.add_phased_x(platform, qb1, pi_2, pi_2)?; + let qb2 = self.add_phased_x(platform, qb2, pi_2, pi_2)?; + Ok([qb1, qb2]) + } + } } /// Add a "tket.qsystem.ZZPhase" op. - fn add_zz_phase(&mut self, qb1: Wire, qb2: Wire, angle: Wire) -> Result<[Wire; 2], BuildError> { - Ok(self - .add_dataflow_op(QSystemOp::ZZPhase, [qb1, qb2, angle])? - .outputs_arr()) + fn add_zz_phase( + &mut self, + platform: QSystemPlatform, + qb1: Wire, + qb2: Wire, + angle: Wire, + ) -> Result<[Wire; 2], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => self + .add_dataflow_op(QSystemOp::ZZPhase, [qb1, qb2, angle])? + .outputs_arr(), + QSystemPlatform::Sol => { + let pi_minus = pi_mul_f64(self, -1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let qb1 = self.add_phased_x(platform, qb1, pi_2, pi_minus_2)?; + let qb2 = self.add_phased_x(platform, qb2, pi_2, pi_minus_2)?; + let [qb1, qb2] = self.add_phased_xx(platform, qb1, qb2, angle, pi_minus)?; + let qb1 = self.add_phased_x(platform, qb1, pi_2, pi_2)?; + let qb2 = self.add_phased_x(platform, qb2, pi_2, pi_2)?; + [qb1, qb2] + // unimplemented!("ZZPhase lowering for Sol is not yet implemented") + } + }) } /// Add a "tket.qsystem.PhasedX" op. - fn add_phased_x(&mut self, qb: Wire, angle1: Wire, angle2: Wire) -> Result { + fn add_phased_x( + &mut self, + _platform: QSystemPlatform, + qb: Wire, + angle1: Wire, + angle2: Wire, + ) -> Result { Ok(self .add_dataflow_op(QSystemOp::PhasedX, [qb, angle1, angle2])? .out_wire(0)) } /// Add a "tket.qsystem.Rz" op. - fn add_rz(&mut self, qb: Wire, angle: Wire) -> Result { + fn add_rz( + &mut self, + _platform: QSystemPlatform, + qb: Wire, + angle: Wire, + ) -> Result { Ok(self .add_dataflow_op(QSystemOp::Rz, [qb, angle])? .out_wire(0)) @@ -329,173 +452,338 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder + ArrayOpBuilder { } /// Build a hadamard gate in terms of QSystem primitives. - fn build_h(&mut self, qb: Wire) -> Result { + fn build_h(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi = pi_mul_f64(self, 1.0); let pi_2 = pi_mul_f64(self, 0.5); let pi_minus_2 = pi_mul_f64(self, -0.5); - let q = self.add_phased_x(qb, pi_2, pi_minus_2)?; - self.add_rz(q, pi) + let q = self.add_phased_x(platform, qb, pi_2, pi_minus_2)?; + self.add_rz(platform, q, pi) } /// Build an X gate in terms of QSystem primitives. - fn build_x(&mut self, qb: Wire) -> Result { + fn build_x(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi = pi_mul_f64(self, 1.0); let zero = pi_mul_f64(self, 0.0); - self.add_phased_x(qb, pi, zero) + self.add_phased_x(platform, qb, pi, zero) } /// Build a Y gate in terms of QSystem primitives. - fn build_y(&mut self, qb: Wire) -> Result { + fn build_y(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi = pi_mul_f64(self, 1.0); let pi_2 = pi_mul_f64(self, 0.5); - self.add_phased_x(qb, pi, pi_2) + self.add_phased_x(platform, qb, pi, pi_2) } /// Build a Z gate in terms of QSystem primitives. - fn build_z(&mut self, qb: Wire) -> Result { + fn build_z(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi = pi_mul_f64(self, 1.0); - self.add_rz(qb, pi) + self.add_rz(platform, qb, pi) } /// Build an S gate in terms of QSystem primitives. - fn build_s(&mut self, qb: Wire) -> Result { + fn build_s(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_2 = pi_mul_f64(self, 0.5); - self.add_rz(qb, pi_2) + self.add_rz(platform, qb, pi_2) } /// Build an Sdg gate in terms of QSystem primitives. - fn build_sdg(&mut self, qb: Wire) -> Result { + fn build_sdg(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_minus_2 = pi_mul_f64(self, -0.5); - self.add_rz(qb, pi_minus_2) + self.add_rz(platform, qb, pi_minus_2) } /// Build a V gate in terms of QSystem primitives. - fn build_v(&mut self, qb: Wire) -> Result { + fn build_v(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_2 = pi_mul_f64(self, 0.5); let zero = pi_mul_f64(self, 0.0); - self.add_phased_x(qb, pi_2, zero) + self.add_phased_x(platform, qb, pi_2, zero) } /// Build a Vdg gate in terms of QSystem primitives. - fn build_vdg(&mut self, qb: Wire) -> Result { + fn build_vdg(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_minus_2 = pi_mul_f64(self, -0.5); let zero = pi_mul_f64(self, 0.0); - self.add_phased_x(qb, pi_minus_2, zero) + self.add_phased_x(platform, qb, pi_minus_2, zero) } /// Build a T gate in terms of QSystem primitives. - fn build_t(&mut self, qb: Wire) -> Result { + fn build_t(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_4 = pi_mul_f64(self, 0.25); - self.add_rz(qb, pi_4) + self.add_rz(platform, qb, pi_4) } /// Build a Tdg gate in terms of QSystem primitives. - fn build_tdg(&mut self, qb: Wire) -> Result { + fn build_tdg(&mut self, platform: QSystemPlatform, qb: Wire) -> Result { let pi_minus_4 = pi_mul_f64(self, -0.25); - self.add_rz(qb, pi_minus_4) + self.add_rz(platform, qb, pi_minus_4) } /// Build a CNOT gate in terms of QSystem primitives. - fn build_cx(&mut self, c: Wire, t: Wire) -> Result<[Wire; 2], BuildError> { - let pi = pi_mul_f64(self, 1.0); - let pi_2 = pi_mul_f64(self, 0.5); - let pi_minus_2 = pi_mul_f64(self, -0.5); - - let t = self.add_phased_x(t, pi_minus_2, pi_2)?; - let [c, t] = self.build_zz_max(c, t)?; - let c = self.add_rz(c, pi_minus_2)?; - let t = self.add_phased_x(t, pi_2, pi)?; - let t = self.add_rz(t, pi_minus_2)?; - - Ok([c, t]) + fn build_cx( + &mut self, + platform: QSystemPlatform, + c: Wire, + t: Wire, + ) -> Result<[Wire; 2], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => { + let pi = pi_mul_f64(self, 1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let t = self.add_phased_x(platform, t, pi_minus_2, pi_2)?; + let [c, t] = self.build_zz_max(platform, c, t)?; + let c = self.add_rz(platform, c, pi_minus_2)?; + let t = self.add_phased_x(platform, t, pi_2, pi)?; + let t = self.add_rz(platform, t, pi_minus_2)?; + [c, t] + } + QSystemPlatform::Sol => { + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + let zero = pi_mul_f64(self, 0.0); + + let c = self.add_phased_x(platform, c, pi_2, pi_2)?; + let [c, t] = self.add_phased_xx(platform, c, t, pi_2, zero)?; + let c = self.add_phased_x(platform, c, pi_minus_2, pi_2)?; + let c = self.add_rz(platform, c, pi_minus_2)?; + let t = self.add_phased_x(platform, t, pi_minus_2, zero)?; + [c, t] + // unimplemented!("CX lowering for Sol is not yet implemented") + } + }) } /// Build a CY gate in terms of QSystem primitives. - fn build_cy(&mut self, a: Wire, b: Wire) -> Result<[Wire; 2], BuildError> { - let pi = pi_mul_f64(self, 1.0); - let pi_2 = pi_mul_f64(self, 0.5); - let pi_minus_2 = pi_mul_f64(self, -0.5); - - let a = self.add_phased_x(a, pi, pi)?; - let b = self.add_phased_x(b, pi_minus_2, pi)?; - let [a, b] = self.build_zz_max(a, b)?; - let a = self.add_phased_x(a, pi, pi_2)?; - let b = self.add_phased_x(b, pi_minus_2, pi_minus_2)?; - let a = self.add_rz(a, pi_minus_2)?; - let b = self.add_rz(b, pi_2)?; - Ok([a, b]) + fn build_cy( + &mut self, + platform: QSystemPlatform, + a: Wire, + b: Wire, + ) -> Result<[Wire; 2], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => { + let pi = pi_mul_f64(self, 1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let a = self.add_phased_x(platform, a, pi, pi)?; + let b = self.add_phased_x(platform, b, pi_minus_2, pi)?; + let [a, b] = self.build_zz_max(platform, a, b)?; + let a = self.add_phased_x(platform, a, pi, pi_2)?; + let b = self.add_phased_x(platform, b, pi_minus_2, pi_minus_2)?; + let a = self.add_rz(platform, a, pi_minus_2)?; + let b = self.add_rz(platform, b, pi_2)?; + [a, b] + } + QSystemPlatform::Sol => { + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + let zero = pi_mul_f64(self, 0.0); + + let a = self.add_phased_x(platform, a, pi_2, pi_2)?; + let b = self.add_rz(platform, b, pi_minus_2)?; + let [a, b] = self.add_phased_xx(platform, a, b, pi_2, zero)?; + let a = self.add_phased_x(platform, a, pi_minus_2, pi_2)?; + let a = self.add_rz(platform, a, pi_minus_2)?; + let b = self.add_phased_x(platform, b, pi_minus_2, zero)?; + let b = self.add_rz(platform, b, pi_2)?; + [a, b] + // unimplemented!("CY lowering for Sol is not yet implemented") + } + }) } /// Build a CZ gate in terms of QSystem primitives. - fn build_cz(&mut self, a: Wire, b: Wire) -> Result<[Wire; 2], BuildError> { - let pi_minus_2 = pi_mul_f64(self, -0.5); - - let [a, b] = self.build_zz_max(a, b)?; - let b = self.add_rz(b, pi_minus_2)?; - let a = self.add_rz(a, pi_minus_2)?; - - Ok([a, b]) + fn build_cz( + &mut self, + platform: QSystemPlatform, + a: Wire, + b: Wire, + ) -> Result<[Wire; 2], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => { + let pi_minus_2 = pi_mul_f64(self, -0.5); + let [a, b] = self.build_zz_max(platform, a, b)?; + let b = self.add_rz(platform, b, pi_minus_2)?; + let a = self.add_rz(platform, a, pi_minus_2)?; + [a, b] + } + QSystemPlatform::Sol => { + let pi_minus = pi_mul_f64(self, -1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let a = self.add_phased_x(platform, a, pi_2, pi_minus_2)?; + let b = self.add_phased_x(platform, b, pi_2, pi_minus_2)?; + let [a, b] = self.add_phased_xx(platform, a, b, pi_2, pi_minus)?; + let a = self.add_phased_x(platform, a, pi_2, pi_2)?; + let b = self.add_phased_x(platform, b, pi_2, pi_2)?; + let a = self.add_rz(platform, a, pi_minus_2)?; + let b = self.add_rz(platform, b, pi_minus_2)?; + [a, b] + // unimplemented!("CZ lowering for Sol is not yet implemented") + } + }) } /// Build a RX gate in terms of QSystem primitives. - fn build_rx(&mut self, qb: Wire, theta: Wire) -> Result { + fn build_rx( + &mut self, + platform: QSystemPlatform, + qb: Wire, + theta: Wire, + ) -> Result { let zero = pi_mul_f64(self, 0.0); - self.add_phased_x(qb, theta, zero) + self.add_phased_x(platform, qb, theta, zero) } /// Build a RY gate in terms of QSystem primitives. - fn build_ry(&mut self, qb: Wire, theta: Wire) -> Result { + fn build_ry( + &mut self, + platform: QSystemPlatform, + qb: Wire, + theta: Wire, + ) -> Result { let pi_2 = pi_mul_f64(self, 0.5); - self.add_phased_x(qb, theta, pi_2) + self.add_phased_x(platform, qb, theta, pi_2) } /// Build a CRZ gate in terms of QSystem primitives. - fn build_crz(&mut self, a: Wire, b: Wire, lambda: Wire) -> Result<[Wire; 2], BuildError> { - let two = self.add_load_const(Value::from(ConstF64::new(2.0))); - let lambda_2 = self - .add_dataflow_op(FloatOps::fdiv, [lambda, two])? - .out_wire(0); - let lambda_minus_2 = self - .add_dataflow_op(FloatOps::fneg, [lambda_2])? - .out_wire(0); - - let [a, b] = self.add_zz_phase(a, b, lambda_minus_2)?; - let b = self.add_rz(b, lambda_2)?; - Ok([a, b]) + fn build_crz( + &mut self, + platform: QSystemPlatform, + a: Wire, + b: Wire, + lambda: Wire, + ) -> Result<[Wire; 2], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => { + let two = self.add_load_const(Value::from(ConstF64::new(2.0))); + let lambda_2 = self + .add_dataflow_op(FloatOps::fdiv, [lambda, two])? + .out_wire(0); + let lambda_minus_2 = self + .add_dataflow_op(FloatOps::fneg, [lambda_2])? + .out_wire(0); + + let [a, b] = self.add_zz_phase(platform, a, b, lambda_minus_2)?; + let b = self.add_rz(platform, b, lambda_2)?; + [a, b] + } + QSystemPlatform::Sol => { + let two = self.add_load_const(Value::from(ConstF64::new(2.0))); + let lambda_2 = self + .add_dataflow_op(FloatOps::fdiv, [lambda, two])? + .out_wire(0); + let lambda_minus_2 = self + .add_dataflow_op(FloatOps::fneg, [lambda_2])? + .out_wire(0); + + let pi_minus = pi_mul_f64(self, -1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + + let a = self.add_phased_x(platform, a, pi_2, pi_minus_2)?; + let b = self.add_phased_x(platform, b, pi_2, pi_minus_2)?; + let [a, b] = self.add_phased_xx(platform, a, b, lambda_minus_2, pi_minus)?; + let a = self.add_phased_x(platform, a, pi_2, pi_2)?; + let b = self.add_phased_x(platform, b, pi_2, pi_2)?; + let b = self.add_rz(platform, b, lambda_2)?; + [a, b] + + // unimplemented!("CRZ lowering for Sol is not yet implemented") + } + }) } /// Build a Toffoli (CCX) gate in terms of QSystem primitives. - fn build_toffoli(&mut self, a: Wire, b: Wire, c: Wire) -> Result<[Wire; 3], BuildError> { - let pi = pi_mul_f64(self, 1.0); - let pi_2 = pi_mul_f64(self, 0.5); - let pi_minus_2 = pi_mul_f64(self, -0.5); - let pi_4 = pi_mul_f64(self, 0.25); - let pi_minus_4 = pi_mul_f64(self, -0.25); - let pi_minus_3_4 = pi_mul_f64(self, -0.75); - let zero = pi_mul_f64(self, 0.0); - - let c = self.add_phased_x(c, pi, pi_minus_2)?; - let [b, c] = self.build_zz_max(b, c)?; - let c = self.add_phased_x(c, pi_4, pi_2)?; - let [a, c] = self.build_zz_max(a, c)?; - let c = self.add_phased_x(c, pi_4, zero)?; - let [b, c] = self.build_zz_max(b, c)?; - let c = self.add_phased_x(c, pi_4, pi_minus_2)?; - let [a, c] = self.build_zz_max(a, c)?; - let a = self.add_phased_x(a, pi, pi_4)?; - let c = self.add_phased_x(c, pi_minus_3_4, pi)?; - let [a, b] = self.add_zz_phase(a, b, pi_4)?; - let c = self.add_rz(c, pi)?; - let a = self.add_phased_x(a, pi, pi_minus_4)?; - let b = self.add_rz(b, pi_minus_3_4)?; - let a = self.add_rz(a, pi_4)?; - - Ok([a, b, c]) + fn build_toffoli( + &mut self, + platform: QSystemPlatform, + a: Wire, + b: Wire, + c: Wire, + ) -> Result<[Wire; 3], BuildError> { + Ok(match platform { + QSystemPlatform::Helios => { + let pi = pi_mul_f64(self, 1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + let pi_4 = pi_mul_f64(self, 0.25); + let pi_minus_4 = pi_mul_f64(self, -0.25); + let pi_minus_3_4 = pi_mul_f64(self, -0.75); + let zero = pi_mul_f64(self, 0.0); + + let c = self.add_phased_x(platform, c, pi, pi_minus_2)?; + let [b, c] = self.build_zz_max(platform, b, c)?; + let c = self.add_phased_x(platform, c, pi_4, pi_2)?; + let [a, c] = self.build_zz_max(platform, a, c)?; + let c = self.add_phased_x(platform, c, pi_4, zero)?; + let [b, c] = self.build_zz_max(platform, b, c)?; + let c = self.add_phased_x(platform, c, pi_4, pi_minus_2)?; + let [a, c] = self.build_zz_max(platform, a, c)?; + let a = self.add_phased_x(platform, a, pi, pi_4)?; + let c = self.add_phased_x(platform, c, pi_minus_3_4, pi)?; + let [a, b] = self.add_zz_phase(platform, a, b, pi_4)?; + let c = self.add_rz(platform, c, pi)?; + let a = self.add_phased_x(platform, a, pi, pi_minus_4)?; + let b = self.add_rz(platform, b, pi_minus_3_4)?; + let a = self.add_rz(platform, a, pi_4)?; + + [a, b, c] + } + QSystemPlatform::Sol => { + let pi = pi_mul_f64(self, 1.0); + let pi_2 = pi_mul_f64(self, 0.5); + let pi_minus_2 = pi_mul_f64(self, -0.5); + let pi_4 = pi_mul_f64(self, 0.25); + let pi_minus_4 = pi_mul_f64(self, -0.25); + let pi_minus_3_4 = pi_mul_f64(self, -0.75); + let zero = pi_mul_f64(self, 0.0); + + let a = self.add_phased_x(platform, a, pi_2, pi_minus_3_4)?; + let b = self.add_phased_x(platform, b, pi_2, pi_minus_3_4)?; + let a = self.add_rz(platform, a, pi_minus_3_4)?; + let b = self.add_rz(platform, b, pi_minus_3_4)?; + let c = self.add_phased_x(platform, c, pi_2, pi_minus_2)?; + let c = self.add_rz(platform, c, pi_minus_3_4)?; + + let [a, c] = self.add_phased_xx(platform, a, c, pi_2, zero)?; + + let a = self.add_phased_x(platform, a, pi_minus_2, zero)?; + let c = self.add_phased_x(platform, c, pi_4, pi_minus_2)?; + + let [a, b] = self.add_phased_xx(platform, a, b, pi_minus_4, zero)?; + let c = self.add_rz(platform, c, pi_2)?; + + let [b, c] = self.add_phased_xx(platform, b, c, pi_4, zero)?; + let c = self.add_phased_x(platform, c, pi_2, pi_minus_2)?; + let c = self.add_rz(platform, c, pi)?; + + let [a, c] = self.add_phased_xx(platform, a, c, pi_2, zero)?; + let a = self.add_phased_x(platform, a, pi_2, pi_minus_2)?; + let c = self.add_phased_x(platform, c, pi_2, pi_minus_2)?; + let a = self.add_rz(platform, a, pi_2)?; + let c = self.add_rz(platform, c, pi_2)?; + + let [b, c] = self.add_phased_xx(platform, b, c, pi_minus_4, zero)?; + let b = self.add_phased_x(platform, b, pi_2, pi_minus_2)?; + let b = self.add_rz(platform, b, pi)?; + + [a, b, c] + // unimplemented!("Toffoli lowering for Sol is not yet implemented") + } + }) } /// Build a projective measurement with a conditional flip. - fn build_measure_flip(&mut self, qb: Wire) -> Result<[Wire; 2], BuildError> { + fn build_measure_flip( + &mut self, + platform: QSystemPlatform, + qb: Wire, + ) -> Result<[Wire; 2], BuildError> { let [qb, b] = self.add_measure_reset(qb)?; let sum_b = self.add_dataflow_op(BoolOp::read, [b])?.out_wire(0); let mut conditional = self.conditional_builder( @@ -512,7 +800,7 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder + ArrayOpBuilder { // case 1: 1 state measured, flip let mut case1 = conditional.case_builder(1)?; let [qb] = case1.input_wires_arr(); - let qb = case1.build_x(qb)?; + let qb = case1.build_x(platform, qb)?; case1.finish_with_outputs([qb])?; let [qb] = conditional.finish_sub_container()?.outputs_arr(); @@ -567,6 +855,7 @@ mod test { use hugr::builder::{DataflowHugr, FunctionBuilder}; use hugr::extension::simple_op::MakeExtensionOp; use hugr::ops::OpType; + use rstest::rstest; use strum::IntoEnumIterator as _; use super::*; @@ -614,8 +903,11 @@ mod test { assert_matches!(hugr.validate(), Ok(_)); } - #[test] - fn all_ops() { + #[rstest] + #[case(QSystemPlatform::Helios)] + //TODO: uncomment when 2q operation rebasing is supported for Sol + //#[case(QSystemPlatform::Sol)] + fn all_ops(#[case] platform: QSystemPlatform) { let hugr = { let mut func_builder = FunctionBuilder::new( "all_ops", @@ -625,9 +917,11 @@ mod test { let [q0, angle] = func_builder.input_wires_arr(); let q1 = func_builder.build_qalloc().unwrap(); let q0 = func_builder.add_reset(q0).unwrap(); - let q1 = func_builder.add_phased_x(q1, angle, angle).unwrap(); - let [q0, q1] = func_builder.build_zz_max(q0, q1).unwrap(); - let [q0, q1] = func_builder.add_zz_phase(q0, q1, angle).unwrap(); + let q1 = func_builder + .add_phased_x(platform, q1, angle, angle) + .unwrap(); + let [q0, q1] = func_builder.build_zz_max(platform, q0, q1).unwrap(); + let [q0, q1] = func_builder.add_zz_phase(platform, q0, q1, angle).unwrap(); let [q0, q1] = func_builder .build_wrapped_barrier([q0, q1]) @@ -635,7 +929,7 @@ mod test { .try_into() .unwrap(); - let q0 = func_builder.add_rz(q0, angle).unwrap(); + let q0 = func_builder.add_rz(platform, q0, angle).unwrap(); let [q0, _b] = func_builder.add_measure_reset(q0).unwrap(); let b = func_builder.add_measure(q0).unwrap(); func_builder.add_qfree(q1).unwrap(); diff --git a/tket-qsystem/src/extension/qsystem/barrier.rs b/tket-qsystem/src/extension/qsystem/barrier.rs index 72ab8bec6..5fdbb5b6f 100644 --- a/tket-qsystem/src/extension/qsystem/barrier.rs +++ b/tket-qsystem/src/extension/qsystem/barrier.rs @@ -6,7 +6,7 @@ pub use barrier_inserter::BarrierInserter; mod test { use super::*; - use crate::extension::qsystem::{self, lower_tk2_ops}; + use crate::extension::qsystem::{self, QSystemPlatform, lower_tk2_ops}; use hugr::builder::{Dataflow, DataflowHugr}; use hugr::extension::prelude::Barrier; use hugr::std_extensions::collections::borrow_array::borrow_array_type; @@ -59,7 +59,8 @@ mod test { }; // lower barrier to barrier + runtime barrier - let lowered = lower_tk2_ops(&mut h, Preserve::Public).unwrap_or_else(|e| panic!("{}", e)); + let lowered = lower_tk2_ops(&mut h, Preserve::Public, QSystemPlatform::Helios) + .unwrap_or_else(|e| panic!("{}", e)); h.validate().unwrap_or_else(|e| panic!("{}", e)); assert!(matches!(&lowered[..], [n] if barr_n == *n)); diff --git a/tket-qsystem/src/extension/qsystem/lower.rs b/tket-qsystem/src/extension/qsystem/lower.rs index 90e5bf303..5de0f213a 100644 --- a/tket-qsystem/src/extension/qsystem/lower.rs +++ b/tket-qsystem/src/extension/qsystem/lower.rs @@ -24,7 +24,7 @@ use tket::passes::replace_types::{NodeTemplate, ReplaceTypesError}; use tket::passes::{ComposablePass, PassScope, ReplaceTypes}; use tket::{TketOp, extension::rotation::RotationOpBuilder}; -use crate::extension::qsystem::{self, QSystemOp, QSystemOpBuilder}; +use crate::extension::qsystem::{self, QSystemOp, QSystemOpBuilder, QSystemPlatform}; use super::barrier::BarrierInserter; @@ -106,6 +106,7 @@ enum ReplaceOps { pub fn lower_tk2_ops( hugr: &mut impl HugrMut, scope: impl Into, + platform: QSystemPlatform, ) -> Result, LowerTk2Error> { let scope = scope.into(); let mut funcs: BTreeMap = BTreeMap::new(); @@ -145,7 +146,7 @@ pub fn lower_tk2_ops( let template = match funcs.entry(tket_op) { Entry::Occupied(e) => e.get().clone(), Entry::Vacant(e) => { - let template = func_as_node_template(build_func(tket_op)?); + let template = func_as_node_template(build_func(platform, tket_op)?); e.insert(template).clone() } }; @@ -175,7 +176,7 @@ pub fn lower_tk2_ops( Ok(replaced_nodes) } -fn build_func(op: TketOp) -> Result { +fn build_func(platform: QSystemPlatform, op: TketOp) -> Result { let sig = op.into_extension_op().signature().into_owned(); let sig = Signature::new(sig.input, sig.output); // ignore extension delta // TODO check generated names are namespaced enough @@ -183,38 +184,38 @@ fn build_func(op: TketOp) -> Result { let mut b = FunctionBuilder::new(f_name, sig)?; let inputs: Vec<_> = b.input_wires().collect(); let outputs = match (op, inputs.as_slice()) { - (TketOp::H, [q]) => vec![b.build_h(*q)?], - (TketOp::X, [q]) => vec![b.build_x(*q)?], - (TketOp::Y, [q]) => vec![b.build_y(*q)?], - (TketOp::Z, [q]) => vec![b.build_z(*q)?], - (TketOp::S, [q]) => vec![b.build_s(*q)?], - (TketOp::Sdg, [q]) => vec![b.build_sdg(*q)?], - (TketOp::V, [q]) => vec![b.build_v(*q)?], - (TketOp::Vdg, [q]) => vec![b.build_vdg(*q)?], - (TketOp::T, [q]) => vec![b.build_t(*q)?], - (TketOp::Tdg, [q]) => vec![b.build_tdg(*q)?], - (TketOp::Measure, [q]) => b.build_measure_flip(*q)?.into(), + (TketOp::H, [q]) => vec![b.build_h(platform, *q)?], + (TketOp::X, [q]) => vec![b.build_x(platform, *q)?], + (TketOp::Y, [q]) => vec![b.build_y(platform, *q)?], + (TketOp::Z, [q]) => vec![b.build_z(platform, *q)?], + (TketOp::S, [q]) => vec![b.build_s(platform, *q)?], + (TketOp::Sdg, [q]) => vec![b.build_sdg(platform, *q)?], + (TketOp::V, [q]) => vec![b.build_v(platform, *q)?], + (TketOp::Vdg, [q]) => vec![b.build_vdg(platform, *q)?], + (TketOp::T, [q]) => vec![b.build_t(platform, *q)?], + (TketOp::Tdg, [q]) => vec![b.build_tdg(platform, *q)?], + (TketOp::Measure, [q]) => b.build_measure_flip(platform, *q)?.into(), (TketOp::QAlloc, []) => vec![b.build_qalloc()?], - (TketOp::CX, [c, t]) => b.build_cx(*c, *t)?.into(), - (TketOp::CY, [c, t]) => b.build_cy(*c, *t)?.into(), - (TketOp::CZ, [c, t]) => b.build_cz(*c, *t)?.into(), + (TketOp::CX, [c, t]) => b.build_cx(platform, *c, *t)?.into(), + (TketOp::CY, [c, t]) => b.build_cy(platform, *c, *t)?.into(), + (TketOp::CZ, [c, t]) => b.build_cz(platform, *c, *t)?.into(), (TketOp::Rx, [q, angle]) => { let float = build_to_radians(&mut b, *angle)?; - vec![b.build_rx(*q, float)?] + vec![b.build_rx(platform, *q, float)?] } (TketOp::Ry, [q, angle]) => { let float = build_to_radians(&mut b, *angle)?; - vec![b.build_ry(*q, float)?] + vec![b.build_ry(platform, *q, float)?] } (TketOp::Rz, [q, angle]) => { let float = build_to_radians(&mut b, *angle)?; - vec![b.add_rz(*q, float)?] + vec![b.add_rz(platform, *q, float)?] } (TketOp::CRz, [c, t, angle]) => { let float = build_to_radians(&mut b, *angle)?; - b.build_crz(*c, *t, float)?.into() + b.build_crz(platform, *c, *t, float)?.into() } - (TketOp::Toffoli, [a, b_, c]) => b.build_toffoli(*a, *b_, *c)?.into(), + (TketOp::Toffoli, [a, b_, c]) => b.build_toffoli(platform, *a, *b_, *c)?.into(), _ => return Err(LowerTk2Error::UnknownOp(op, inputs.len())), // non-exhaustive }; Ok(b.finish_hugr_with_outputs(outputs)?) @@ -314,12 +315,27 @@ pub fn check_lowered( /// non-[`PassScope::Global`] scopes, multi-op replacement will not be /// performed, as they require adding functions at the global module level. See /// [`PassScope`] for more details. -#[derive(Default, Debug, Clone)] +#[derive(Debug, Clone)] pub struct LowerTketToQSystemPass { /// Where to apply the pass. /// /// Configurable via [`WithScope::with_scope`]. scope: PassScope, + /// Platform to lower for, which may affect the generated graph for some + /// operations. + /// + /// Configurable via new + platform: QSystemPlatform, +} + +impl LowerTketToQSystemPass { + /// Creates a new pass with the given scope and platform. + pub fn new(platform: QSystemPlatform) -> Self { + Self { + scope: Default::default(), + platform, + } + } } impl WithScope for LowerTketToQSystemPass { @@ -334,7 +350,7 @@ impl> ComposablePass for LowerTketToQSystemPass { type Result = (); fn run(&self, hugr: &mut H) -> Result<(), LowerTk2Error> { - lower_tk2_ops(hugr, self.scope.clone())?; + lower_tk2_ops(hugr, self.scope.clone(), self.platform)?; #[cfg(test)] check_lowered(hugr, self.scope.clone()) .map_err(|missing_ops| LowerTk2Error::Unlowered { missing_ops })?; @@ -357,11 +373,13 @@ mod test { use rstest::rstest; #[rstest] - #[case::global(PassScope::Global(Preserve::Public))] - #[case::entrypoint_flat(PassScope::EntrypointFlat)] - #[case::entrypoint_recursive(PassScope::EntrypointRecursive)] - - fn test_lower_direct(#[case] scope: PassScope) { + #[case::global_helios(PassScope::Global(Preserve::Public), QSystemPlatform::Helios)] + #[case::entrypoint_flat_helios(PassScope::EntrypointFlat, QSystemPlatform::Helios)] + #[case::entrypoint_recursive_helios(PassScope::EntrypointRecursive, QSystemPlatform::Helios)] + #[case::global_sol(PassScope::Global(Preserve::Public), QSystemPlatform::Sol)] + #[case::entrypoint_flat_sol(PassScope::EntrypointFlat, QSystemPlatform::Sol)] + #[case::entrypoint_recursive_sol(PassScope::EntrypointRecursive, QSystemPlatform::Sol)] + fn test_lower_direct(#[case] scope: PassScope, #[case] platform: QSystemPlatform) { let mut b = FunctionBuilder::new("circuit", Signature::new_endo(type_row![])).unwrap(); let [maybe_q] = b .add_dataflow_op(TketOp::TryQAlloc, []) @@ -388,7 +406,7 @@ mod test { .finish_hugr_with_outputs([]) .unwrap_or_else(|e| panic!("{}", e)); - let lowered = lower_tk2_ops(&mut h, scope.clone()).unwrap(); + let lowered = lower_tk2_ops(&mut h, scope.clone(), platform).unwrap(); assert_eq!(lowered.len(), 5); let circ = Circuit::new(&h); let ops: Vec = circ @@ -409,32 +427,58 @@ mod test { } #[rstest] - #[case(TketOp::H, Some(vec![QSystemOp::PhasedX, QSystemOp::Rz]))] - #[case(TketOp::X, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::Y, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::Z, Some(vec![QSystemOp::Rz]))] - #[case(TketOp::S, Some(vec![QSystemOp::Rz]))] - #[case(TketOp::Sdg, Some(vec![QSystemOp::Rz]))] - #[case(TketOp::V, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::Vdg, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::T, Some(vec![QSystemOp::Rz]))] - #[case(TketOp::Tdg, Some(vec![QSystemOp::Rz]))] - #[case(TketOp::Rx, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::Ry, Some(vec![QSystemOp::PhasedX]))] - #[case(TketOp::Rz, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::H, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX, QSystemOp::Rz]))] + #[case(TketOp::X, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Y, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Z, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::S, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Sdg, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::V, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Vdg, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::T, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Tdg, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Rx, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Ry, QSystemPlatform::Helios, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Rz, QSystemPlatform::Helios, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::H, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX, QSystemOp::Rz]))] + #[case(TketOp::X, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Y, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Z, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::S, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Sdg, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::V, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Vdg, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::T, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Tdg, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] + #[case(TketOp::Rx, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Ry, QSystemPlatform::Sol, Some(vec![QSystemOp::PhasedX]))] + #[case(TketOp::Rz, QSystemPlatform::Sol, Some(vec![QSystemOp::Rz]))] // multi qubit ordering is not deterministic - #[case(TketOp::CX, None)] - #[case(TketOp::CY, None)] - #[case(TketOp::CZ, None)] - #[case(TketOp::CRz, None)] - #[case(TketOp::Toffoli, None)] + #[case(TketOp::CX, QSystemPlatform::Helios, None)] + #[case(TketOp::CY, QSystemPlatform::Helios, None)] + #[case(TketOp::CZ, QSystemPlatform::Helios, None)] + #[case(TketOp::CRz, QSystemPlatform::Helios, None)] + #[case(TketOp::Toffoli, QSystemPlatform::Helios, None)] + // Uncomment when rebasing is added + //#[case(TketOp::CX, QSystemPlatform::Helios, None)] + //#[case(TketOp::CY, QSystemPlatform::Helios, None)] + //#[case(TketOp::CZ, QSystemPlatform::Helios, None)] + //#[case(TketOp::CRz, QSystemPlatform::Helios, None)] + //#[case(TketOp::Toffoli, QSystemPlatform::Helios, None)] + // conditional doesn't fit in to commands - #[case(TketOp::Measure, None)] - #[case(TketOp::QAlloc, None)] - fn test_lower(#[case] t2op: TketOp, #[case] qsystem_ops: Option>) { + #[case(TketOp::Measure, QSystemPlatform::Helios, None)] + #[case(TketOp::QAlloc, QSystemPlatform::Helios, None)] + #[case(TketOp::Measure, QSystemPlatform::Sol, None)] + #[case(TketOp::QAlloc, QSystemPlatform::Sol, None)] + fn test_lower( + #[case] t2op: TketOp, + #[case] platform: QSystemPlatform, + #[case] qsystem_ops: Option>, + ) { // build dfg with just the op - let h = build_func(t2op).unwrap(); + let h = build_func(platform, t2op).unwrap(); let circ = Circuit::new(&h); let ops: Vec = circ .commands() @@ -448,10 +492,13 @@ mod test { } #[rstest] - #[case::global(PassScope::Global(Preserve::Public))] - #[case::entrypoint_flat(PassScope::EntrypointFlat)] - #[case::entrypoint_recursive(PassScope::EntrypointRecursive)] - fn test_mixed(#[case] scope: PassScope) { + #[case::global_helios(PassScope::Global(Preserve::Public), QSystemPlatform::Helios)] + #[case::entrypoint_flat_helios(PassScope::EntrypointFlat, QSystemPlatform::Helios)] + #[case::entrypoint_recursive_helios(PassScope::EntrypointRecursive, QSystemPlatform::Helios)] + #[case::global_sol(PassScope::Global(Preserve::Public), QSystemPlatform::Sol)] + #[case::entrypoint_flat_sol(PassScope::EntrypointFlat, QSystemPlatform::Sol)] + #[case::entrypoint_recursive_sol(PassScope::EntrypointRecursive, QSystemPlatform::Sol)] + fn test_mixed(#[case] scope: PassScope, #[case] platform: QSystemPlatform) { let mut b = DFGBuilder::new(Signature::new([rotation_type()], [bool_t()])).unwrap(); let [angle] = b.input_wires_arr(); let qalloc = b.add_dataflow_op(TketOp::QAlloc, []).unwrap(); @@ -471,7 +518,7 @@ mod test { let original_node_count = h.nodes().count(); - let lowered = lower_tk2_ops(&mut h, scope.clone()).unwrap(); + let lowered = lower_tk2_ops(&mut h, scope.clone(), platform).unwrap(); let expected_lower_count = match scope { PassScope::EntrypointFlat => 1, diff --git a/tket-qsystem/src/lib.rs b/tket-qsystem/src/lib.rs index 7ba4c4f4f..07edc527d 100644 --- a/tket-qsystem/src/lib.rs +++ b/tket-qsystem/src/lib.rs @@ -26,6 +26,7 @@ use lower_drops::LowerDropsPass; use replace_bools::{ReplaceBoolPass, ReplaceBoolPassError}; use tket::TketOp; +pub use extension::qsystem::QSystemPlatform; use extension::{ futures::FutureOpDef, qsystem::{LowerTk2Error, LowerTketToQSystemPass, QSystemOp}, @@ -46,15 +47,19 @@ pub struct QSystemPass { force_order: bool, lazify: bool, hide_funcs: bool, - /// Where to apply the pass. /// /// Configurable via [`WithScope::with_scope`]. scope: PassScope, + /// Target platform, which may affect how certain operations are lowered. + /// + /// Configurable via [`WithPlatform::with_platform`]. + platform: QSystemPlatform, } -impl Default for QSystemPass { - fn default() -> Self { +impl QSystemPass { + /// Load default settings for `QSystemPass` given the target qsystem platform. + pub fn defaults(platform: QSystemPlatform) -> Self { Self { constant_fold: true, monomorphize: true, @@ -62,6 +67,7 @@ impl Default for QSystemPass { lazify: true, hide_funcs: true, scope: PassScope::default(), + platform, } } } @@ -266,7 +272,9 @@ impl + 'static> ComposablePass for QSystemPass { // once we're done so that LLVM is not forced to compile them as callable. let pub_funcs = self.collect_pub_funcs(hugr); - LowerTketToQSystemPass::default_with_scope(self.scope.clone()).run(hugr)?; + LowerTketToQSystemPass::new(self.platform) + .with_scope(self.scope.clone()) + .run(hugr)?; if self.lazify { ReplaceBoolPass::default_with_scope(self.scope.clone()).run(hugr)?; } @@ -321,12 +329,20 @@ mod test { guppy::{DROP_OP_NAME, GUPPY_EXTENSION}, }; - use crate::extension::{futures::FutureOpDef, qsystem::QSystemOp}; + use crate::{ + QSystemPass, + extension::{ + futures::FutureOpDef, + qsystem::{QSystemOp, QSystemPlatform}, + }, + }; #[rstest] - #[case(false)] - #[case(true)] - fn qsystem_pass(#[case] set_entrypoint: bool) { + #[case(QSystemPlatform::Helios, false)] + #[case(QSystemPlatform::Helios, true)] + #[case(QSystemPlatform::Sol, false)] + #[case(QSystemPlatform::Sol, true)] + fn qsystem_pass(#[case] platform: QSystemPlatform, #[case] set_entrypoint: bool) { let mut mb = hugr::builder::ModuleBuilder::new(); let func = mb .define_function("func", Signature::new_endo(type_row![])) @@ -386,7 +402,7 @@ mod test { // if this is not done the "backwards compatibility" code is triggered hugr.set_entrypoint(main_node); } - QSystemPass::default().run(&mut hugr).unwrap(); + QSystemPass::defaults(platform).run(&mut hugr).unwrap(); let (pg, node_map) = hugr.region_portgraph(main_node); let topo_sorted = Topo::new(&pg).iter(&pg).collect_vec(); @@ -438,14 +454,17 @@ mod test { // Check there are no public funcs (after hiding) let mut hugr = orig.clone(); - QSystemPass::default().run(&mut hugr).unwrap(); + // TODO: add sol case? + QSystemPass::defaults(QSystemPlatform::Helios) + .run(&mut hugr) + .unwrap(); assert_eq!(count_pub_funcs(&hugr), 0); // Run again without hiding... let mut hugr_public = orig; QSystemPass { hide_funcs: false, - ..Default::default() + ..QSystemPass::defaults(QSystemPlatform::Helios) // TODO: add Sol case? } .run(&mut hugr_public) .unwrap(); diff --git a/tket-qsystem/src/llvm/qsystem.rs b/tket-qsystem/src/llvm/qsystem.rs index 90a40df52..4ac0f54f3 100644 --- a/tket-qsystem/src/llvm/qsystem.rs +++ b/tket-qsystem/src/llvm/qsystem.rs @@ -5,8 +5,8 @@ use hugr::llvm::inkwell::types::FunctionType; use itertools::Itertools as _; use tket::hugr::{self, llvm::inkwell}; -use crate::extension::qsystem::{self, QSystemOp}; -use anyhow::{Result, anyhow}; +use crate::extension::qsystem::{self, QSystemOp, QSystemPlatform}; +use anyhow::{Result, anyhow, bail}; use hugr::extension::prelude::qb_t; use hugr::llvm::custom::CodegenExtension; use hugr::llvm::emit::func::{EmitFuncContext, build_option}; @@ -22,7 +22,16 @@ use super::futures::future_type; /// Codegen extension for quantum operations. #[derive(derive_more::From)] -pub struct QSystemCodegenExtension(PCG); +pub struct QSystemCodegenExtension { + platform: QSystemPlatform, + codegen: PCG, +} +impl QSystemCodegenExtension { + /// Create a new `QSystemCodegenExtension` for the desired qsystem platform + pub fn new(platform: QSystemPlatform, codegen: PCG) -> Self { + Self { platform, codegen } + } +} impl CodegenExtension for QSystemCodegenExtension { fn add_extension<'a, H: HugrView + 'a>( @@ -44,11 +53,27 @@ impl CodegenExtension for QSystemCodegenExtension { } } +trait QSystemRuntimeFunction { + fn name(&self) -> &str; + + fn func_type<'c>( + &self, + context: &EmitFuncContext<'c, '_, impl HugrView>, + pcg: &impl PreludeCodegen, + ) -> FunctionType<'c>; + + fn get_func<'c, H: HugrView>( + &self, + context: &EmitFuncContext<'c, '_, H>, + pcg: &impl PreludeCodegen, + ) -> Result> { + let func_type = self.func_type(context, pcg); + context.get_extern_func(self.name(), func_type) + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum RuntimeFunction { - Rz, - Rzz, - Rxy, +enum GenericRuntimeFunction { QAlloc, QFree, Measure, @@ -57,18 +82,54 @@ enum RuntimeFunction { Reset, } -impl RuntimeFunction { +impl QSystemRuntimeFunction for GenericRuntimeFunction { + fn name(&self) -> &str { + match self { + GenericRuntimeFunction::QAlloc => "___qalloc", + GenericRuntimeFunction::QFree => "___qfree", + GenericRuntimeFunction::Measure => "___measure", + GenericRuntimeFunction::LazyMeasureLeaked => "___lazy_measure_leaked", + GenericRuntimeFunction::LazyMeasure => "___lazy_measure", + GenericRuntimeFunction::Reset => "___reset", + } + } + + fn func_type<'c>( + &self, + context: &EmitFuncContext<'c, '_, impl HugrView>, + pcg: &impl PreludeCodegen, + ) -> FunctionType<'c> { + let qb_type = pcg + .qubit_type(&context.typing_session()) + .as_basic_type_enum(); + let iwc = context.iw_context(); + match self { + GenericRuntimeFunction::QAlloc => qb_type.fn_type(&[], false), + GenericRuntimeFunction::QFree => iwc.void_type().fn_type(&[qb_type.into()], false), + GenericRuntimeFunction::Measure => iwc.bool_type().fn_type(&[qb_type.into()], false), + GenericRuntimeFunction::LazyMeasureLeaked => { + future_type(iwc).fn_type(&[qb_type.into()], false) + } + GenericRuntimeFunction::LazyMeasure => { + future_type(iwc).fn_type(&[qb_type.into()], false) + } + GenericRuntimeFunction::Reset => iwc.void_type().fn_type(&[qb_type.into()], false), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum HeliosGateFunction { + Rz, + Rzz, + Rxy, +} +impl QSystemRuntimeFunction for HeliosGateFunction { fn name(&self) -> &str { match self { - RuntimeFunction::Rz => "___rz", - RuntimeFunction::Rzz => "___rzz", - RuntimeFunction::Rxy => "___rxy", - RuntimeFunction::QAlloc => "___qalloc", - RuntimeFunction::QFree => "___qfree", - RuntimeFunction::Measure => "___measure", - RuntimeFunction::LazyMeasureLeaked => "___lazy_measure_leaked", - RuntimeFunction::LazyMeasure => "___lazy_measure", - RuntimeFunction::Reset => "___reset", + HeliosGateFunction::Rz => "___rz", + HeliosGateFunction::Rzz => "___rzz", + HeliosGateFunction::Rxy => "___rxy", } } @@ -82,45 +143,104 @@ impl RuntimeFunction { .as_basic_type_enum(); let iwc = context.iw_context(); match self { - RuntimeFunction::Rz => iwc + HeliosGateFunction::Rz => iwc .void_type() .fn_type(&[qb_type.into(), iwc.f64_type().into()], false), - RuntimeFunction::Rzz => iwc.void_type().fn_type( + HeliosGateFunction::Rzz => iwc.void_type().fn_type( &[qb_type.into(), qb_type.into(), iwc.f64_type().into()], false, ), - RuntimeFunction::Rxy => iwc.void_type().fn_type( + HeliosGateFunction::Rxy => iwc.void_type().fn_type( &[qb_type.into(), iwc.f64_type().into(), iwc.f64_type().into()], false, ), - RuntimeFunction::QAlloc => qb_type.fn_type(&[], false), - RuntimeFunction::QFree => iwc.void_type().fn_type(&[qb_type.into()], false), - RuntimeFunction::Measure => iwc.bool_type().fn_type(&[qb_type.into()], false), - RuntimeFunction::LazyMeasureLeaked => { - future_type(iwc).fn_type(&[qb_type.into()], false) - } - RuntimeFunction::LazyMeasure => future_type(iwc).fn_type(&[qb_type.into()], false), - RuntimeFunction::Reset => iwc.void_type().fn_type(&[qb_type.into()], false), } } +} - fn get_func<'c, H: HugrView>( +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum SolGateFunction { + Rp, + Rz, + Rpp, + Rxxyyzz, +} + +impl QSystemRuntimeFunction for SolGateFunction { + fn name(&self) -> &str { + match self { + SolGateFunction::Rp => "___rp", + SolGateFunction::Rz => "___rz", + SolGateFunction::Rpp => "___rpp", + SolGateFunction::Rxxyyzz => "___rxxyyzz", + } + } + + fn func_type<'c>( &self, - context: &EmitFuncContext<'c, '_, H>, + context: &EmitFuncContext<'c, '_, impl HugrView>, pcg: &impl PreludeCodegen, - ) -> Result> { - let func_type = self.func_type(context, pcg); - context.get_extern_func(self.name(), func_type) + ) -> FunctionType<'c> { + let qubit = pcg + .qubit_type(&context.typing_session()) + .as_basic_type_enum() + .into(); + let iwc = context.iw_context(); + let float = iwc.f64_type().into(); + match self { + SolGateFunction::Rp => iwc.void_type().fn_type(&[qubit, float, float], false), + SolGateFunction::Rz => iwc.void_type().fn_type(&[qubit, float], false), + SolGateFunction::Rpp => iwc + .void_type() + .fn_type(&[qubit, qubit, float, float], false), + SolGateFunction::Rxxyyzz => iwc + .void_type() + .fn_type(&[qubit, qubit, float, float, float], false), + } } } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum RuntimeFunction { + Generic(GenericRuntimeFunction), + HeliosGate(HeliosGateFunction), + SolGate(SolGateFunction), +} + impl QSystemCodegenExtension { fn runtime_func<'c>( &self, context: &EmitFuncContext<'c, '_, impl HugrView>, rf: RuntimeFunction, ) -> Result> { - rf.get_func(context, &self.0) + match (self.platform, rf) { + (QSystemPlatform::Helios, RuntimeFunction::HeliosGate(gf)) => { + gf.get_func(context, &self.codegen) + } + (QSystemPlatform::Sol, RuntimeFunction::SolGate(gf)) => { + gf.get_func(context, &self.codegen) + } + (_, RuntimeFunction::Generic(gf)) => gf.get_func(context, &self.codegen), + (QSystemPlatform::Helios, RuntimeFunction::SolGate(_)) => { + bail!("Sol gate function called on Helios platform") + } + (QSystemPlatform::Sol, RuntimeFunction::HeliosGate(_)) => { + bail!("Helios gate function called on Sol platform") + } + } + } + fn runtime_func_name<'c>(&self, rf: &'c RuntimeFunction) -> Result<&'c str> { + match (self.platform, rf) { + (QSystemPlatform::Helios, RuntimeFunction::HeliosGate(gf)) => Ok(gf.name()), + (QSystemPlatform::Sol, RuntimeFunction::SolGate(gf)) => Ok(gf.name()), + (_, RuntimeFunction::Generic(gf)) => Ok(gf.name()), + (QSystemPlatform::Helios, RuntimeFunction::SolGate(_)) => { + bail!("Sol gate function called on Helios platform") + } + (QSystemPlatform::Sol, RuntimeFunction::HeliosGate(_)) => { + bail!("Helios gate function called on Sol platform") + } + } } /// Helper function to `emit` a qsystem operation. @@ -138,9 +258,8 @@ impl QSystemCodegenExtension { .collect_vec(); let outputs = output_indices.iter().map(|&i| args.inputs[i]).collect_vec(); let func = self.runtime_func(context, runtime_func)?; - context - .builder() - .build_call(func, &inputs, runtime_func.name())?; + let func_name = self.runtime_func_name(&runtime_func)?; + context.builder().build_call(func, &inputs, func_name)?; args.outputs.finish(context.builder(), outputs) } @@ -151,22 +270,69 @@ impl QSystemCodegenExtension { args: EmitOpArgs<'c, '_, ExtensionOp, H>, op: QSystemOp, ) -> Result<()> { - match op { + match (self.platform, op) { // Rotation about Z - QSystemOp::Rz => self.emit_impl(context, args, RuntimeFunction::Rz, &[0, 1], &[0]), - // Rotation about ZZ (aka "ZZPhase") - QSystemOp::ZZPhase => { - self.emit_impl(context, args, RuntimeFunction::Rzz, &[0, 1, 2], &[0, 1]) + (QSystemPlatform::Helios, QSystemOp::Rz) => self.emit_impl( + context, + args, + RuntimeFunction::HeliosGate(HeliosGateFunction::Rz), + &[0, 1], + &[0], + ), + (QSystemPlatform::Helios, QSystemOp::ZZPhase) => self.emit_impl( + context, + args, + RuntimeFunction::HeliosGate(HeliosGateFunction::Rzz), + &[0, 1, 2], + &[0, 1], + ), + (QSystemPlatform::Helios, QSystemOp::PhasedX) => self.emit_impl( + context, + args, + RuntimeFunction::HeliosGate(HeliosGateFunction::Rxy), + &[0, 1, 2], + &[0], + ), + (QSystemPlatform::Helios, QSystemOp::PhasedXX) => { + bail!("PhasedXX not implemented for Helios platform") + } + (QSystemPlatform::Helios, QSystemOp::Tk2) => { + bail!("Tk2 not implemented for Helios platform") } - // Rotation in X and Y - // (α,β) ↦ Rz(β)Rx(α)Rz(−β) - // - // aka "PhasedX", "R1XY", "U1q" - QSystemOp::PhasedX => { - self.emit_impl(context, args, RuntimeFunction::Rxy, &[0, 1, 2], &[0]) + (QSystemPlatform::Sol, QSystemOp::Rz) => self.emit_impl( + context, + args, + RuntimeFunction::SolGate(SolGateFunction::Rz), + &[0, 1], + &[0], + ), + (QSystemPlatform::Sol, QSystemOp::ZZPhase) => { + bail!("Rzz not implemented for Sol platform") } + (QSystemPlatform::Sol, QSystemOp::PhasedX) => self.emit_impl( + context, + args, + RuntimeFunction::SolGate(SolGateFunction::Rp), + &[0, 1, 2], + &[0], + ), + (QSystemPlatform::Sol, QSystemOp::PhasedXX) => self.emit_impl( + context, + args, + RuntimeFunction::SolGate(SolGateFunction::Rpp), + &[0, 1, 2, 3], + &[0, 1], + ), + (QSystemPlatform::Sol, QSystemOp::Tk2) => self.emit_impl( + context, + args, + RuntimeFunction::SolGate(SolGateFunction::Rxxyyzz), + &[0, 1, 2, 3, 4], + &[0, 1], + ), + // Measure qubit in Z basis - QSystemOp::Measure | QSystemOp::MeasureReset => { + (_, QSystemOp::Measure | QSystemOp::MeasureReset) => { let true_val = emit_value(context, &Value::true_val())?; let false_val = emit_value(context, &Value::false_val())?; let builder = context.builder(); @@ -176,7 +342,10 @@ impl QSystemCodegenExtension { .map_err(|_| anyhow!("Measure expects one input"))?; let result_i1 = builder .build_call( - self.runtime_func(context, RuntimeFunction::Measure)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::Measure), + )?, &[qb.into()], "measure_i1", )? @@ -188,7 +357,10 @@ impl QSystemCodegenExtension { // normal measure may put the qubit in invalid state, so assume // deallocation, don't return it builder.build_call( - self.runtime_func(context, RuntimeFunction::QFree)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::QFree), + )?, &[qb.into()], "qfree", )?; @@ -196,7 +368,10 @@ impl QSystemCodegenExtension { } else { // MeasureReset will reset the qubit after measurement so safe to return builder.build_call( - self.runtime_func(context, RuntimeFunction::Reset)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::Reset), + )?, &[qb.into()], "reset", )?; @@ -204,7 +379,7 @@ impl QSystemCodegenExtension { } } // Measure qubit in Z basis, not forcing to a boolean - QSystemOp::LazyMeasure => { + (_, QSystemOp::LazyMeasure) => { let builder = context.builder(); let [qb] = args .inputs @@ -212,21 +387,27 @@ impl QSystemCodegenExtension { .map_err(|_| anyhow!("LazyMeasure expects one input"))?; let result = builder .build_call( - self.runtime_func(context, RuntimeFunction::LazyMeasure)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::LazyMeasure), + )?, &[qb.into()], "lazy_measure", )? .try_as_basic_value() .unwrap_basic(); builder.build_call( - self.runtime_func(context, RuntimeFunction::QFree)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::QFree), + )?, &[qb.into()], "qfree", )?; args.outputs.finish(builder, [result]) } // Measure qubit in Z basis or detect leakage, not forcing to a boolean - QSystemOp::LazyMeasureLeaked => { + (_, QSystemOp::LazyMeasureLeaked) => { let builder = context.builder(); let [qb] = args .inputs @@ -234,20 +415,26 @@ impl QSystemCodegenExtension { .map_err(|_| anyhow!("LazyMeasureLeaked expects one input"))?; let result = builder .build_call( - self.runtime_func(context, RuntimeFunction::LazyMeasureLeaked)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::LazyMeasureLeaked), + )?, &[qb.into()], "lazy_measure_leaked", )? .try_as_basic_value() .unwrap_basic(); builder.build_call( - self.runtime_func(context, RuntimeFunction::QFree)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::QFree), + )?, &[qb.into()], "qfree", )?; args.outputs.finish(builder, [result]) } - QSystemOp::LazyMeasureReset => { + (_, QSystemOp::LazyMeasureReset) => { let builder = context.builder(); let [qb] = args .inputs @@ -255,22 +442,34 @@ impl QSystemCodegenExtension { .map_err(|_| anyhow!("LazyMeasureReset expects one input"))?; let result = builder .build_call( - self.runtime_func(context, RuntimeFunction::LazyMeasure)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::LazyMeasure), + )?, &[qb.into()], "lazy_measure", )? .try_as_basic_value() .unwrap_basic(); builder.build_call( - self.runtime_func(context, RuntimeFunction::Reset)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::Reset), + )?, &[qb.into()], "reset", )?; args.outputs.finish(builder, [qb, result]) } // Reset a qubit - QSystemOp::Reset => self.emit_impl(context, args, RuntimeFunction::Reset, &[0], &[0]), - QSystemOp::TryQAlloc => { + (_, QSystemOp::Reset) => self.emit_impl( + context, + args, + RuntimeFunction::Generic(GenericRuntimeFunction::Reset), + &[0], + &[0], + ), + (_, QSystemOp::TryQAlloc) => { let [] = args .inputs .try_into() @@ -278,7 +477,10 @@ impl QSystemCodegenExtension { let qb = context .builder() .build_call( - self.runtime_func(context, RuntimeFunction::QAlloc)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::QAlloc), + )?, &[], "qalloc", )? @@ -286,7 +488,7 @@ impl QSystemCodegenExtension { .unwrap_basic(); let max_qb = self - .0 + .codegen .qubit_type(&context.typing_session()) .as_basic_type_enum() .into_int_type() @@ -302,7 +504,13 @@ impl QSystemCodegenExtension { let result = build_option(context, not_max, qb, qb_t())?; args.outputs.finish(context.builder(), [result]) } - QSystemOp::QFree => self.emit_impl(context, args, RuntimeFunction::QFree, &[0], &[]), + (_, QSystemOp::QFree) => self.emit_impl( + context, + args, + RuntimeFunction::Generic(GenericRuntimeFunction::QFree), + &[0], + &[], + ), } } @@ -325,7 +533,10 @@ impl QSystemCodegenExtension { let reset_bb = context.build_positioned_new_block("reset_bb", Some(id_bb), |context, bb| { context.builder().build_call( - self.runtime_func(context, RuntimeFunction::Reset)?, + self.runtime_func( + context, + RuntimeFunction::Generic(GenericRuntimeFunction::Reset), + )?, &[qb.into()], "reset", )?; @@ -374,11 +585,15 @@ mod test { use crate::llvm::{futures::FuturesCodegenExtension, prelude::QISPreludeCodegen}; llvm_ctx.add_extensions(|ceb| { - ceb.add_extension(QSystemCodegenExtension(QISPreludeCodegen)) - .add_extension(FuturesCodegenExtension) - .add_prelude_extensions(QISPreludeCodegen) - .add_float_extensions() - .add_logic_extensions() + // TODO: add Sol case + ceb.add_extension(QSystemCodegenExtension::new( + QSystemPlatform::Helios, + QISPreludeCodegen, + )) + .add_extension(FuturesCodegenExtension) + .add_prelude_extensions(QISPreludeCodegen) + .add_float_extensions() + .add_logic_extensions() }); let ext_op = op.to_extension_op().unwrap().into(); let mut hugr = single_op_hugr(ext_op); diff --git a/tket-qsystem/src/pytket/qsystem.rs b/tket-qsystem/src/pytket/qsystem.rs index 1329a84be..6e47d3da7 100644 --- a/tket-qsystem/src/pytket/qsystem.rs +++ b/tket-qsystem/src/pytket/qsystem.rs @@ -61,6 +61,10 @@ impl QSystemEmitter { QSystemOp::Rz => PytketOptype::Rz, QSystemOp::PhasedX => PytketOptype::PhasedX, QSystemOp::ZZPhase => PytketOptype::ZZPhase, + QSystemOp::PhasedXX => { + return Ok(EncodeStatus::Unsupported); + } + QSystemOp::Tk2 => PytketOptype::TK2, QSystemOp::Reset => PytketOptype::Reset, QSystemOp::QFree => { // Mark the qubit inputs as explored and forget about them. diff --git a/tket-qsystem/tests/guppy_opt.rs b/tket-qsystem/tests/guppy_opt.rs index 1e99946f8..8244c23de 100644 --- a/tket-qsystem/tests/guppy_opt.rs +++ b/tket-qsystem/tests/guppy_opt.rs @@ -14,7 +14,7 @@ use tket::passes::ComposablePass; use tket::passes::NormalizeGuppy; use tket::serialize::pytket::{EncodeOptions, EncodedCircuit}; -use tket_qsystem::QSystemPass; +use tket_qsystem::{QSystemPass, QSystemPlatform}; use tket1_passes::{Tket1Circuit, Tket1Pass}; const GUPPY_EXAMPLES_DIR: &str = "../test_files/guppy_optimization"; @@ -194,7 +194,10 @@ fn optimize_guppy(#[case] name: &str) { assert_eq!(count_gates(&hugr), opt); // Lower to QSystem. This may blow up the HUGR size. - QSystemPass::default().run(&mut hugr).unwrap(); + //TODO: add Sol case + QSystemPass::defaults(QSystemPlatform::Helios) + .run(&mut hugr) + .unwrap(); hugr.validate().unwrap_or_else(|e| panic!("{e}")); }