44 addTypeAttributeConversion([&](Type type, Attribute attr) {
45 auto newType = convertType(type);
47 llvm::errs() <<
"Failed to convert type: " << type <<
"\n";
48 return AttributeConversionResult::abort();
50 return AttributeConversionResult(TypeAttr::get(newType));
56 addConversion([](Type type) -> std::optional<Type> {
return type; });
59 addConversion([&](BlockFloatType blockType) -> std::optional<IntegerType> {
63 llvm::errs() <<
"Block type " << blockType.getBlockType()
64 <<
" is not supported in the specified model\n";
71 return mlir::IntegerType::get(blockType.getContext(),
72 blockType.getTotalSizeInBits());
76 addConversion([&](MemRefType memRefType) -> std::optional<MemRefType> {
77 auto newElementType = convertType(memRefType.getElementType());
78 if (!newElementType) {
79 llvm::errs() <<
"Failed to convert memref element type\n";
82 return MemRefType::get(memRefType.getShape(), newElementType,
83 memRefType.getLayout(),
84 memRefType.getMemorySpace());
88 addConversion([&](AIEObjectFifoType objectFifoType)
89 -> std::optional<AIEObjectFifoType> {
90 auto newElementType = convertType(objectFifoType.getElementType());
91 if (!newElementType) {
92 llvm::errs() <<
"Failed to convert ObjectFifoType element type\n";
96 if (
auto newMemRef = dyn_cast<MemRefType>(newElementType))
97 return AIEObjectFifoType::get(objectFifoType.getContext(), newMemRef);
100 <<
"ObjectFifoType converted element type is not a MemRefType\n";
105 addConversion([&](AIEObjectFifoSubviewType objectFifoSubviewType)
106 -> std::optional<AIEObjectFifoSubviewType> {
107 auto newElementType = convertType(objectFifoSubviewType.getElementType());
108 if (!newElementType) {
110 <<
"Failed to convert ObjectFifoSubviewType element type\n";
114 if (
auto newMemRef = dyn_cast<MemRefType>(newElementType))
115 return AIEObjectFifoSubviewType::get(objectFifoSubviewType.getContext(),
119 <<
"ObjectFifoSubviewType element type is not a MemRefType\n";
124 addConversion([&](FunctionType funcType) -> std::optional<FunctionType> {
125 llvm::SmallVector<Type> newInputTypes;
126 auto check = convertTypes(funcType.getInputs(), newInputTypes);
127 if (check.failed()) {
128 llvm::errs() <<
"Failed to convert function input types\n";
132 llvm::SmallVector<Type> newOutputTypes;
133 check = convertTypes(funcType.getResults(), newOutputTypes);
134 if (check.failed()) {
135 llvm::errs() <<
"Failed to convert function output types\n";
139 return FunctionType::get(funcType.getContext(), newInputTypes,