Loading mlir/dialect/include/Quantum/QuantumOps.td +23 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ def QallocOp : QuantumOp<"qalloc", []> { def QaliasArrayAllocOp : QuantumOp<"createQubitArray", []> { let arguments = (ins AnyI64Attr:$size, StrAttr:$name); let results = (outs ArrayType:$qubits); let printer = [{ auto op = *this; p << "q.createArray(" << op.size() << ") { name = " << op.name() << " }"; p << " : " << op.qubits().getType(); }]; } def ExtractQubitOp : QuantumOp<"qextract", []> { Loading @@ -41,6 +44,9 @@ def ExtractQubitOp : QuantumOp<"qextract", []> { def GeneralArrayExtractOp : QuantumOp<"array_extract", []> { let arguments = (ins ArrayType:$array, AnyInteger:$idx); let results = (outs AnyType:$element); let printer = [{ auto op = *this; p << "q.array_extract(" << op.getOperands() << ")"; p << " : " << op.element().getType(); }]; } // Assign a qubit pointer (specified by the Qubit array and index) to an alias pointer. Loading @@ -48,17 +54,27 @@ def GeneralArrayExtractOp : QuantumOp<"array_extract", []> { def AssignQubitOp : QuantumOp<"qassign", []> { let arguments = (ins ArrayType:$dest_qreg, AnyInteger:$dest_idx, ArrayType:$src_qreg, AnyInteger:$src_idx); let results = (outs); let printer = [{ auto op = *this; p << "q.qassign " << op.src_qreg() << "[" << op.src_idx() << "] -> " << op.dest_qreg() << "[" << op.dest_idx() << "]";}]; } // Extract array slice def ArraySliceOp : QuantumOp<"qarray_slice", []> { let arguments = (ins ArrayType:$qreg, Variadic<I64>:$slice_range); let results = (outs ArrayType:$array_slice); let printer = [{ auto op = *this; p << "q.qarray_slice (" << op.getOperands() << ")"; p << " : " << op.array_slice().getType(); }]; } // Array Concatenation def ArrayConcatOp : QuantumOp<"qarray_concat", []> { let arguments = (ins ArrayType:$qreg1, ArrayType:$qreg2); let results = (outs ArrayType:$concat_array); let printer = [{ auto op = *this; p << "q.qarray_concat (" << op.getOperands() << ")"; p << " : " << op.concat_array().getType(); }]; } def StartCtrlURegion : QuantumOp<"start_ctrl_u_region", []> { Loading Loading @@ -96,11 +112,18 @@ def EndAdjointURegion : QuantumOp<"end_adj_u_region", []> { def StartPowURegion : QuantumOp<"start_pow_u_region", []> { let arguments = (ins); let results = (outs); let printer = [{ p << "q.pow_u_region {"; }]; } def EndPowURegion : QuantumOp<"end_pow_u_region", []> { let arguments = (ins AnyI64:$pow); let results = (outs); let printer = [{ auto op = *this; p << "} (pow = " << op.pow() << ") // END POWER"; }]; } def ComputeMarkerOp : QuantumOp<"compute_marker", []> { Loading Loading
mlir/dialect/include/Quantum/QuantumOps.td +23 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,9 @@ def QallocOp : QuantumOp<"qalloc", []> { def QaliasArrayAllocOp : QuantumOp<"createQubitArray", []> { let arguments = (ins AnyI64Attr:$size, StrAttr:$name); let results = (outs ArrayType:$qubits); let printer = [{ auto op = *this; p << "q.createArray(" << op.size() << ") { name = " << op.name() << " }"; p << " : " << op.qubits().getType(); }]; } def ExtractQubitOp : QuantumOp<"qextract", []> { Loading @@ -41,6 +44,9 @@ def ExtractQubitOp : QuantumOp<"qextract", []> { def GeneralArrayExtractOp : QuantumOp<"array_extract", []> { let arguments = (ins ArrayType:$array, AnyInteger:$idx); let results = (outs AnyType:$element); let printer = [{ auto op = *this; p << "q.array_extract(" << op.getOperands() << ")"; p << " : " << op.element().getType(); }]; } // Assign a qubit pointer (specified by the Qubit array and index) to an alias pointer. Loading @@ -48,17 +54,27 @@ def GeneralArrayExtractOp : QuantumOp<"array_extract", []> { def AssignQubitOp : QuantumOp<"qassign", []> { let arguments = (ins ArrayType:$dest_qreg, AnyInteger:$dest_idx, ArrayType:$src_qreg, AnyInteger:$src_idx); let results = (outs); let printer = [{ auto op = *this; p << "q.qassign " << op.src_qreg() << "[" << op.src_idx() << "] -> " << op.dest_qreg() << "[" << op.dest_idx() << "]";}]; } // Extract array slice def ArraySliceOp : QuantumOp<"qarray_slice", []> { let arguments = (ins ArrayType:$qreg, Variadic<I64>:$slice_range); let results = (outs ArrayType:$array_slice); let printer = [{ auto op = *this; p << "q.qarray_slice (" << op.getOperands() << ")"; p << " : " << op.array_slice().getType(); }]; } // Array Concatenation def ArrayConcatOp : QuantumOp<"qarray_concat", []> { let arguments = (ins ArrayType:$qreg1, ArrayType:$qreg2); let results = (outs ArrayType:$concat_array); let printer = [{ auto op = *this; p << "q.qarray_concat (" << op.getOperands() << ")"; p << " : " << op.concat_array().getType(); }]; } def StartCtrlURegion : QuantumOp<"start_ctrl_u_region", []> { Loading Loading @@ -96,11 +112,18 @@ def EndAdjointURegion : QuantumOp<"end_adj_u_region", []> { def StartPowURegion : QuantumOp<"start_pow_u_region", []> { let arguments = (ins); let results = (outs); let printer = [{ p << "q.pow_u_region {"; }]; } def EndPowURegion : QuantumOp<"end_pow_u_region", []> { let arguments = (ins AnyI64:$pow); let results = (outs); let printer = [{ auto op = *this; p << "} (pow = " << op.pow() << ") // END POWER"; }]; } def ComputeMarkerOp : QuantumOp<"compute_marker", []> { Loading