14
14
// that they have been altered from the originals.
15
15
16
16
module {
17
+ oq3.declare_variable @qc0_meas : !quir.cbit <2 >
18
+ oq3.declare_variable {input } @p1 : f64
19
+ oq3.declare_variable {input } @p2 : f64
17
20
quir.circuit @circuit_0 (%arg0: !quir.qubit <1 >) -> i1 {
18
21
%0 = quir.measure (%arg0 ) : (!quir.qubit <1 >) -> i1
19
22
quir.return %0: i1
@@ -22,6 +25,23 @@ module {
22
25
%0 = quir.measure (%arg1 ) : (!quir.qubit <1 >) -> i1
23
26
quir.return %0: i1
24
27
}
28
+ quir.circuit @circuit_2 (%arg0: !quir.qubit <1 >) -> i1 {
29
+ %0 = quir.measure (%arg0 ) : (!quir.qubit <1 >) -> i1
30
+ quir.return %0: i1
31
+ }
32
+ quir.circuit @circuit_3 (%arg1: !quir.qubit <1 >) -> i1 {
33
+ %0 = quir.measure (%arg1 ) : (!quir.qubit <1 >) -> i1
34
+ quir.return %0: i1
35
+ }
36
+ quir.circuit @circuit_4 (%arg0: !quir.qubit <1 >) -> i1 {
37
+ %0 = quir.measure (%arg0 ) : (!quir.qubit <1 >) -> i1
38
+ quir.return %0: i1
39
+ }
40
+ quir.circuit @circuit_5 (%arg0: !quir.qubit <1 >, %arg2: !quir.angle <64 >) -> i1 {
41
+ quir.call_gate @rz (%arg0 , %arg2 ) : (!quir.qubit <1 >, !quir.angle <64 >) -> ()
42
+ %0 = quir.measure (%arg0 ) : (!quir.qubit <1 >) -> i1
43
+ quir.return %0 : i1
44
+ }
25
45
// CHECK: @circuit_0_q0_circuit_1_q1(%arg0: !quir.qubit<1>
26
46
// CHECK: %0 = quir.measure(%arg0) : (!quir.qubit<1>) -> i1
27
47
// CHECK: %1 = quir.measure(%arg1) : (!quir.qubit<1>) -> i1
@@ -35,6 +55,38 @@ module {
35
55
// CHECK-NOT: {{.*}} = quir.call_circuit @circuit_0(%0) : (!quir.qubit<1>) -> i1
36
56
// CHECK-NOT: {{.*}} = quir.call_circuit @circuit_1(%1) : (!quir.qubit<1>) -> i1
37
57
// CHECK: {{.*}}:2 = quir.call_circuit @circuit_0_q0_circuit_1_q1(%0, %1) : (!quir.qubit<1>, !quir.qubit<1>) -> (i1, i1)
58
+
59
+ quir.barrier %0 : (!quir.qubit <1 >) -> ()
60
+ %4 = quir.call_circuit @circuit_2 (%0 ) : (!quir.qubit <1 >) -> i1
61
+ oq3.cbit_assign_bit @qc0_meas <2 > [0 ] : i1 = %4
62
+ %5 = quir.call_circuit @circuit_3 (%1 ) : (!quir.qubit <1 >) -> i1
63
+ oq3.cbit_assign_bit @qc0_meas <2 > [1 ] : i1 = %5
64
+ // CHECK-NOT: %4 = quir.call_circuit @circuit_2(%0) : (!quir.qubit<1>) -> i1
65
+ // CHECK-NOT: oq3.cbit_assign_bit @qc0_meas<2> [0] : i1 = %4
66
+ // CHECK-NOT: %5 = quir.call_circuit @circuit_3(%1) : (!quir.qubit<1>) -> i1
67
+ // CHECK-NOT: oq3.cbit_assign_bit @qc0_meas<2> [1] : i1 = %5
68
+ // CHECK: %[[MEAS2:.*]]:2 = quir.call_circuit @circuit_2_q0_circuit_3_q1(%0, %1) : (!quir.qubit<1>, !quir.qubit<1>) -> (i1, i1)
69
+ // CHECK-NOT: oq3.cbit_assign_bit @qc0_meas<2> [0] : i1 = %[[MEAS2]]:0
70
+ // CHECK-NOT: oq3.cbit_assign_bit @qc0_meas<2> [1] : i1 = %[[MEAS2]]:1
71
+
72
+ quir.barrier %0 : (!quir.qubit <1 >) -> ()
73
+ %6 = quir.call_circuit @circuit_4 (%0 ) : (!quir.qubit <1 >) -> i1
74
+ %7 = oq3.variable_load @p1 : f64
75
+ %8 = " oq3.cast" (%7 ) : (f64 ) -> !quir.angle <64 >
76
+ %9 = oq3.variable_load @p2 : f64
77
+ %10 = " oq3.cast" (%9 ) : (f64 ) -> !quir.angle <64 >
78
+ %11 = quir.call_circuit @circuit_5 (%1 , %8 ) : (!quir.qubit <1 >, !quir.angle <64 >) -> i1
79
+ // CHECK-NOT: %6 = quir.call_circuit @circuit_4(%0) : (!quir.qubit<1>) -> i1
80
+ // CHECK-NOT: %7 = oq3.variable_load @p1 : f64
81
+ // CHECK-NOT: %8 = "oq3.cast"(%7) : (f64) -> !quir.angle<64>
82
+ // CHECK-NOT: %9 = oq3.variable_load @p2 : f64
83
+ // CHECK-NOT: %10 = "oq3.cast"(%9) : (f64) -> !quir.angle<64>
84
+ // CHECK: %[[LOAD:.*]] = oq3.variable_load @p1 : f64
85
+ // CHECK: %[[CAST:.*]] = "oq3.cast"(%[[LOAD]]) : (f64) -> !quir.angle<64>
86
+ // CHECK: {{.*}} = oq3.variable_load @p2 : f64
87
+ // CHECK: %{{.*}}:2 = quir.call_circuit @circuit_4_q0_circuit_5_q1(%0, %1, %[[CAST]]) : (!quir.qubit<1>, !quir.qubit<1>, !quir.angle<64>) -> (i1, i1)
88
+
89
+
38
90
%c0_i32 = arith.constant 0 : i32
39
91
return %c0_i32 : i32
40
92
}
0 commit comments