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

Update ref. count QIR signature



The spec. uses int32_t type for the increment argument.

Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 259b5b8d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -429,12 +429,12 @@ bool __quantum__rt__result_equal(Result *res, Result *comp) {
Result *__quantum__rt__result_get_one() { return ResultOne; }
Result *__quantum__rt__result_get_zero() { return ResultZero; }

void __quantum__rt__string_update_reference_count(void *str, int64_t count) {
void __quantum__rt__string_update_reference_count(void *str, int32_t count) {
  // TODO
  if (verbose) std::cout << "CALL: " << __PRETTY_FUNCTION__ << "\n";
}

void __quantum__rt__result_update_reference_count(Result *, int64_t count) {
void __quantum__rt__result_update_reference_count(Result *, int32_t count) {
  // TODO
  if (verbose) std::cout << "CALL: " << __PRETTY_FUNCTION__ << "\n";
}
+4 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ void __quantum__qis__u3(double theta, double phi, double lambda, Qubit *q);
Result *__quantum__qis__mz(Qubit *q);
// Compare results.
bool __quantum__rt__result_equal(Result *res, Result *comp);
void __quantum__rt__result_update_reference_count(Result *, int64_t count);
void __quantum__rt__result_update_reference_count(Result *, int32_t count);
// Get reference Result.
Result *__quantum__rt__result_get_one();
Result *__quantum__rt__result_get_zero();
@@ -105,8 +105,8 @@ Array *__quantum__rt__array_slice(Array *array, int32_t dim,
Array *quantum__rt__array_slice(Array *array, int32_t dim, Range range);

// Ref. counting
void __quantum__rt__array_update_alias_count(Array *array, int64_t increment);
void __quantum__rt__array_update_reference_count(Array *aux, int64_t count);
void __quantum__rt__array_update_alias_count(Array *array, int32_t increment);
void __quantum__rt__array_update_reference_count(Array *aux, int32_t count);

// Multi-dimension Array API
int32_t __quantum__rt__array_get_dim(Array *array);
@@ -122,7 +122,7 @@ int8_t *__quantum__rt__array_get_element_ptr(Array *array, ...);
Array *__quantum__rt__array_project(Array *array, int dim, int64_t index);

// String-related API
void __quantum__rt__string_update_reference_count(void *str, int64_t count);
void __quantum__rt__string_update_reference_count(void *str, int32_t count);

// Tuples:
TuplePtr __quantum__rt__tuple_create(int64_t size);
+5 −2
Original line number Diff line number Diff line
@@ -49,13 +49,13 @@ Array *quantum__rt__array_slice(Array *array, int32_t dim, Range range) {
  return resultArray;
}

void __quantum__rt__array_update_alias_count(Array *array, int64_t increment) {
void __quantum__rt__array_update_alias_count(Array *array, int32_t increment) {
  if (verbose)
    std::cout << "CALL: " << __PRETTY_FUNCTION__ << "\n";
  // Looks like alias count has no functional significance, hence ignored.
}

void __quantum__rt__array_update_reference_count(Array *array, int64_t increment) {
void __quantum__rt__array_update_reference_count(Array *array, int32_t increment) {
  // Spec:
  // Deallocates the array if the reference count becomes 0. 
  // The behavior is undefined if the reference count becomes negative. 
@@ -68,6 +68,9 @@ void __quantum__rt__array_update_reference_count(Array *array, int64_t increment
    return;
  }

  if (verbose)
    std::cout << "Current ref. count = " << array->ref_count() << "; increment = " << increment << "\n";
  
  if (increment > 0) {
    for (int64_t i = 0; i < increment; ++i) {
      array->add_ref();