microsoft/qdk

Public

mirrored fromhttps://github.com/microsoft/qdkAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
iadavis/pipeline-issue-debugging

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

source/pip/tests-integration/devices/test_atom_schedule.py

1488lines · modecode

1# Copyright (c) Microsoft Corporation.
2# Licensed under the MIT License.
3
4import pytest
5from expecttest import assert_expected_inline
6
7import qsharp
8from qsharp._device._atom import NeutralAtomDevice
9from qsharp._device._atom._scheduler import Schedule
10from .validation import (
11 ValidateBeginEndParallel,
12 PerQubitOrdering,
13 check_qubit_ordering_unchanged,
14)
15
16try:
17 import pyqir
18
19 PYQIR_AVAILABLE = True
20except ImportError:
21 PYQIR_AVAILABLE = False
22
23SKIP_REASON = "PyQIR is not available"
24
25qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RIF)
26
27
28@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
29def test_scheduler_inserts_move_to_iz_for_single_qubit_gates():
30 qir = qsharp.compile(
31 """
32 {
33 use q = Qubit();
34 SX(q);
35 }
36 """
37 )
38
39 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
40 before = PerQubitOrdering()
41 before.run(module)
42 Schedule(NeutralAtomDevice()).run(module)
43 ValidateBeginEndParallel().run(module)
44 after = PerQubitOrdering()
45 after.run(module)
46 check_qubit_ordering_unchanged(after, before)
47
48 assert_expected_inline(
49 str(module),
50 """\
51
52%Qubit = type opaque
53
54@empty_tag = internal constant [1 x i8] zeroinitializer
55
56define i64 @ENTRYPOINT__main() #0 {
57block_0:
58 call void @__quantum__rt__initialize(i8* null)
59 call void @__quantum__rt__begin_parallel()
60 call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0)
61 call void @__quantum__rt__end_parallel()
62 call void @__quantum__rt__begin_parallel()
63 call void @__quantum__qis__sx__body(%Qubit* null)
64 call void @__quantum__rt__end_parallel()
65 call void @__quantum__rt__begin_parallel()
66 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
67 call void @__quantum__rt__end_parallel()
68 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
69 ret i64 0
70}
71
72declare void @__quantum__rt__initialize(i8*)
73
74declare void @__quantum__qis__sx__body(%Qubit*)
75
76declare void @__quantum__rt__tuple_record_output(i64, i8*)
77
78declare void @__quantum__rt__begin_parallel()
79
80declare void @__quantum__rt__end_parallel()
81
82declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
83
84attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="1" "required_num_results"="0" }
85
86!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
87
88!0 = !{i32 1, !"qir_major_version", i32 1}
89!1 = !{i32 7, !"qir_minor_version", i32 0}
90!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
91!3 = !{i32 1, !"dynamic_result_management", i1 false}
92!4 = !{i32 5, !"int_computations", !5}
93!5 = !{!"i64"}
94!6 = !{i32 5, !"float_computations", !7}
95!7 = !{!"double"}
96""",
97 )
98
99
100@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
101def test_scheduler_inserts_move_to_iz_for_two_qubit_gates():
102 qir = qsharp.compile(
103 """
104 {
105 use q = Qubit[2];
106 CZ(q[0], q[1]);
107 }
108 """
109 )
110
111 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
112 before = PerQubitOrdering()
113 before.run(module)
114 Schedule(NeutralAtomDevice()).run(module)
115 ValidateBeginEndParallel().run(module)
116 after = PerQubitOrdering()
117 after.run(module)
118 check_qubit_ordering_unchanged(after, before)
119
120 assert_expected_inline(
121 str(module),
122 """\
123
124%Qubit = type opaque
125
126@empty_tag = internal constant [1 x i8] zeroinitializer
127
128define i64 @ENTRYPOINT__main() #0 {
129block_0:
130 call void @__quantum__rt__initialize(i8* null)
131 call void @__quantum__rt__begin_parallel()
132 call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0)
133 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1)
134 call void @__quantum__rt__end_parallel()
135 call void @__quantum__rt__begin_parallel()
136 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
137 call void @__quantum__rt__end_parallel()
138 call void @__quantum__rt__begin_parallel()
139 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
140 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
141 call void @__quantum__rt__end_parallel()
142 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
143 ret i64 0
144}
145
146declare void @__quantum__rt__initialize(i8*)
147
148declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
149
150declare void @__quantum__rt__tuple_record_output(i64, i8*)
151
152declare void @__quantum__rt__begin_parallel()
153
154declare void @__quantum__rt__end_parallel()
155
156declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
157
158attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" }
159
160!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
161
162!0 = !{i32 1, !"qir_major_version", i32 1}
163!1 = !{i32 7, !"qir_minor_version", i32 0}
164!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
165!3 = !{i32 1, !"dynamic_result_management", i1 false}
166!4 = !{i32 5, !"int_computations", !5}
167!5 = !{!"i64"}
168!6 = !{i32 5, !"float_computations", !7}
169!7 = !{!"double"}
170""",
171 )
172
173
174@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
175def test_scheduler_inserts_move_to_iz_for_mixed_gates_with_1q_gates_first():
176 qir = qsharp.compile(
177 """
178 {
179 use q = Qubit[2];
180 SX(q[0]);
181 CZ(q[0], q[1]);
182 }
183 """
184 )
185
186 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
187 before = PerQubitOrdering()
188 before.run(module)
189 Schedule(NeutralAtomDevice()).run(module)
190 ValidateBeginEndParallel().run(module)
191 after = PerQubitOrdering()
192 after.run(module)
193 check_qubit_ordering_unchanged(after, before)
194
195 assert_expected_inline(
196 str(module),
197 """\
198
199%Qubit = type opaque
200
201@empty_tag = internal constant [1 x i8] zeroinitializer
202
203define i64 @ENTRYPOINT__main() #0 {
204block_0:
205 call void @__quantum__rt__initialize(i8* null)
206 call void @__quantum__rt__begin_parallel()
207 call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0)
208 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1)
209 call void @__quantum__rt__end_parallel()
210 call void @__quantum__rt__begin_parallel()
211 call void @__quantum__qis__sx__body(%Qubit* null)
212 call void @__quantum__rt__end_parallel()
213 call void @__quantum__rt__begin_parallel()
214 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
215 call void @__quantum__rt__end_parallel()
216 call void @__quantum__rt__begin_parallel()
217 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
218 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
219 call void @__quantum__rt__end_parallel()
220 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
221 ret i64 0
222}
223
224declare void @__quantum__rt__initialize(i8*)
225
226declare void @__quantum__qis__sx__body(%Qubit*)
227
228declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
229
230declare void @__quantum__rt__tuple_record_output(i64, i8*)
231
232declare void @__quantum__rt__begin_parallel()
233
234declare void @__quantum__rt__end_parallel()
235
236declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
237
238attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="0" }
239
240!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
241
242!0 = !{i32 1, !"qir_major_version", i32 1}
243!1 = !{i32 7, !"qir_minor_version", i32 0}
244!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
245!3 = !{i32 1, !"dynamic_result_management", i1 false}
246!4 = !{i32 5, !"int_computations", !5}
247!5 = !{!"i64"}
248!6 = !{i32 5, !"float_computations", !7}
249!7 = !{!"double"}
250""",
251 )
252
253
254@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
255def test_scheduler_parallelizes_operations_when_possible():
256 qir = qsharp.compile(
257 """
258 {
259 use q = Qubit[4];
260 SX(q[0]);
261 SX(q[2]);
262 CZ(q[0], q[1]);
263 CZ(q[2], q[3]);
264 }
265 """
266 )
267
268 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
269 before = PerQubitOrdering()
270 before.run(module)
271 Schedule(NeutralAtomDevice()).run(module)
272 after = PerQubitOrdering()
273 ValidateBeginEndParallel().run(module)
274 after.run(module)
275 check_qubit_ordering_unchanged(after, before)
276
277 assert_expected_inline(
278 str(module),
279 """\
280
281%Qubit = type opaque
282
283@empty_tag = internal constant [1 x i8] zeroinitializer
284
285define i64 @ENTRYPOINT__main() #0 {
286block_0:
287 call void @__quantum__rt__initialize(i8* null)
288 call void @__quantum__rt__begin_parallel()
289 call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0)
290 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1)
291 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 25, i64 2)
292 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 25, i64 3)
293 call void @__quantum__rt__end_parallel()
294 call void @__quantum__rt__begin_parallel()
295 call void @__quantum__qis__sx__body(%Qubit* null)
296 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*))
297 call void @__quantum__rt__end_parallel()
298 call void @__quantum__rt__begin_parallel()
299 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
300 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*))
301 call void @__quantum__rt__end_parallel()
302 call void @__quantum__rt__begin_parallel()
303 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
304 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
305 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2)
306 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3)
307 call void @__quantum__rt__end_parallel()
308 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
309 ret i64 0
310}
311
312declare void @__quantum__rt__initialize(i8*)
313
314declare void @__quantum__qis__sx__body(%Qubit*)
315
316declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
317
318declare void @__quantum__rt__tuple_record_output(i64, i8*)
319
320declare void @__quantum__rt__begin_parallel()
321
322declare void @__quantum__rt__end_parallel()
323
324declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
325
326attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="4" "required_num_results"="0" }
327
328!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
329
330!0 = !{i32 1, !"qir_major_version", i32 1}
331!1 = !{i32 7, !"qir_minor_version", i32 0}
332!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
333!3 = !{i32 1, !"dynamic_result_management", i1 false}
334!4 = !{i32 5, !"int_computations", !5}
335!5 = !{!"i64"}
336!6 = !{i32 5, !"float_computations", !7}
337!7 = !{!"double"}
338""",
339 )
340
341
342@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
343def test_scheduler_inserts_moves_to_mz_for_measurement():
344 qir = qsharp.compile(
345 """
346 {
347 use q = Qubit[2];
348 MResetZ(q[0]);
349 MResetZ(q[1]);
350 }
351 """
352 )
353
354 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
355 before = PerQubitOrdering()
356 before.run(module)
357 Schedule(NeutralAtomDevice()).run(module)
358 after = PerQubitOrdering()
359 ValidateBeginEndParallel().run(module)
360 after.run(module)
361 check_qubit_ordering_unchanged(after, before)
362
363 assert_expected_inline(
364 str(module),
365 """\
366
367%Qubit = type opaque
368%Result = type opaque
369
370@empty_tag = internal constant [1 x i8] zeroinitializer
371
372define i64 @ENTRYPOINT__main() #0 {
373block_0:
374 call void @__quantum__rt__initialize(i8* null)
375 call void @__quantum__rt__begin_parallel()
376 call void @__quantum__qis__move__body(%Qubit* null, i64 27, i64 0)
377 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 27, i64 1)
378 call void @__quantum__rt__end_parallel()
379 call void @__quantum__rt__begin_parallel()
380 call void @__quantum__qis__mresetz__body(%Qubit* null, %Result* null)
381 call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*))
382 call void @__quantum__rt__end_parallel()
383 call void @__quantum__rt__begin_parallel()
384 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
385 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
386 call void @__quantum__rt__end_parallel()
387 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
388 ret i64 0
389}
390
391declare void @__quantum__rt__initialize(i8*)
392
393declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1
394
395declare void @__quantum__rt__tuple_record_output(i64, i8*)
396
397declare void @__quantum__rt__begin_parallel()
398
399declare void @__quantum__rt__end_parallel()
400
401declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
402
403attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" }
404attributes #1 = { "irreversible" }
405
406!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
407
408!0 = !{i32 1, !"qir_major_version", i32 1}
409!1 = !{i32 7, !"qir_minor_version", i32 0}
410!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
411!3 = !{i32 1, !"dynamic_result_management", i1 false}
412!4 = !{i32 5, !"int_computations", !5}
413!5 = !{!"i64"}
414!6 = !{i32 5, !"float_computations", !7}
415!7 = !{!"double"}
416""",
417 )
418
419
420@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
421def test_scheduler_parallelizes_1q_gates_by_iz_row():
422 device = NeutralAtomDevice()
423 num_qubits = device.column_count * 2
424 qir = qsharp.compile(
425 f"""
426 {{
427 use qs = Qubit[{num_qubits}];
428 ApplyToEach(SX, qs);
429 }}
430 """
431 )
432
433 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
434 before = PerQubitOrdering()
435 before.run(module)
436 Schedule(device).run(module)
437 after = PerQubitOrdering()
438 after.run(module)
439 check_qubit_ordering_unchanged(after, before)
440
441 assert_expected_inline(
442 str(module),
443 """\
444
445%Qubit = type opaque
446
447@empty_tag = internal constant [1 x i8] zeroinitializer
448
449define i64 @ENTRYPOINT__main() #0 {
450block_0:
451 call void @__quantum__rt__initialize(i8* null)
452 call void @__quantum__rt__begin_parallel()
453 call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0)
454 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1)
455 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2)
456 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3)
457 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4)
458 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5)
459 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6)
460 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7)
461 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8)
462 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9)
463 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10)
464 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11)
465 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12)
466 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13)
467 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14)
468 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15)
469 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16)
470 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17)
471 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18)
472 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19)
473 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20)
474 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21)
475 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22)
476 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23)
477 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24)
478 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25)
479 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26)
480 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27)
481 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28)
482 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29)
483 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30)
484 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31)
485 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32)
486 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33)
487 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34)
488 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35)
489 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36)
490 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37)
491 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38)
492 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39)
493 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0)
494 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1)
495 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2)
496 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3)
497 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4)
498 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5)
499 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6)
500 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7)
501 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8)
502 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9)
503 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10)
504 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11)
505 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12)
506 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13)
507 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14)
508 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15)
509 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16)
510 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17)
511 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18)
512 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19)
513 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20)
514 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21)
515 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22)
516 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23)
517 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24)
518 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25)
519 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26)
520 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27)
521 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28)
522 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29)
523 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30)
524 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31)
525 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32)
526 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33)
527 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34)
528 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35)
529 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36)
530 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37)
531 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38)
532 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39)
533 call void @__quantum__rt__end_parallel()
534 call void @__quantum__rt__begin_parallel()
535 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 40 to %Qubit*))
536 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 41 to %Qubit*))
537 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 42 to %Qubit*))
538 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 43 to %Qubit*))
539 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 44 to %Qubit*))
540 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 45 to %Qubit*))
541 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 46 to %Qubit*))
542 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 47 to %Qubit*))
543 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 48 to %Qubit*))
544 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 49 to %Qubit*))
545 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 50 to %Qubit*))
546 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 51 to %Qubit*))
547 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 52 to %Qubit*))
548 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 53 to %Qubit*))
549 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 54 to %Qubit*))
550 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 55 to %Qubit*))
551 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 56 to %Qubit*))
552 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 57 to %Qubit*))
553 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 58 to %Qubit*))
554 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 59 to %Qubit*))
555 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 60 to %Qubit*))
556 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 61 to %Qubit*))
557 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 62 to %Qubit*))
558 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 63 to %Qubit*))
559 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 64 to %Qubit*))
560 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 65 to %Qubit*))
561 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 66 to %Qubit*))
562 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 67 to %Qubit*))
563 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 68 to %Qubit*))
564 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 69 to %Qubit*))
565 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 70 to %Qubit*))
566 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 71 to %Qubit*))
567 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 72 to %Qubit*))
568 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 73 to %Qubit*))
569 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 74 to %Qubit*))
570 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 75 to %Qubit*))
571 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 76 to %Qubit*))
572 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 77 to %Qubit*))
573 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 78 to %Qubit*))
574 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 79 to %Qubit*))
575 call void @__quantum__rt__end_parallel()
576 call void @__quantum__rt__begin_parallel()
577 call void @__quantum__qis__sx__body(%Qubit* null)
578 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*))
579 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 2 to %Qubit*))
580 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 3 to %Qubit*))
581 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 4 to %Qubit*))
582 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 5 to %Qubit*))
583 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 6 to %Qubit*))
584 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 7 to %Qubit*))
585 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 8 to %Qubit*))
586 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 9 to %Qubit*))
587 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 10 to %Qubit*))
588 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 11 to %Qubit*))
589 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 12 to %Qubit*))
590 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 13 to %Qubit*))
591 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 14 to %Qubit*))
592 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 15 to %Qubit*))
593 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 16 to %Qubit*))
594 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 17 to %Qubit*))
595 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 18 to %Qubit*))
596 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 19 to %Qubit*))
597 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 20 to %Qubit*))
598 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 21 to %Qubit*))
599 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 22 to %Qubit*))
600 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 23 to %Qubit*))
601 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 24 to %Qubit*))
602 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 25 to %Qubit*))
603 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 26 to %Qubit*))
604 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 27 to %Qubit*))
605 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 28 to %Qubit*))
606 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 29 to %Qubit*))
607 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 30 to %Qubit*))
608 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 31 to %Qubit*))
609 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 32 to %Qubit*))
610 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 33 to %Qubit*))
611 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 34 to %Qubit*))
612 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 35 to %Qubit*))
613 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 36 to %Qubit*))
614 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 37 to %Qubit*))
615 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 38 to %Qubit*))
616 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 39 to %Qubit*))
617 call void @__quantum__rt__end_parallel()
618 call void @__quantum__rt__begin_parallel()
619 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
620 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
621 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2)
622 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3)
623 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4)
624 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5)
625 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6)
626 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7)
627 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8)
628 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9)
629 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10)
630 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11)
631 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12)
632 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13)
633 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14)
634 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15)
635 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16)
636 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17)
637 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18)
638 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19)
639 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20)
640 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21)
641 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22)
642 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23)
643 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24)
644 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25)
645 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26)
646 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27)
647 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28)
648 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29)
649 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30)
650 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31)
651 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32)
652 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33)
653 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34)
654 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35)
655 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36)
656 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37)
657 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38)
658 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39)
659 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0)
660 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1)
661 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2)
662 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3)
663 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4)
664 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5)
665 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6)
666 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7)
667 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8)
668 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9)
669 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10)
670 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11)
671 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12)
672 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13)
673 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14)
674 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15)
675 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16)
676 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17)
677 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18)
678 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19)
679 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20)
680 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21)
681 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22)
682 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23)
683 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24)
684 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25)
685 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26)
686 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27)
687 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28)
688 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29)
689 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30)
690 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31)
691 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32)
692 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33)
693 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34)
694 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35)
695 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36)
696 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37)
697 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38)
698 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39)
699 call void @__quantum__rt__end_parallel()
700 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
701 ret i64 0
702}
703
704declare void @__quantum__rt__initialize(i8*)
705
706declare void @__quantum__qis__sx__body(%Qubit*)
707
708declare void @__quantum__rt__tuple_record_output(i64, i8*)
709
710declare void @__quantum__rt__begin_parallel()
711
712declare void @__quantum__rt__end_parallel()
713
714declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
715
716attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="80" "required_num_results"="0" }
717
718!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
719
720!0 = !{i32 1, !"qir_major_version", i32 1}
721!1 = !{i32 7, !"qir_minor_version", i32 0}
722!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
723!3 = !{i32 1, !"dynamic_result_management", i1 false}
724!4 = !{i32 5, !"int_computations", !5}
725!5 = !{!"i64"}
726!6 = !{i32 5, !"float_computations", !7}
727!7 = !{!"double"}
728""",
729 )
730
731
732@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
733def test_scheduler_parallelizes_all_2q_in_iz():
734 device = NeutralAtomDevice()
735 num_qubits = device.column_count * 2
736 qir = qsharp.compile(
737 f"""
738 {{
739 use qs = Qubit[{num_qubits}];
740 for i in 0..2..(Length(qs)-2) {{
741 CZ(qs[i], qs[i+1]);
742 }}
743 }}
744 """
745 )
746
747 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
748 before = PerQubitOrdering()
749 before.run(module)
750 Schedule(device).run(module)
751 after = PerQubitOrdering()
752 after.run(module)
753 check_qubit_ordering_unchanged(after, before)
754
755 assert_expected_inline(
756 str(module),
757 """\
758
759%Qubit = type opaque
760
761@empty_tag = internal constant [1 x i8] zeroinitializer
762
763define i64 @ENTRYPOINT__main() #0 {
764block_0:
765 call void @__quantum__rt__initialize(i8* null)
766 call void @__quantum__rt__begin_parallel()
767 call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0)
768 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1)
769 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2)
770 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3)
771 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4)
772 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5)
773 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6)
774 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7)
775 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8)
776 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9)
777 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10)
778 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11)
779 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12)
780 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13)
781 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14)
782 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15)
783 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16)
784 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17)
785 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18)
786 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19)
787 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20)
788 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21)
789 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22)
790 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23)
791 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24)
792 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25)
793 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26)
794 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27)
795 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28)
796 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29)
797 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30)
798 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31)
799 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32)
800 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33)
801 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34)
802 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35)
803 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36)
804 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37)
805 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38)
806 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39)
807 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0)
808 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1)
809 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2)
810 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3)
811 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4)
812 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5)
813 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6)
814 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7)
815 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8)
816 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9)
817 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10)
818 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11)
819 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12)
820 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13)
821 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14)
822 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15)
823 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16)
824 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17)
825 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18)
826 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19)
827 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20)
828 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21)
829 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22)
830 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23)
831 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24)
832 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25)
833 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26)
834 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27)
835 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28)
836 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29)
837 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30)
838 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31)
839 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32)
840 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33)
841 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34)
842 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35)
843 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36)
844 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37)
845 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38)
846 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39)
847 call void @__quantum__rt__end_parallel()
848 call void @__quantum__rt__begin_parallel()
849 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
850 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*))
851 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*))
852 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*))
853 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*))
854 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*))
855 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*))
856 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*))
857 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*))
858 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*))
859 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*))
860 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*))
861 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 24 to %Qubit*), %Qubit* inttoptr (i64 25 to %Qubit*))
862 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 26 to %Qubit*), %Qubit* inttoptr (i64 27 to %Qubit*))
863 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 28 to %Qubit*), %Qubit* inttoptr (i64 29 to %Qubit*))
864 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 30 to %Qubit*), %Qubit* inttoptr (i64 31 to %Qubit*))
865 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 32 to %Qubit*), %Qubit* inttoptr (i64 33 to %Qubit*))
866 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 34 to %Qubit*), %Qubit* inttoptr (i64 35 to %Qubit*))
867 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 36 to %Qubit*), %Qubit* inttoptr (i64 37 to %Qubit*))
868 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 38 to %Qubit*), %Qubit* inttoptr (i64 39 to %Qubit*))
869 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 40 to %Qubit*), %Qubit* inttoptr (i64 41 to %Qubit*))
870 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 42 to %Qubit*), %Qubit* inttoptr (i64 43 to %Qubit*))
871 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 44 to %Qubit*), %Qubit* inttoptr (i64 45 to %Qubit*))
872 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 46 to %Qubit*), %Qubit* inttoptr (i64 47 to %Qubit*))
873 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 48 to %Qubit*), %Qubit* inttoptr (i64 49 to %Qubit*))
874 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 50 to %Qubit*), %Qubit* inttoptr (i64 51 to %Qubit*))
875 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 52 to %Qubit*), %Qubit* inttoptr (i64 53 to %Qubit*))
876 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 54 to %Qubit*), %Qubit* inttoptr (i64 55 to %Qubit*))
877 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 56 to %Qubit*), %Qubit* inttoptr (i64 57 to %Qubit*))
878 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 58 to %Qubit*), %Qubit* inttoptr (i64 59 to %Qubit*))
879 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 60 to %Qubit*), %Qubit* inttoptr (i64 61 to %Qubit*))
880 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 62 to %Qubit*), %Qubit* inttoptr (i64 63 to %Qubit*))
881 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 64 to %Qubit*), %Qubit* inttoptr (i64 65 to %Qubit*))
882 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 66 to %Qubit*), %Qubit* inttoptr (i64 67 to %Qubit*))
883 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 68 to %Qubit*), %Qubit* inttoptr (i64 69 to %Qubit*))
884 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 70 to %Qubit*), %Qubit* inttoptr (i64 71 to %Qubit*))
885 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 72 to %Qubit*), %Qubit* inttoptr (i64 73 to %Qubit*))
886 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 74 to %Qubit*), %Qubit* inttoptr (i64 75 to %Qubit*))
887 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 76 to %Qubit*), %Qubit* inttoptr (i64 77 to %Qubit*))
888 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 78 to %Qubit*), %Qubit* inttoptr (i64 79 to %Qubit*))
889 call void @__quantum__rt__end_parallel()
890 call void @__quantum__rt__begin_parallel()
891 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
892 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
893 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2)
894 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3)
895 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4)
896 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5)
897 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6)
898 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7)
899 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8)
900 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9)
901 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10)
902 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11)
903 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12)
904 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13)
905 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14)
906 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15)
907 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16)
908 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17)
909 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18)
910 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19)
911 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20)
912 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21)
913 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22)
914 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23)
915 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24)
916 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25)
917 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26)
918 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27)
919 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28)
920 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29)
921 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30)
922 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31)
923 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32)
924 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33)
925 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34)
926 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35)
927 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36)
928 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37)
929 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38)
930 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39)
931 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0)
932 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1)
933 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2)
934 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3)
935 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4)
936 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5)
937 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6)
938 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7)
939 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8)
940 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9)
941 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10)
942 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11)
943 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12)
944 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13)
945 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14)
946 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15)
947 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16)
948 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17)
949 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18)
950 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19)
951 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20)
952 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21)
953 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22)
954 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23)
955 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24)
956 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25)
957 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26)
958 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27)
959 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28)
960 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29)
961 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30)
962 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31)
963 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32)
964 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33)
965 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34)
966 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35)
967 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36)
968 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37)
969 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38)
970 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39)
971 call void @__quantum__rt__end_parallel()
972 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
973 ret i64 0
974}
975
976declare void @__quantum__rt__initialize(i8*)
977
978declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
979
980declare void @__quantum__rt__tuple_record_output(i64, i8*)
981
982declare void @__quantum__rt__begin_parallel()
983
984declare void @__quantum__rt__end_parallel()
985
986declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
987
988attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="80" "required_num_results"="0" }
989
990!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
991
992!0 = !{i32 1, !"qir_major_version", i32 1}
993!1 = !{i32 7, !"qir_minor_version", i32 0}
994!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
995!3 = !{i32 1, !"dynamic_result_management", i1 false}
996!4 = !{i32 5, !"int_computations", !5}
997!5 = !{!"i64"}
998!6 = !{i32 5, !"float_computations", !7}
999!7 = !{!"double"}
1000""",
1001 )
1002
1003
1004@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
1005def test_scheduler_splits_large_parallel_2q_in_iz_by_iz_size():
1006 device = NeutralAtomDevice()
1007 num_qubits = int(
1008 device.column_count * device.get_interaction_zones()[0].row_count * 1.5
1009 )
1010 qir = qsharp.compile(
1011 f"""
1012 {{
1013 use qs = Qubit[{num_qubits}];
1014 for i in 0..2..(Length(qs)-2) {{
1015 CZ(qs[i], qs[i+1]);
1016 }}
1017 }}
1018 """
1019 )
1020
1021 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
1022 before = PerQubitOrdering()
1023 before.run(module)
1024 Schedule(device).run(module)
1025 after = PerQubitOrdering()
1026 after.run(module)
1027 check_qubit_ordering_unchanged(after, before)
1028
1029 assert_expected_inline(
1030 str(module),
1031 """\
1032
1033%Qubit = type opaque
1034
1035@empty_tag = internal constant [1 x i8] zeroinitializer
1036
1037define i64 @ENTRYPOINT__main() #0 {
1038block_0:
1039 call void @__quantum__rt__initialize(i8* null)
1040 call void @__quantum__rt__begin_parallel()
1041 call void @__quantum__qis__move__body(%Qubit* null, i64 26, i64 0)
1042 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 26, i64 1)
1043 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 26, i64 2)
1044 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 26, i64 3)
1045 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 26, i64 4)
1046 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 26, i64 5)
1047 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 26, i64 6)
1048 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 26, i64 7)
1049 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 26, i64 8)
1050 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 26, i64 9)
1051 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 26, i64 10)
1052 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 26, i64 11)
1053 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 26, i64 12)
1054 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 26, i64 13)
1055 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 26, i64 14)
1056 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 26, i64 15)
1057 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 26, i64 16)
1058 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 26, i64 17)
1059 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 26, i64 18)
1060 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 26, i64 19)
1061 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 26, i64 20)
1062 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 26, i64 21)
1063 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 26, i64 22)
1064 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 26, i64 23)
1065 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 26, i64 24)
1066 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 26, i64 25)
1067 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 26, i64 26)
1068 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 26, i64 27)
1069 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 26, i64 28)
1070 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 26, i64 29)
1071 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 26, i64 30)
1072 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 26, i64 31)
1073 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 26, i64 32)
1074 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 26, i64 33)
1075 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 26, i64 34)
1076 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 26, i64 35)
1077 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 26, i64 36)
1078 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 26, i64 37)
1079 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 26, i64 38)
1080 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 26, i64 39)
1081 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 25, i64 0)
1082 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 25, i64 1)
1083 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 25, i64 2)
1084 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 25, i64 3)
1085 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 25, i64 4)
1086 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 25, i64 5)
1087 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 25, i64 6)
1088 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 25, i64 7)
1089 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 25, i64 8)
1090 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 25, i64 9)
1091 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 25, i64 10)
1092 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 25, i64 11)
1093 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 25, i64 12)
1094 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 25, i64 13)
1095 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 25, i64 14)
1096 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 25, i64 15)
1097 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 25, i64 16)
1098 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 25, i64 17)
1099 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 25, i64 18)
1100 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 25, i64 19)
1101 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 25, i64 20)
1102 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 25, i64 21)
1103 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 25, i64 22)
1104 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 25, i64 23)
1105 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 25, i64 24)
1106 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 25, i64 25)
1107 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 25, i64 26)
1108 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 25, i64 27)
1109 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 25, i64 28)
1110 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 25, i64 29)
1111 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 25, i64 30)
1112 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 25, i64 31)
1113 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 25, i64 32)
1114 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 25, i64 33)
1115 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 25, i64 34)
1116 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 25, i64 35)
1117 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 25, i64 36)
1118 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 25, i64 37)
1119 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 25, i64 38)
1120 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 25, i64 39)
1121 call void @__quantum__rt__end_parallel()
1122 call void @__quantum__rt__begin_parallel()
1123 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
1124 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 2 to %Qubit*), %Qubit* inttoptr (i64 3 to %Qubit*))
1125 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 4 to %Qubit*), %Qubit* inttoptr (i64 5 to %Qubit*))
1126 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 6 to %Qubit*), %Qubit* inttoptr (i64 7 to %Qubit*))
1127 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 8 to %Qubit*), %Qubit* inttoptr (i64 9 to %Qubit*))
1128 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 10 to %Qubit*), %Qubit* inttoptr (i64 11 to %Qubit*))
1129 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 12 to %Qubit*), %Qubit* inttoptr (i64 13 to %Qubit*))
1130 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 14 to %Qubit*), %Qubit* inttoptr (i64 15 to %Qubit*))
1131 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 16 to %Qubit*), %Qubit* inttoptr (i64 17 to %Qubit*))
1132 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 18 to %Qubit*), %Qubit* inttoptr (i64 19 to %Qubit*))
1133 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 20 to %Qubit*), %Qubit* inttoptr (i64 21 to %Qubit*))
1134 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 22 to %Qubit*), %Qubit* inttoptr (i64 23 to %Qubit*))
1135 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 24 to %Qubit*), %Qubit* inttoptr (i64 25 to %Qubit*))
1136 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 26 to %Qubit*), %Qubit* inttoptr (i64 27 to %Qubit*))
1137 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 28 to %Qubit*), %Qubit* inttoptr (i64 29 to %Qubit*))
1138 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 30 to %Qubit*), %Qubit* inttoptr (i64 31 to %Qubit*))
1139 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 32 to %Qubit*), %Qubit* inttoptr (i64 33 to %Qubit*))
1140 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 34 to %Qubit*), %Qubit* inttoptr (i64 35 to %Qubit*))
1141 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 36 to %Qubit*), %Qubit* inttoptr (i64 37 to %Qubit*))
1142 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 38 to %Qubit*), %Qubit* inttoptr (i64 39 to %Qubit*))
1143 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 40 to %Qubit*), %Qubit* inttoptr (i64 41 to %Qubit*))
1144 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 42 to %Qubit*), %Qubit* inttoptr (i64 43 to %Qubit*))
1145 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 44 to %Qubit*), %Qubit* inttoptr (i64 45 to %Qubit*))
1146 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 46 to %Qubit*), %Qubit* inttoptr (i64 47 to %Qubit*))
1147 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 48 to %Qubit*), %Qubit* inttoptr (i64 49 to %Qubit*))
1148 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 50 to %Qubit*), %Qubit* inttoptr (i64 51 to %Qubit*))
1149 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 52 to %Qubit*), %Qubit* inttoptr (i64 53 to %Qubit*))
1150 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 54 to %Qubit*), %Qubit* inttoptr (i64 55 to %Qubit*))
1151 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 56 to %Qubit*), %Qubit* inttoptr (i64 57 to %Qubit*))
1152 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 58 to %Qubit*), %Qubit* inttoptr (i64 59 to %Qubit*))
1153 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 60 to %Qubit*), %Qubit* inttoptr (i64 61 to %Qubit*))
1154 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 62 to %Qubit*), %Qubit* inttoptr (i64 63 to %Qubit*))
1155 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 64 to %Qubit*), %Qubit* inttoptr (i64 65 to %Qubit*))
1156 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 66 to %Qubit*), %Qubit* inttoptr (i64 67 to %Qubit*))
1157 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 68 to %Qubit*), %Qubit* inttoptr (i64 69 to %Qubit*))
1158 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 70 to %Qubit*), %Qubit* inttoptr (i64 71 to %Qubit*))
1159 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 72 to %Qubit*), %Qubit* inttoptr (i64 73 to %Qubit*))
1160 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 74 to %Qubit*), %Qubit* inttoptr (i64 75 to %Qubit*))
1161 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 76 to %Qubit*), %Qubit* inttoptr (i64 77 to %Qubit*))
1162 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 78 to %Qubit*), %Qubit* inttoptr (i64 79 to %Qubit*))
1163 call void @__quantum__rt__end_parallel()
1164 call void @__quantum__rt__begin_parallel()
1165 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
1166 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
1167 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 2 to %Qubit*), i64 24, i64 2)
1168 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 3 to %Qubit*), i64 24, i64 3)
1169 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 4 to %Qubit*), i64 24, i64 4)
1170 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 5 to %Qubit*), i64 24, i64 5)
1171 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 6 to %Qubit*), i64 24, i64 6)
1172 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 7 to %Qubit*), i64 24, i64 7)
1173 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 8 to %Qubit*), i64 24, i64 8)
1174 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 9 to %Qubit*), i64 24, i64 9)
1175 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 10 to %Qubit*), i64 24, i64 10)
1176 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 11 to %Qubit*), i64 24, i64 11)
1177 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 12 to %Qubit*), i64 24, i64 12)
1178 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 13 to %Qubit*), i64 24, i64 13)
1179 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 14 to %Qubit*), i64 24, i64 14)
1180 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 15 to %Qubit*), i64 24, i64 15)
1181 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 16 to %Qubit*), i64 24, i64 16)
1182 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 17 to %Qubit*), i64 24, i64 17)
1183 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 18 to %Qubit*), i64 24, i64 18)
1184 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 19 to %Qubit*), i64 24, i64 19)
1185 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 20 to %Qubit*), i64 24, i64 20)
1186 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 21 to %Qubit*), i64 24, i64 21)
1187 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 22 to %Qubit*), i64 24, i64 22)
1188 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 23 to %Qubit*), i64 24, i64 23)
1189 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 24 to %Qubit*), i64 24, i64 24)
1190 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 25 to %Qubit*), i64 24, i64 25)
1191 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 26 to %Qubit*), i64 24, i64 26)
1192 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 27 to %Qubit*), i64 24, i64 27)
1193 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 28 to %Qubit*), i64 24, i64 28)
1194 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 29 to %Qubit*), i64 24, i64 29)
1195 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 30 to %Qubit*), i64 24, i64 30)
1196 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 31 to %Qubit*), i64 24, i64 31)
1197 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 32 to %Qubit*), i64 24, i64 32)
1198 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 33 to %Qubit*), i64 24, i64 33)
1199 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 34 to %Qubit*), i64 24, i64 34)
1200 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 35 to %Qubit*), i64 24, i64 35)
1201 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 36 to %Qubit*), i64 24, i64 36)
1202 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 37 to %Qubit*), i64 24, i64 37)
1203 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 38 to %Qubit*), i64 24, i64 38)
1204 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 39 to %Qubit*), i64 24, i64 39)
1205 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 40 to %Qubit*), i64 23, i64 0)
1206 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 41 to %Qubit*), i64 23, i64 1)
1207 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 42 to %Qubit*), i64 23, i64 2)
1208 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 43 to %Qubit*), i64 23, i64 3)
1209 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 44 to %Qubit*), i64 23, i64 4)
1210 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 45 to %Qubit*), i64 23, i64 5)
1211 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 46 to %Qubit*), i64 23, i64 6)
1212 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 47 to %Qubit*), i64 23, i64 7)
1213 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 48 to %Qubit*), i64 23, i64 8)
1214 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 49 to %Qubit*), i64 23, i64 9)
1215 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 50 to %Qubit*), i64 23, i64 10)
1216 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 51 to %Qubit*), i64 23, i64 11)
1217 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 52 to %Qubit*), i64 23, i64 12)
1218 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 53 to %Qubit*), i64 23, i64 13)
1219 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 54 to %Qubit*), i64 23, i64 14)
1220 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 55 to %Qubit*), i64 23, i64 15)
1221 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 56 to %Qubit*), i64 23, i64 16)
1222 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 57 to %Qubit*), i64 23, i64 17)
1223 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 58 to %Qubit*), i64 23, i64 18)
1224 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 59 to %Qubit*), i64 23, i64 19)
1225 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 60 to %Qubit*), i64 23, i64 20)
1226 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 61 to %Qubit*), i64 23, i64 21)
1227 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 62 to %Qubit*), i64 23, i64 22)
1228 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 63 to %Qubit*), i64 23, i64 23)
1229 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 64 to %Qubit*), i64 23, i64 24)
1230 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 65 to %Qubit*), i64 23, i64 25)
1231 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 66 to %Qubit*), i64 23, i64 26)
1232 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 67 to %Qubit*), i64 23, i64 27)
1233 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 68 to %Qubit*), i64 23, i64 28)
1234 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 69 to %Qubit*), i64 23, i64 29)
1235 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 70 to %Qubit*), i64 23, i64 30)
1236 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 71 to %Qubit*), i64 23, i64 31)
1237 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 72 to %Qubit*), i64 23, i64 32)
1238 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 73 to %Qubit*), i64 23, i64 33)
1239 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 74 to %Qubit*), i64 23, i64 34)
1240 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 75 to %Qubit*), i64 23, i64 35)
1241 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 76 to %Qubit*), i64 23, i64 36)
1242 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 77 to %Qubit*), i64 23, i64 37)
1243 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 78 to %Qubit*), i64 23, i64 38)
1244 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 79 to %Qubit*), i64 23, i64 39)
1245 call void @__quantum__rt__end_parallel()
1246 call void @__quantum__rt__begin_parallel()
1247 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 80 to %Qubit*), i64 25, i64 0)
1248 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 81 to %Qubit*), i64 25, i64 1)
1249 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 82 to %Qubit*), i64 25, i64 2)
1250 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 83 to %Qubit*), i64 25, i64 3)
1251 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 84 to %Qubit*), i64 25, i64 4)
1252 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 85 to %Qubit*), i64 25, i64 5)
1253 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 86 to %Qubit*), i64 25, i64 6)
1254 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 87 to %Qubit*), i64 25, i64 7)
1255 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 88 to %Qubit*), i64 25, i64 8)
1256 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 89 to %Qubit*), i64 25, i64 9)
1257 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 90 to %Qubit*), i64 25, i64 10)
1258 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 91 to %Qubit*), i64 25, i64 11)
1259 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 92 to %Qubit*), i64 25, i64 12)
1260 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 93 to %Qubit*), i64 25, i64 13)
1261 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 94 to %Qubit*), i64 25, i64 14)
1262 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 95 to %Qubit*), i64 25, i64 15)
1263 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 96 to %Qubit*), i64 25, i64 16)
1264 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 97 to %Qubit*), i64 25, i64 17)
1265 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 98 to %Qubit*), i64 25, i64 18)
1266 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 99 to %Qubit*), i64 25, i64 19)
1267 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 100 to %Qubit*), i64 25, i64 20)
1268 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 101 to %Qubit*), i64 25, i64 21)
1269 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 102 to %Qubit*), i64 25, i64 22)
1270 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 103 to %Qubit*), i64 25, i64 23)
1271 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 104 to %Qubit*), i64 25, i64 24)
1272 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 105 to %Qubit*), i64 25, i64 25)
1273 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 106 to %Qubit*), i64 25, i64 26)
1274 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 107 to %Qubit*), i64 25, i64 27)
1275 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 108 to %Qubit*), i64 25, i64 28)
1276 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 109 to %Qubit*), i64 25, i64 29)
1277 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 110 to %Qubit*), i64 25, i64 30)
1278 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 111 to %Qubit*), i64 25, i64 31)
1279 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 112 to %Qubit*), i64 25, i64 32)
1280 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 113 to %Qubit*), i64 25, i64 33)
1281 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 114 to %Qubit*), i64 25, i64 34)
1282 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 115 to %Qubit*), i64 25, i64 35)
1283 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 116 to %Qubit*), i64 25, i64 36)
1284 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 117 to %Qubit*), i64 25, i64 37)
1285 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 118 to %Qubit*), i64 25, i64 38)
1286 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 119 to %Qubit*), i64 25, i64 39)
1287 call void @__quantum__rt__end_parallel()
1288 call void @__quantum__rt__begin_parallel()
1289 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 80 to %Qubit*), %Qubit* inttoptr (i64 81 to %Qubit*))
1290 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 82 to %Qubit*), %Qubit* inttoptr (i64 83 to %Qubit*))
1291 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 84 to %Qubit*), %Qubit* inttoptr (i64 85 to %Qubit*))
1292 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 86 to %Qubit*), %Qubit* inttoptr (i64 87 to %Qubit*))
1293 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 88 to %Qubit*), %Qubit* inttoptr (i64 89 to %Qubit*))
1294 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 90 to %Qubit*), %Qubit* inttoptr (i64 91 to %Qubit*))
1295 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 92 to %Qubit*), %Qubit* inttoptr (i64 93 to %Qubit*))
1296 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 94 to %Qubit*), %Qubit* inttoptr (i64 95 to %Qubit*))
1297 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 96 to %Qubit*), %Qubit* inttoptr (i64 97 to %Qubit*))
1298 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 98 to %Qubit*), %Qubit* inttoptr (i64 99 to %Qubit*))
1299 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 100 to %Qubit*), %Qubit* inttoptr (i64 101 to %Qubit*))
1300 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 102 to %Qubit*), %Qubit* inttoptr (i64 103 to %Qubit*))
1301 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 104 to %Qubit*), %Qubit* inttoptr (i64 105 to %Qubit*))
1302 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 106 to %Qubit*), %Qubit* inttoptr (i64 107 to %Qubit*))
1303 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 108 to %Qubit*), %Qubit* inttoptr (i64 109 to %Qubit*))
1304 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 110 to %Qubit*), %Qubit* inttoptr (i64 111 to %Qubit*))
1305 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 112 to %Qubit*), %Qubit* inttoptr (i64 113 to %Qubit*))
1306 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 114 to %Qubit*), %Qubit* inttoptr (i64 115 to %Qubit*))
1307 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 116 to %Qubit*), %Qubit* inttoptr (i64 117 to %Qubit*))
1308 call void @__quantum__qis__cz__body(%Qubit* inttoptr (i64 118 to %Qubit*), %Qubit* inttoptr (i64 119 to %Qubit*))
1309 call void @__quantum__rt__end_parallel()
1310 call void @__quantum__rt__begin_parallel()
1311 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 80 to %Qubit*), i64 22, i64 0)
1312 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 81 to %Qubit*), i64 22, i64 1)
1313 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 82 to %Qubit*), i64 22, i64 2)
1314 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 83 to %Qubit*), i64 22, i64 3)
1315 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 84 to %Qubit*), i64 22, i64 4)
1316 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 85 to %Qubit*), i64 22, i64 5)
1317 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 86 to %Qubit*), i64 22, i64 6)
1318 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 87 to %Qubit*), i64 22, i64 7)
1319 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 88 to %Qubit*), i64 22, i64 8)
1320 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 89 to %Qubit*), i64 22, i64 9)
1321 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 90 to %Qubit*), i64 22, i64 10)
1322 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 91 to %Qubit*), i64 22, i64 11)
1323 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 92 to %Qubit*), i64 22, i64 12)
1324 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 93 to %Qubit*), i64 22, i64 13)
1325 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 94 to %Qubit*), i64 22, i64 14)
1326 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 95 to %Qubit*), i64 22, i64 15)
1327 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 96 to %Qubit*), i64 22, i64 16)
1328 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 97 to %Qubit*), i64 22, i64 17)
1329 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 98 to %Qubit*), i64 22, i64 18)
1330 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 99 to %Qubit*), i64 22, i64 19)
1331 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 100 to %Qubit*), i64 22, i64 20)
1332 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 101 to %Qubit*), i64 22, i64 21)
1333 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 102 to %Qubit*), i64 22, i64 22)
1334 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 103 to %Qubit*), i64 22, i64 23)
1335 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 104 to %Qubit*), i64 22, i64 24)
1336 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 105 to %Qubit*), i64 22, i64 25)
1337 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 106 to %Qubit*), i64 22, i64 26)
1338 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 107 to %Qubit*), i64 22, i64 27)
1339 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 108 to %Qubit*), i64 22, i64 28)
1340 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 109 to %Qubit*), i64 22, i64 29)
1341 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 110 to %Qubit*), i64 22, i64 30)
1342 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 111 to %Qubit*), i64 22, i64 31)
1343 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 112 to %Qubit*), i64 22, i64 32)
1344 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 113 to %Qubit*), i64 22, i64 33)
1345 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 114 to %Qubit*), i64 22, i64 34)
1346 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 115 to %Qubit*), i64 22, i64 35)
1347 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 116 to %Qubit*), i64 22, i64 36)
1348 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 117 to %Qubit*), i64 22, i64 37)
1349 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 118 to %Qubit*), i64 22, i64 38)
1350 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 119 to %Qubit*), i64 22, i64 39)
1351 call void @__quantum__rt__end_parallel()
1352 call void @__quantum__rt__tuple_record_output(i64 0, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @empty_tag, i64 0, i64 0))
1353 ret i64 0
1354}
1355
1356declare void @__quantum__rt__initialize(i8*)
1357
1358declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
1359
1360declare void @__quantum__rt__tuple_record_output(i64, i8*)
1361
1362declare void @__quantum__rt__begin_parallel()
1363
1364declare void @__quantum__rt__end_parallel()
1365
1366declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
1367
1368attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="120" "required_num_results"="0" }
1369
1370!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
1371
1372!0 = !{i32 1, !"qir_major_version", i32 1}
1373!1 = !{i32 7, !"qir_minor_version", i32 0}
1374!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
1375!3 = !{i32 1, !"dynamic_result_management", i1 false}
1376!4 = !{i32 5, !"int_computations", !5}
1377!5 = !{!"i64"}
1378!6 = !{i32 5, !"float_computations", !7}
1379!7 = !{!"double"}
1380""",
1381 )
1382
1383
1384@pytest.mark.skipif(not PYQIR_AVAILABLE, reason=SKIP_REASON)
1385def test_scheduler_moves_qubits_to_iz_for_1q_gate_after_2q_gate_before_measurement():
1386 qir = qsharp.compile(
1387 """
1388 {
1389 use qs = Qubit[2];
1390 SX(qs[0]);
1391 SX(qs[1]);
1392 CZ(qs[0], qs[1]);
1393 SX(qs[1]);
1394 MResetZ(qs[1])
1395 }
1396 """
1397 )
1398
1399 module = pyqir.Module.from_ir(pyqir.Context(), str(qir))
1400 before = PerQubitOrdering()
1401 before.run(module)
1402 Schedule(NeutralAtomDevice()).run(module)
1403 after = PerQubitOrdering()
1404 ValidateBeginEndParallel().run(module)
1405 after.run(module)
1406 check_qubit_ordering_unchanged(after, before)
1407
1408 assert_expected_inline(
1409 str(module),
1410 """\
1411
1412%Qubit = type opaque
1413%Result = type opaque
1414
1415@empty_tag = internal constant [1 x i8] zeroinitializer
1416@0 = internal constant [4 x i8] c"0_r\\00"
1417
1418define i64 @ENTRYPOINT__main() #0 {
1419block_0:
1420 call void @__quantum__rt__initialize(i8* null)
1421 call void @__quantum__rt__begin_parallel()
1422 call void @__quantum__qis__move__body(%Qubit* null, i64 25, i64 0)
1423 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1)
1424 call void @__quantum__rt__end_parallel()
1425 call void @__quantum__rt__begin_parallel()
1426 call void @__quantum__qis__sx__body(%Qubit* null)
1427 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*))
1428 call void @__quantum__rt__end_parallel()
1429 call void @__quantum__rt__begin_parallel()
1430 call void @__quantum__qis__cz__body(%Qubit* null, %Qubit* inttoptr (i64 1 to %Qubit*))
1431 call void @__quantum__rt__end_parallel()
1432 call void @__quantum__rt__begin_parallel()
1433 call void @__quantum__qis__move__body(%Qubit* null, i64 24, i64 0)
1434 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
1435 call void @__quantum__rt__end_parallel()
1436 call void @__quantum__rt__begin_parallel()
1437 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 25, i64 1)
1438 call void @__quantum__rt__end_parallel()
1439 call void @__quantum__rt__begin_parallel()
1440 call void @__quantum__qis__sx__body(%Qubit* inttoptr (i64 1 to %Qubit*))
1441 call void @__quantum__rt__end_parallel()
1442 call void @__quantum__rt__begin_parallel()
1443 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
1444 call void @__quantum__rt__end_parallel()
1445 call void @__quantum__rt__begin_parallel()
1446 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 27, i64 1)
1447 call void @__quantum__rt__end_parallel()
1448 call void @__quantum__rt__begin_parallel()
1449 call void @__quantum__qis__mresetz__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* null)
1450 call void @__quantum__rt__end_parallel()
1451 call void @__quantum__rt__begin_parallel()
1452 call void @__quantum__qis__move__body(%Qubit* inttoptr (i64 1 to %Qubit*), i64 24, i64 1)
1453 call void @__quantum__rt__end_parallel()
1454 call void @__quantum__rt__result_record_output(%Result* null, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @0, i64 0, i64 0))
1455 ret i64 0
1456}
1457
1458declare void @__quantum__rt__initialize(i8*)
1459
1460declare void @__quantum__qis__sx__body(%Qubit*)
1461
1462declare void @__quantum__qis__cz__body(%Qubit*, %Qubit*)
1463
1464declare void @__quantum__qis__mresetz__body(%Qubit*, %Result*) #1
1465
1466declare void @__quantum__rt__result_record_output(%Result*, i8*)
1467
1468declare void @__quantum__rt__begin_parallel()
1469
1470declare void @__quantum__rt__end_parallel()
1471
1472declare void @__quantum__qis__move__body(%Qubit*, i64, i64)
1473
1474attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="1" }
1475attributes #1 = { "irreversible" }
1476
1477!llvm.module.flags = !{!0, !1, !2, !3, !4, !6}
1478
1479!0 = !{i32 1, !"qir_major_version", i32 1}
1480!1 = !{i32 7, !"qir_minor_version", i32 0}
1481!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
1482!3 = !{i32 1, !"dynamic_result_management", i1 false}
1483!4 = !{i32 5, !"int_computations", !5}
1484!5 = !{!"i64"}
1485!6 = !{i32 5, !"float_computations", !7}
1486!7 = !{!"double"}
1487""",
1488 )
1489