13#include "mlir/CAPI/Registration.h"
14#include "mlir/CAPI/Wrap.h"
15#include "mlir/IR/Location.h"
16#include "llvm/ADT/Hashing.h"
17#include "llvm/Support/Casting.h"
46 return wrap(cast<ClassType>(
unwrap(type)).getClassName().getAttr());
51 return isa<FrozenBasePathType>(
unwrap(type));
56 return wrap(FrozenBasePathType::getTypeID());
61 return isa<FrozenPathType>(
unwrap(type));
66 return wrap(FrozenPathType::getTypeID());
77 return wrap(cast<ListType>(
unwrap(type)).getElementType());
82 return isa<StringType>(
unwrap(type));
128 MlirAttribute className,
129 intptr_t nActualParams,
135 StringAttr cppClassName = cast<StringAttr>(
unwrap(className));
138 SmallVector<std::shared_ptr<evaluator::EvaluatorValue>> cppActualParams;
139 for (
unsigned i = 0; i < nActualParams; i++)
140 cppActualParams.push_back(
unwrap(actualParams[i]));
143 auto result = cppEvaluator->
instantiate(cppClassName, cppActualParams);
151 return wrap(result.value());
172 return wrap(llvm::cast<Object>(
unwrap(
object).get())->getType());
177 return llvm::hash_value(llvm::cast<Object>(
unwrap(
object).get()));
182 return llvm::cast<Object>(
unwrap(
object).get()) ==
183 llvm::cast<Object>(
unwrap(other).get());
188 return wrap(llvm::cast<Object>(
unwrap(
object).get())->getFieldNames());
193 MlirAttribute name) {
196 FailureOr<EvaluatorValuePtr> result =
197 llvm::cast<Object>(
unwrap(
object).get())
198 ->getField(cast<StringAttr>(
unwrap(name)));
214 return wrap(
unwrap(evaluatorValue)->getContext());
225 return !evaluatorValue.
ptr;
231 return isa<evaluator::ObjectValue>(
unwrap(evaluatorValue).get());
237 return isa<evaluator::AttributeValue>(
unwrap(evaluatorValue).get());
245 llvm::cast<evaluator::AttributeValue>(
unwrap(evaluatorValue).get())
257 return isa<evaluator::ListValue>(
unwrap(evaluatorValue).get());
265 return evaluatorValue;
270 return cast<evaluator::ListValue>(
unwrap(evaluatorValue).get())
278 return wrap(cast<evaluator::ListValue>(
unwrap(evaluatorValue).get())
279 ->getElements()[pos]);
283 return isa<evaluator::BasePathValue>(
unwrap(evaluatorValue).get());
287 return wrap(std::make_shared<evaluator::BasePathValue>(
unwrap(context)));
291 return isa<evaluator::PathValue>(
unwrap(evaluatorValue).get());
295 const auto *path = cast<evaluator::PathValue>(
unwrap(evaluatorValue).get());
296 return wrap((Attribute)path->getAsString());
301 return isa<evaluator::ReferenceValue>(
unwrap(evaluatorValue).get());
313 llvm::cast<evaluator::ReferenceValue>(
unwrap(evaluatorValue).get())
314 ->getStrippedValue();
321 return wrap(result.value());
329 return isa<ReferenceAttr>(
unwrap(attr));
334 (Attribute)cast<ReferenceAttr>(
unwrap(referenceAttr)).getInnerRef());
342 return isa<circt::om::IntegerAttr>(
unwrap(attr));
346 return wrap(cast<circt::om::IntegerAttr>(
unwrap(attr)).getValue());
350 auto integerAttr = cast<mlir::IntegerAttr>(
unwrap(attr));
352 circt::om::IntegerAttr::get(integerAttr.getContext(), integerAttr));
357 mlir::IntegerAttr integerAttr =
358 cast<circt::om::IntegerAttr>(
unwrap(attr)).getValue();
359 SmallVector<char> str;
360 integerAttr.getValue().toString(
361 str, 10, integerAttr.getType().isSignedInteger());
362 return wrap(StringAttr::get(integerAttr.getContext(), str).getValue());
370 return isa<ListAttr>(
unwrap(attr));
374 auto listAttr = llvm::cast<ListAttr>(
unwrap(attr));
375 return static_cast<intptr_t
>(listAttr.getElements().size());
379 auto listAttr = llvm::cast<ListAttr>(
unwrap(attr));
380 return wrap(listAttr.getElements()[pos]);
384 const MlirAttribute *elements) {
385 SmallVector<Attribute, 8> attrs;
386 (void)unwrapList(
static_cast<size_t>(
numElements), elements, attrs);
388 auto *ctx = type.getContext();
389 return wrap(ListAttr::get(ctx, type, ArrayAttr::get(ctx, attrs)));
DEFINE_C_API_PTR_METHODS(AIGLongestPathHistory, llvm::ImmutableListImpl< DebugPoint >) llvm
assert(baseType &&"element must be base type")
MlirType uint64_t numElements
MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(CHIRRTL, chirrtl, circt::chirrtl::CHIRRTLDialect) MlirType chirrtlTypeGetCMemory(MlirContext ctx
static Location getLoc(DefSlot slot)
bool omTypeIsAFrozenBasePathType(MlirType type)
Is the Type a FrozenBasePathType.
bool omEvaluatorValueIsABasePath(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is a BasePath.
bool omEvaluatorValueIsNull(OMEvaluatorValue evaluatorValue)
MlirContext omEvaluatorValueGetContext(OMEvaluatorValue evaluatorValue)
MlirAttribute omReferenceAttrGetInnerRef(MlirAttribute referenceAttr)
bool omTypeIsAStringType(MlirType type)
Is the Type a StringType.
static OMEvaluatorValue wrap(EvaluatorValuePtr object)
Define our own wrap and unwrap instead of using the usual macro.
MlirAttribute omEvaluatorPathGetAsString(OMEvaluatorValue evaluatorValue)
Get a string representation of a Path.
bool omEvaluatorValueIsAPath(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is a Path.
bool omAttrIsAListAttr(MlirAttribute attr)
OMEvaluatorValue omEvaluatorListGetElement(OMEvaluatorValue evaluatorValue, intptr_t pos)
Get an element of the List.
OMEvaluatorValue omEvaluatorValueFromPrimitive(MlirAttribute primitive)
Get the Primitive from an EvaluatorValue, which must contain a Primitive.
MlirStringRef omIntegerAttrToString(MlirAttribute attr)
Get a string representation of an om::IntegerAttr.
OMEvaluatorValue omEvaluatorInstantiate(OMEvaluator evaluator, MlirAttribute className, intptr_t nActualParams, OMEvaluatorValue *actualParams)
Use the Evaluator to Instantiate an Object from its class name and actual parameters.
intptr_t omListAttrGetNumElements(MlirAttribute attr)
MlirAttribute omEvaluatorObjectGetFieldNames(OMEvaluatorValue object)
Get an ArrayAttr with the names of the fields in an Object.
bool omAttrIsAIntegerAttr(MlirAttribute attr)
OMEvaluatorValue omEvaluatorObjectGetField(OMEvaluatorValue object, MlirAttribute name)
Get a field from an Object, which must contain a field of that name.
MlirLocation omEvaluatorValueGetLoc(OMEvaluatorValue evaluatorValue)
MlirTypeID omListTypeGetTypeID(void)
Get the TypeID for a ListType.
MlirTypeID omFrozenBasePathTypeGetTypeID(void)
Get the TypeID for a FrozenBasePathType.
MlirTypeID omStringTypeGetTypeID(void)
Get the TypeID for a StringType.
MlirType omStringTypeGet(MlirContext ctx)
Get a StringType.
bool omTypeIsAClassType(MlirType type)
Is the Type a ClassType.
MlirIdentifier omClassTypeGetName(MlirType type)
Get the name for a ClassType.
OMEvaluatorValue omEvaluatorValueGetReferenceValue(OMEvaluatorValue evaluatorValue)
Dereference a Reference EvaluatorValue.
bool omTypeIsAListType(MlirType type)
Is the Type a ListType.
intptr_t omEvaluatorListGetNumElements(OMEvaluatorValue evaluatorValue)
Get the length of the List.
MlirAttribute omListAttrGet(MlirType elementType, intptr_t numElements, const MlirAttribute *elements)
MlirAttribute omEvaluatorValueGetPrimitive(OMEvaluatorValue evaluatorValue)
Get the Primitive from an EvaluatorValue, which must contain a Primitive.
MlirAttribute omIntegerAttrGetInt(MlirAttribute attr)
Given an om::IntegerAttr, return the mlir::IntegerAttr.
bool omEvaluatorValueIsAList(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is a List.
bool omTypeIsAFrozenPathType(MlirType type)
Is the Type a FrozenPathType.
bool omEvaluatorValueIsAPrimitive(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is a Primitive.
bool omEvaluatorObjectIsNull(OMEvaluatorValue object)
Query if the Object is null.
MlirModule omEvaluatorGetModule(OMEvaluator evaluator)
Get the Module the Evaluator is built from.
OMEvaluator omEvaluatorNew(MlirModule mod)
Construct an Evaluator with an IR module.
OMEvaluatorValue omEvaluatorBasePathGetEmpty(MlirContext context)
Create an empty BasePath.
MlirAttribute omListAttrGetElement(MlirAttribute attr, intptr_t pos)
bool omTypeIsAAnyType(MlirType type)
Is the Type an AnyType.
MlirTypeID omAnyTypeGetTypeID(void)
Get the TypeID for an AnyType.
MlirTypeID omFrozenPathTypeGetTypeID(void)
Get the TypeID for a FrozenPathType.
MlirType omEvaluatorObjectGetType(OMEvaluatorValue object)
Get the Type from an Object, which will be a ClassType.
bool omAttrIsAReferenceAttr(MlirAttribute attr)
static EvaluatorValuePtr unwrap(OMEvaluatorValue c)
MlirAttribute omIntegerAttrGet(MlirAttribute attr)
Get an om::IntegerAttr from mlir::IntegerAttr.
OMEvaluatorValue omEvaluatorValueGetList(OMEvaluatorValue evaluatorValue)
Get the List from an EvaluatorValue, which must contain a List.
bool omEvaluatorValueIsAObject(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is an Object.
MlirType omListTypeGetElementType(MlirType type)
MlirTypeID omClassTypeGetTypeID()
Get the TypeID for a ClassType.
bool omEvaluatorValueIsAReference(OMEvaluatorValue evaluatorValue)
Query if the EvaluatorValue is a Reference.
unsigned omEvaluatorObjectGetHash(OMEvaluatorValue object)
Get the hash for the object.
bool omEvaluatorObjectIsEq(OMEvaluatorValue object, OMEvaluatorValue other)
Check if two objects are same.
evaluator::EvaluatorValuePtr EvaluatorValuePtr
A value type for use in C APIs that just wraps a pointer to an Object.
A value type for use in C APIs that just wraps a pointer to an Evaluator.
An Evaluator, which is constructed with an IR module and can instantiate Objects.
FailureOr< evaluator::EvaluatorValuePtr > instantiate(StringAttr className, ArrayRef< EvaluatorValuePtr > actualParams)
Instantiate an Object with its class name and actual parameters.
friend std::shared_ptr< EvaluatorValue > get(Attribute attr, LocationAttr loc)
Base class for evaluator runtime values.