Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,7 @@ def Tosa_Shape : Tosa_Type<"shape", "shape"> {
!tosa.shape<0>
```
}];
let parameters = (ins "int" : $rank);
let builders = [TypeBuilder<(ins "int" : $rank)>];
let parameters = (ins "int":$rank);
let assemblyFormat = "`<` $rank `>`";

let genVerifyDecl = 1;
Expand Down
19 changes: 19 additions & 0 deletions mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,17 @@ getCustomBuilderParams(std::initializer_list<MethodParameter> prefix,
return builderParams;
}

static void errorIfPruned(size_t line, Method *m, const Twine &methodName,
const AttrOrTypeDef &def) {
if (m)
return;
PrintFatalError(def.getLoc(), "Unexpected overlap when generating `" +
methodName + "` for " + def.getName() +
" (from line " + Twine(line) + ")");
}

#define ERROR_IF_PRUNED(M, N, O) errorIfPruned(__LINE__, M, N, O)

void DefGen::emitCustomBuilder(const AttrOrTypeBuilder &builder) {
// Don't emit a body if there isn't one.
auto props = builder.getBody() ? Method::Static : Method::StaticDeclaration;
Expand All @@ -521,6 +532,10 @@ void DefGen::emitCustomBuilder(const AttrOrTypeBuilder &builder) {
returnType = *builderReturnType;
Method *m = defCls.addMethod(returnType, "get", props,
getCustomBuilderParams({}, builder));

// If method is pruned, report error and terminate.
ERROR_IF_PRUNED(m, "get", def);

if (!builder.getBody())
return;

Expand Down Expand Up @@ -552,6 +567,10 @@ void DefGen::emitCheckedCustomBuilder(const AttrOrTypeBuilder &builder) {
getCustomBuilderParams(
{{"::llvm::function_ref<::mlir::InFlightDiagnostic()>", "emitError"}},
builder));

// If method is pruned, report error and terminate.
ERROR_IF_PRUNED(m, "getChecked", def);

if (!builder.getBody())
return;

Expand Down