tvm
Namespaces | Macros
cow.h File Reference

Copy-on-write helper macro for IR ffi::ObjectRef types. More...

#include <tvm/ffi/object.h>
#include <utility>
Include dependency graph for cow.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

 tvm
 An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
 

Macros

#define TVM_DEFINE_OBJECT_REF_COW_METHOD(ObjectName)
 Define CopyOnWrite function in an ffi::ObjectRef. More...
 

Detailed Description

Copy-on-write helper macro for IR ffi::ObjectRef types.

Macro Definition Documentation

◆ TVM_DEFINE_OBJECT_REF_COW_METHOD

#define TVM_DEFINE_OBJECT_REF_COW_METHOD (   ObjectName)
Value:
static_assert(ObjectName::_type_final, \
"TVM's CopyOnWrite may only be used for " \
"Object types that are declared as final, " \
"using the TVM_FFI_DECLARE_OBJECT_INFO_FINAL macro."); \
ObjectName* CopyOnWrite() { \
TVM_FFI_ICHECK(data_ != nullptr); \
if (!data_.unique()) { \
auto n = ::tvm::ffi::make_object<ObjectName>(*(operator->())); \
::tvm::ffi::ObjectPtr<::tvm::ffi::Object>(std::move(n)).swap(data_); \
} \
return static_cast<ObjectName*>(data_.get()); \
}

Define CopyOnWrite function in an ffi::ObjectRef.

Parameters
ObjectNameThe Type of the Node.

CopyOnWrite will generate a unique copy of the internal node. The node will be copied if it is referenced by multiple places. The function returns the raw pointer to the node to allow modification of the content.

MyCOWObjectRef ref, ref2;
ref2 = ref;
ref.CopyOnWrite()->value = new_value;
assert(ref2->value == old_value);
assert(ref->value == new_value);