1717
1818func.func public @merge_ppr_ppm_test_1 (%q1: !quantum.bit ) -> tensor <i1 > {
1919
20- // CHECK-NOT: qec.ppr["X"](4)
21- // CHECK: qec.ppm ["X"] %
22- // CHECK-NOT: qec.ppr["X"](4)
20+ // CHECK-NOT: qec.ppr ["X"]
21+ // CHECK: qec.ppm ["X"] %
22+ // CHECK-NOT: qec.ppr ["X"]
2323 %0 = qec.ppr [" X" ](4 ) %q1: !quantum.bit
2424 %m , %out_qubits = qec.ppm [" X" ] %0 : !quantum.bit
2525 %from_elements = tensor.from_elements %m : tensor <i1 >
@@ -28,9 +28,8 @@ func.func public @merge_ppr_ppm_test_1(%q1: !quantum.bit) -> tensor<i1> {
2828
2929func.func public @merge_ppr_ppm_test_2 (%q1: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
3030
31- // CHECK-NOT: qec.ppr["X"](4)
32- // CHECK: qec.ppm ["Z"](-1) %
33- // CHECK-NOT: qec.ppr["X"](4)
31+ // CHECK: qec.ppm ["Z"](-1) %
32+ // CHECK: qec.ppr ["X"](4)
3433 %0 = qec.ppr [" X" ](4 ) %q1: !quantum.bit
3534 %m , %out_qubits = qec.ppm [" Y" ] %0 : !quantum.bit
3635 %from_elements = tensor.from_elements %m : tensor <i1 >
@@ -39,9 +38,8 @@ func.func public @merge_ppr_ppm_test_2(%q1: !quantum.bit) -> (tensor<i1>, !quant
3938
4039func.func public @merge_ppr_ppm_test_3 (%q1: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
4140
42- // CHECK-NOT: qec.ppr["X"](4)
43- // CHECK: qec.ppm ["Y"] %
44- // CHECK-NOT: qec.ppr["X"](4)
41+ // CHECK: qec.ppm ["Y"] %
42+ // CHECK: qec.ppr ["X"](-4)
4543 %0 = qec.ppr [" X" ](-4 ) %q1: !quantum.bit
4644 %m , %out_qubits = qec.ppm [" Z" ](-1 ) %0 : !quantum.bit
4745 %from_elements = tensor.from_elements %m : tensor <i1 >
@@ -50,12 +48,12 @@ func.func public @merge_ppr_ppm_test_3(%q1: !quantum.bit) -> (tensor<i1>, !quant
5048
5149func.func public @merge_ppr_ppm_test_4 (%q1: !quantum.bit , %q2: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
5250
53- // CHECK: [[q0:%.+]] = qec.ppr ["X"](8) %arg0 : !quantum.bit
51+ // CHECK: [[q0:%.+]] = qec.ppr ["X"](8) %arg0 : !quantum.bit
5452 // CHECK-NOT: ["X"](4)
55- // CHECK: [[m1:%.+]], [[o1:%.+]]:2 = qec.ppm ["X", "X"] %arg1, [[q0]]
53+ // CHECK: [[m1:%.+]], [[o1:%.+]]:2 = qec.ppm ["X", "X"] %arg1, [[q0]]
5654 // CHECK-NOT: ["X"](4)
57- // CHECK: %from_elements = tensor.from_elements [[m1]] : tensor<i1>
58- // CHECK: return %from_elements, [[o1]]#1 : tensor<i1>, !quantum.bit
55+ // CHECK: %from_elements = tensor.from_elements [[m1]] : tensor<i1>
56+ // CHECK: return %from_elements, [[o1]]#1 : tensor<i1>, !quantum.bit
5957 %0 = qec.ppr [" X" ](8 ) %q1: !quantum.bit
6058 %1 = qec.ppr [" X" ](4 ) %q2: !quantum.bit
6159 %m , %out_qubits:2 = qec.ppm [" X" , " X" ] %0 , %1 : !quantum.bit , !quantum.bit
@@ -65,12 +63,12 @@ func.func public @merge_ppr_ppm_test_4(%q1: !quantum.bit, %q2: !quantum.bit) ->
6563
6664func.func public @merge_ppr_ppm_test_5 (%q1: !quantum.bit , %q2: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
6765
68- // CHECK: [[q0:%.+]] = qec.ppr ["X"](8) %arg0 : !quantum.bit
69- // CHECK-NOT: qec.ppr ["Y"](4)
70- // CHECK: [[m1:%.+]], [[o1:%.+]]:2 = qec.ppm ["Z", "X"] %arg1, [[q0]]
71- // CHECK-NOT: qec.ppr ["Y"](4)
72- // CHECK: %from_elements = tensor.from_elements [[m1]] : tensor<i1>
73- // CHECK: return %from_elements, [[o1]]#1 : tensor<i1>, !quantum.bit
66+ // CHECK: [[q0:%.+]] = qec.ppr ["X"](8) %arg0 : !quantum.bit
67+ // CHECK-NOT: qec.ppr ["Y"](4)
68+ // CHECK: [[m1:%.+]], [[o1:%.+]]:2 = qec.ppm ["Z", "X"] %arg1, [[q0]]
69+ // CHECK-NOT: qec.ppr ["Y"](4)
70+ // CHECK: %from_elements = tensor.from_elements [[m1]] : tensor<i1>
71+ // CHECK: return %from_elements, [[o1]]#1 : tensor<i1>, !quantum.bit
7472 %0 = qec.ppr [" X" ](8 ) %q1: !quantum.bit
7573 %1 = qec.ppr [" Y" ](4 ) %q2: !quantum.bit
7674 %m , %out_qubits:2 = qec.ppm [" X" , " X" ] %0 , %1 : !quantum.bit , !quantum.bit
@@ -92,6 +90,37 @@ func.func public @merge_ppr_ppm_test_6(%q1: !quantum.bit, %q2: !quantum.bit) ->
9290 return %from_elements , %out_qubits#0 : tensor <i1 >, !quantum.bit
9391}
9492
93+ func.func public @merge_ppr_ppm_test_7 (%q1: !quantum.bit ) -> tensor <i1 > {
94+
95+ // CHECK-NOT: qec.ppr ["X"]
96+ // CHECK: qec.ppm ["X"] %
97+ // CHECK-NOT: qec.ppr ["X"]
98+ %0 = qec.ppr [" X" ](2 ) %q1: !quantum.bit
99+ %m , %out_qubits = qec.ppm [" X" ] %0 : !quantum.bit
100+ %from_elements = tensor.from_elements %m : tensor <i1 >
101+ return %from_elements : tensor <i1 >
102+ }
103+
104+ func.func public @merge_ppr_ppm_test_8 (%q1: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
105+
106+ // CHECK: qec.ppm ["Y"](-1) %
107+ // CHECK: qec.ppr ["X"](2)
108+ %0 = qec.ppr [" X" ](2 ) %q1: !quantum.bit
109+ %m , %out_qubits = qec.ppm [" Y" ] %0 : !quantum.bit
110+ %from_elements = tensor.from_elements %m : tensor <i1 >
111+ return %from_elements , %out_qubits : tensor <i1 >, !quantum.bit
112+ }
113+
114+ func.func public @merge_ppr_ppm_test_9 (%q1: !quantum.bit ) -> (tensor <i1 >, !quantum.bit ) {
115+
116+ // CHECK: qec.ppm ["Z"] %
117+ // CHECK: qec.ppr ["X"](-2)
118+ %0 = qec.ppr [" X" ](-2 ) %q1: !quantum.bit
119+ %m , %out_qubits = qec.ppm [" Z" ](-1 ) %0 : !quantum.bit
120+ %from_elements = tensor.from_elements %m : tensor <i1 >
121+ return %from_elements , %out_qubits : tensor <i1 >, !quantum.bit
122+ }
123+
95124func.func public @game_of_surface_code (%arg0: !quantum.bit , %arg1: !quantum.bit , %arg2: !quantum.bit , %arg3: !quantum.bit ) {
96125
97126 // q1
@@ -102,10 +131,10 @@ func.func public @game_of_surface_code(%arg0: !quantum.bit, %arg1: !quantum.bit,
102131 // CHECK: [[q2:%.+]]:2 = qec.ppr ["Y", "X"](8) %arg2, %arg1
103132
104133 // q3, q2, q4, q1
105- // CHECK: [[q3:%.+]]:4 = qec.ppr ["Z", "Z", "Y", "Z"](-8) [[q2]]#0, [[q2]]#1, [[q1]], [[q0]]
106-
134+ // CHECK: [[q3:%.+]]:4 = qec.ppr ["Z", "Z", "Y", "Z"](-8) [[q2]]#0, [[q2]]#1, [[q1]], [[q0]]
135+
107136 // q3, q2, q1, q4
108- // CHECK: [[m1:%.+]], [[o1:%.+]]:4 = qec.ppm ["Z", "Z", "Y", "Y"] [[q3]]#0, [[q3]]#1, [[q3]]#3, [[q3]]#2
137+ // CHECK: [[m1:%.+]], [[o1:%.+]]:4 = qec.ppm ["Z", "Z", "Y", "Y"] [[q3]]#0, [[q3]]#1, [[q3]]#3, [[q3]]#2
109138
110139 // q2, q1
111140 // CHECK: [[m2:%.+]], [[o2:%.+]]:2 = qec.ppm ["X", "X"] [[o1]]#1, [[o1]]#2
@@ -149,7 +178,6 @@ func.func public @game_of_surface_code(%arg0: !quantum.bit, %arg1: !quantum.bit,
149178 return
150179}
151180
152-
153181func.func public @circuit_transformed_0 () -> (tensor <i1 >, tensor <i1 >) {
154182
155183 // CHECK: [[qreg:%.+]] = quantum.alloc( 2) : !quantum.reg
0 commit comments