@@ -2069,15 +2069,15 @@ void invCtrlSandwich(QCOProgramBuilder& b) {
20692069void pow1Inline (QCOProgramBuilder& b) {
20702070 auto q = b.allocQubitRegister (1 );
20712071 b.pow ({q[0 ]}, 1.0 , [&](mlir::ValueRange qubits) {
2072- auto q0 = b.s ( qubits[0 ]);
2072+ auto q0 = b.rx ( 0.123 , qubits[0 ]);
20732073 return llvm::SmallVector<mlir::Value>{q0};
20742074 });
20752075}
20762076
20772077void pow0Erase (QCOProgramBuilder& b) {
20782078 auto q = b.allocQubitRegister (1 );
20792079 b.pow ({q[0 ]}, 0.0 , [&](mlir::ValueRange qubits) {
2080- auto q0 = b.s ( qubits[0 ]);
2080+ auto q0 = b.rx ( 0.123 , qubits[0 ]);
20812081 return llvm::SmallVector<mlir::Value>{q0};
20822082 });
20832083}
@@ -2086,7 +2086,7 @@ void nestedPow(QCOProgramBuilder& b) {
20862086 auto q = b.allocQubitRegister (1 );
20872087 b.pow ({q[0 ]}, 3.0 , [&](mlir::ValueRange qubits) {
20882088 auto inner = b.pow ({qubits[0 ]}, 2.0 , [&](mlir::ValueRange innerQubits) {
2089- auto q0 = b.s ( innerQubits[0 ]);
2089+ auto q0 = b.rx ( 0.123 , innerQubits[0 ]);
20902090 return llvm::SmallVector<mlir::Value>{q0};
20912091 });
20922092 return llvm::SmallVector<mlir::Value>{inner};
@@ -2096,7 +2096,7 @@ void nestedPow(QCOProgramBuilder& b) {
20962096void powSingleExponent (QCOProgramBuilder& b) {
20972097 auto q = b.allocQubitRegister (1 );
20982098 b.pow ({q[0 ]}, 6.0 , [&](mlir::ValueRange qubits) {
2099- auto q0 = b.s ( qubits[0 ]);
2099+ auto q0 = b.rx ( 0.123 , qubits[0 ]);
21002100 return llvm::SmallVector<mlir::Value>{q0};
21012101 });
21022102}
@@ -2109,33 +2109,55 @@ void powRxx(QCOProgramBuilder& b) {
21092109 });
21102110}
21112111
2112- void negPowS (QCOProgramBuilder& b) {
2112+ void negPowRx (QCOProgramBuilder& b) {
21132113 auto q = b.allocQubitRegister (1 );
21142114 b.pow ({q[0 ]}, -2.0 , [&](mlir::ValueRange qubits) {
2115- auto q0 = b.s ( qubits[0 ]);
2115+ auto q0 = b.rx ( 0.123 , qubits[0 ]);
21162116 return llvm::SmallVector<mlir::Value>{q0};
21172117 });
21182118}
21192119
2120- void invPowS (QCOProgramBuilder& b) {
2120+ void invPowRx (QCOProgramBuilder& b) {
21212121 auto q = b.allocQubitRegister (1 );
21222122 b.inv ({q[0 ]}, [&](mlir::ValueRange invArgs) {
21232123 auto inner = b.pow ({invArgs[0 ]}, 2.0 , [&](mlir::ValueRange powArgs) {
2124- auto q0 = b.s ( powArgs[0 ]);
2124+ auto q0 = b.rx ( 0.123 , powArgs[0 ]);
21252125 return llvm::SmallVector<mlir::Value>{q0};
21262126 });
21272127 return llvm::SmallVector<mlir::Value>{inner};
21282128 });
21292129}
21302130
2131- void powSdg (QCOProgramBuilder& b) {
2131+ void powRxNeg (QCOProgramBuilder& b) {
21322132 auto q = b.allocQubitRegister (1 );
21332133 b.pow ({q[0 ]}, 2.0 , [&](mlir::ValueRange qubits) {
2134- auto q0 = b.sdg ( qubits[0 ]);
2134+ auto q0 = b.rx (- 0.123 , qubits[0 ]);
21352135 return llvm::SmallVector<mlir::Value>{q0};
21362136 });
21372137}
21382138
2139+ void powCtrlRx (QCOProgramBuilder& b) {
2140+ auto q = b.allocQubitRegister (2 );
2141+ b.pow ({q[0 ], q[1 ]}, 2.0 , [&](mlir::ValueRange powArgs) {
2142+ const auto & [controlsOut, targetsOut] =
2143+ b.ctrl ({powArgs[0 ]}, {powArgs[1 ]}, [&](mlir::ValueRange targets) {
2144+ return llvm::SmallVector<mlir::Value>{b.rx (0.123 , targets[0 ])};
2145+ });
2146+ return llvm::to_vector (llvm::concat<mlir::Value>(controlsOut, targetsOut));
2147+ });
2148+ }
2149+
2150+ void ctrlPowRx (QCOProgramBuilder& b) {
2151+ auto q = b.allocQubitRegister (2 );
2152+ b.ctrl ({q[0 ]}, {q[1 ]}, [&](mlir::ValueRange targets) {
2153+ auto inner = b.pow ({targets[0 ]}, 2.0 , [&](mlir::ValueRange powArgs) {
2154+ auto q0 = b.rx (0.123 , powArgs[0 ]);
2155+ return llvm::SmallVector<mlir::Value>{q0};
2156+ });
2157+ return llvm::SmallVector<mlir::Value>{inner};
2158+ });
2159+ }
2160+
21392161// --- IfOp ---------------------------------------------------------------- //
21402162
21412163void simpleIf (QCOProgramBuilder& b) {
0 commit comments