Commit a861252c authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Added some custom op printers to the quantum dialect def



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 541f6894
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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", []> {
@@ -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. 
@@ -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", []> {
@@ -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", []> {