Skip to content

IRDL-to-C++ #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 97 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
74f7aa6
set up mlir-translate for IRDL translation
Moxinilian Jan 13, 2025
9f37bb6
simplify translation registration
Moxinilian Jan 13, 2025
c1ca4bd
generate dialect declaration
Moxinilian Jan 13, 2025
483d5a2
add constraints on dialect names
Moxinilian Jan 13, 2025
71cc646
add dialect def
Moxinilian Jan 13, 2025
4b6bd5d
first draft of op template
Moxinilian Jan 14, 2025
39dda7d
added base type class
hhkit Jan 15, 2025
cb7337d
generate singleton types
hhkit Jan 16, 2025
451c439
basic operation work + escaped braces in operationdecl
hhkit Jan 17, 2025
f25ce38
mlir explicit type id
hhkit Jan 17, 2025
228729d
used namespace path for type reg
hhkit Jan 17, 2025
bf226ad
Merge branch 'main' of https://github.com/opencompl/llvm-project into…
Jan 20, 2025
8d4bad5
merged from upstream, added name to mvp
Jan 20, 2025
704f111
return operand names
hhkit Jan 20, 2025
d30c976
return operand names
hhkit Jan 20, 2025
aa82910
Merge branch 'hhkit/irdl-to-cpp' of https://github.com/opencompl/llvm…
hhkit Jan 20, 2025
3411c33
revert bad edit
hhkit Jan 20, 2025
731fd7c
typedef list + print/parse defs
hhkit Jan 20, 2025
79d5acb
compile decls and defs for build
hhkit Jan 21, 2025
02d396e
refactored name processing logic
hhkit Jan 21, 2025
3ddd47b
define typeIDs
hhkit Jan 22, 2025
f6920fe
irdl-to-cpp toolchain (#16)
Moxinilian Jan 24, 2025
69ee9b0
add cross-compile support (#17)
Moxinilian Jan 26, 2025
0da3cb6
build driver
hhkit Jan 29, 2025
dfdb06a
first step towards IRDL to cpp test (#18)
Moxinilian Jan 31, 2025
19ae518
header builds
hhkit Feb 3, 2025
9160c95
fixed compile errors in define
hhkit Feb 3, 2025
2c496ec
successful registration in mlir-opt
hhkit Feb 3, 2025
b3801fe
abort fix
hhkit Feb 4, 2025
3b9a32d
removed custom print and parse
hhkit Feb 6, 2025
35d9dba
simplified test case
hhkit Feb 6, 2025
1cbb39d
[IRDL2CPP] Attempt at Templating (#19)
hhkit Feb 10, 2025
aac4b98
some changes
Moxinilian Feb 28, 2025
5f77c3a
fixed errors
hhkit Mar 1, 2025
f00bf0d
getters for operands
hhkit Mar 3, 2025
739e8b1
clang-format
hhkit Mar 3, 2025
9736b13
removed unneeded functions
hhkit Mar 3, 2025
7727f15
handle errors
hhkit Mar 3, 2025
bc41321
support negative
hhkit Mar 3, 2025
24b9d78
check results type
hhkit Mar 3, 2025
cb754ee
mlir-opt verify test
hhkit Mar 7, 2025
c8e98d9
fixed the easy changes
hhkit Mar 10, 2025
73e8ff9
PR changes pt ii
hhkit Mar 10, 2025
98efc62
case conversion
hhkit Mar 10, 2025
77aaaf2
removed oplist and typelist defs
hhkit Mar 10, 2025
bda0295
newline fix
hhkit Mar 10, 2025
1995868
added test for conversion
hhkit Mar 10, 2025
14b3fde
Merge branch 'main' of https://github.com/opencompl/llvm-project into…
hhkit Mar 11, 2025
4a9735e
new lines, macro guard documentation
hhkit Mar 11, 2025
447e474
Update mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
hhkit Mar 18, 2025
c1feed3
Merge branch 'hhkit/irdl-to-cpp' of https://github.com/opencompl/llvm…
hhkit Mar 18, 2025
edc9fa2
simple PR changes
hhkit Mar 18, 2025
21eada6
set up for multiple dialect conversions
hhkit Mar 18, 2025
d2ca62c
Merge branch 'main' of https://github.com/opencompl/llvm-project into…
hhkit Mar 18, 2025
1c5c3c1
conversion test works again
hhkit Mar 18, 2025
26f580e
getODSResults
hhkit Mar 18, 2025
732e606
fixed header naming
hhkit Mar 24, 2025
44976b6
symbol verification
hhkit Mar 24, 2025
318f759
invalid names
hhkit Mar 24, 2025
6d1beac
check every irdl op
hhkit Mar 24, 2025
16b0414
unsupported irdl ops
hhkit Mar 24, 2025
05fa3a8
base types
hhkit Mar 24, 2025
ef0d97e
simplified test
hhkit Mar 24, 2025
91d6f80
split file works omg cleanup needed
hhkit Mar 24, 2025
8f7e939
silence most failing tests
hhkit Mar 25, 2025
764d638
allow types and attribs to be prefixed with ! and #
hhkit Mar 25, 2025
dfbb919
clean up mlir-irdl-to-cpp
hhkit Mar 26, 2025
3638c9b
fixed PR changes
hhkit Mar 31, 2025
a1f308e
renamed name checker
hhkit Mar 31, 2025
db38f4e
invert verifysupport check
hhkit Mar 31, 2025
1295496
attempt to clean up main.cpp
hhkit Mar 31, 2025
b35f796
removed name with underscore
hhkit Mar 31, 2025
7c52b16
simple cleanup
hhkit Apr 1, 2025
81a1530
remaining fixes
hhkit Apr 1, 2025
cf508a9
fix templates
Moxinilian Apr 1, 2025
da16951
add comments and fix bug
Moxinilian Apr 1, 2025
784b04d
extracted getters and builders
hhkit Apr 1, 2025
d99bc6a
Merge branch 'main' into hhkit/irdl-to-cpp
hhkit Apr 1, 2025
e980d88
fixed comments
hhkit Apr 2, 2025
c26e36d
fixed multidialect bug
hhkit Apr 4, 2025
b9fb698
Merge branch 'main' into hhkit/irdl-to-cpp
hhkit Apr 4, 2025
bc37a24
Update mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
hhkit Apr 4, 2025
e51ae35
Update mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
hhkit Apr 4, 2025
ef16ac5
Update mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
hhkit Apr 4, 2025
e21a21f
Update mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
hhkit Apr 4, 2025
c79ddcd
PR suggestions
hhkit Apr 4, 2025
5ef348a
more PR fixes
hhkit Apr 4, 2025
a30bb8d
moved invalid name test
hhkit Apr 4, 2025
b1ccf66
Update mlir/lib/Target/IRDLToCpp/Templates/PerOperationDecl.txt
hhkit Apr 4, 2025
aae9e19
added basic filecheck for irdl translation
hhkit Apr 4, 2025
29581b7
comments, as requested by PR
hhkit Apr 8, 2025
180f3a5
hopefully fix CMake problems
Moxinilian Apr 25, 2025
c6b1fcd
hopefully make CI happy about templates
Moxinilian Apr 26, 2025
fafc0ee
simplify processBuffer code to please MSVC
Moxinilian Apr 26, 2025
2abd9dc
wrap at 80 cols
hhkit Apr 28, 2025
f04509d
Merge branch 'main' into hhkit/irdl-to-cpp
hhkit Apr 28, 2025
8d3e8c2
Merge branch 'main' into hhkit/irdl-to-cpp
hhkit May 22, 2025
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
4 changes: 4 additions & 0 deletions mlir/include/mlir/Dialect/IRDL/IR/IRDLOps.td
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ def IRDL_TypeOp : IRDL_Op<"type",
let regions = (region SizedRegion<1>:$body);
let assemblyFormat =
"$sym_name attr-dict-with-keyword custom<SingleBlockRegion>($body)";
let hasVerifier = 1;
}

def IRDL_AttributeOp : IRDL_Op<"attribute",
Expand Down Expand Up @@ -126,6 +127,8 @@ def IRDL_AttributeOp : IRDL_Op<"attribute",
let regions = (region SizedRegion<1>:$body);
let assemblyFormat =
"$sym_name attr-dict-with-keyword custom<SingleBlockRegion>($body)";

let hasVerifier = 1;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spacing is inconsistent 👉 👈

}

def IRDL_ParametersOp : IRDL_Op<"parameters",
Expand Down Expand Up @@ -202,6 +205,7 @@ def IRDL_OperationOp : IRDL_Op<"operation",
let assemblyFormat =
"$sym_name attr-dict-with-keyword custom<SingleBlockRegion>($body)";
let hasRegionVerifier = true;
let hasVerifier = 1;
}

def IRDL_OperandsOp : IRDL_Op<"operands", [HasParent<"OperationOp">]> {
Expand Down
5 changes: 3 additions & 2 deletions mlir/include/mlir/Target/IRDLToCpp/IRDLToCpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ namespace irdl {
///
/// // This define generates code for the dialect's class definitions
/// #define GEN_DIALECT_DEF

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is that all the macro guards that are available?

LogicalResult translateIRDLDialectToCpp(llvm::ArrayRef<irdl::DialectOp> dialect,
raw_ostream &output);
LogicalResult
translateIRDLDialectToCpp(llvm::ArrayRef<irdl::DialectOp> dialects,
raw_ostream &output);

} // namespace irdl
} // namespace mlir
Expand Down
66 changes: 54 additions & 12 deletions mlir/lib/Dialect/IRDL/IR/IRDL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,62 @@ static void printSingleBlockRegion(OpAsmPrinter &p, Operation *op,
if (!region.getBlocks().front().empty())
p.printRegion(region);
}
static llvm::LogicalResult isSnakeCase(llvm::StringRef in, mlir::Operation *loc,
const Twine &label) {
if (in.empty())
return loc->emitError("name of ") << label << " is empty";

bool allowUnderscore = false;
for (auto &elem : in) {
if (elem == '_') {
if (!allowUnderscore)
return loc->emitError("name of ")
<< label << " should not contain leading or double underscores";
} else {
if (!isalnum(elem))
return loc->emitError("name of ")
<< label
<< " must contain only lowercase letters, digits and "
"underscores";

if (llvm::isUpper(elem))
return loc->emitError("name of ")
<< label << " should not contain uppercase letters";
}

allowUnderscore = elem != '_';
}
Comment on lines +83 to +101

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't easily format on GitHub but I hope you get the gist.

Suggested change
for (auto &elem : in) {
if (elem == '_') {
if (!allowUnderscore)
return loc->emitError("name of ")
<< label << " should not contain leading or double underscores";
} else {
if (!isalnum(elem))
return loc->emitError("name of ")
<< label
<< " must contain only lowercase letters, digits and "
"underscores";
if (llvm::isUpper(elem))
return loc->emitError("name of ")
<< label << " should not contain uppercase letters";
}
allowUnderscore = elem != '_';
}
for (auto &elem : in) {
if (elem == '_') {
if (!allowUnderscore)
return loc->emitError("name of ")
<< label << " should not contain leading or double underscores";
allowUnderscore = false;
continue;
}
if (!isalnum(elem))
return loc->emitError("name of ")
<< label
<< " must contain only lowercase letters, digits and "
"underscores";
if (llvm::isUpper(elem))
return loc->emitError("name of ")
<< label << " should not contain uppercase letters";
allowUnderscore = true:
}


return success();
}

LogicalResult DialectOp::verify() {
if (!Dialect::isValidNamespace(getName()))
return emitOpError("invalid dialect name");
if (failed(isSnakeCase(getSymName(), getOperation(), "dialect")))
return failure();

return success();
}

LogicalResult OperationOp::verify() {
return isSnakeCase(getSymName(), getOperation(), "operation");
}

LogicalResult TypeOp::verify() {
auto symName = getSymName();
if (symName.front() == '!')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is no bueno but we have to due to symbols. Once this PR is merged upstream I'll fix it myself.

symName = symName.substr(1);
return isSnakeCase(symName, getOperation(), "type");
}

LogicalResult AttributeOp::verify() {
auto symName = getSymName();
if (symName.front() == '#')
symName = symName.substr(1);
return isSnakeCase(symName, getOperation(), "attribute");
}

LogicalResult OperationOp::verifyRegions() {
// Stores pairs of value kinds and the list of names of values of this kind in
// the operation.
Expand Down Expand Up @@ -133,18 +182,11 @@ static LogicalResult verifyNames(Operation *op, StringRef kindName,
DenseMap<StringRef, size_t> nameMap;
for (auto [i, name] : llvm::enumerate(names)) {
StringRef nameRef = llvm::cast<StringAttr>(name).getValue();
if (nameRef.empty())
return op->emitOpError()
<< "name of " << kindName << " #" << i << " is empty";
if (!llvm::isAlpha(nameRef[0]) && nameRef[0] != '_')
return op->emitOpError()
<< "name of " << kindName << " #" << i
<< " must start with either a letter or an underscore";
if (llvm::any_of(nameRef,
[](char c) { return !llvm::isAlnum(c) && c != '_'; }))
return op->emitOpError()
<< "name of " << kindName << " #" << i
<< " must contain only letters, digits and underscores";
auto verifyNameRef =
isSnakeCase(nameRef, op, Twine(kindName) + " #" + Twine(i));
if (failed(verifyNameRef))
return verifyNameRef;

if (nameMap.contains(nameRef))
return op->emitOpError() << "name of " << kindName << " #" << i
<< " is a duplicate of the name of " << kindName
Expand Down
135 changes: 94 additions & 41 deletions mlir/lib/Target/IRDLToCpp/IRDLToCpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/raw_ostream.h"

Expand Down Expand Up @@ -60,6 +61,35 @@ static std::string joinNameList(llvm::ArrayRef<std::string> names) {
return nameArray;
}

static llvm::LogicalResult isSnakeCase(llvm::StringRef in,
mlir::Operation *loc) {
bool allowUnderscore = false;
for (auto &elem : in) {
if (elem == '_') {
if (!allowUnderscore)
return loc->emitError(
llvm::formatv("Error in symbol name `{}`: No leading or double "
"underscores allowed.",
in));
} else {
if (!isalnum(elem))
return loc->emitError(
llvm::formatv("Error in symbol name `{}`: Only numbers and "
"lower-case characters allowed.",
in));

if (llvm::isUpper(elem))
return loc->emitError(llvm::formatv(
"Error in symbol name `{}`: Upper-case characters are not allowed.",
in));
}

allowUnderscore = elem != '_';
}

return success();
}

static std::string snakeToCamel(llvm::StringRef in, bool capitalize = false) {
std::string output;
output.reserve(in.size());
Expand Down Expand Up @@ -472,31 +502,69 @@ void {0}::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState,
}

static LogicalResult verifySupported(irdl::DialectOp dialect) {
for (auto operation : dialect.getOps<irdl::OperationOp>()) {
// scan operands of operation
for (auto operands : operation.getOps<irdl::OperandsOp>()) {
for (auto operand : operands.getOperands()) {
if (!llvm::isa<irdl::AnyOp>(operand.getDefiningOp())) {
return operands.emitError(
"IRDL C++ translation only supports irdl.any "
"constraint for types");
}
}
}

// scan results of operation
for (auto results : operation.getOps<irdl::ResultsOp>()) {
for (auto operand : results.getOperands()) {
if (!llvm::isa<irdl::AnyOp>(operand.getDefiningOp())) {
return results.emitError(
"IRDL C++ translation only supports irdl.any "
"constraint for types");
}
}
}
}
if (failed(isSnakeCase(dialect.getSymName(), dialect)))
return failure();

return success();
LogicalResult res = success();
dialect.walk([&](mlir::Operation *op) {
res =
llvm::TypeSwitch<Operation *, LogicalResult>(op)
.Case<irdl::AttributeOp>([](irdl::AttributeOp op) -> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support attributes.");
})
.Case<irdl::AttributesOp>(
[](irdl::AttributesOp op) -> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support attributes.");
})
.Case<irdl::AnyOfOp>([](irdl::AnyOfOp op) -> LogicalResult {
return op.emitError("IRDL C++ translation only supports irdl.any "
"constraint for types");
})
.Case<irdl::AllOfOp>([](irdl::AllOfOp op) -> LogicalResult {
return op.emitError("IRDL C++ translation only supports irdl.any "
"constraint for types");
})
.Case<irdl::BaseOp>([](irdl::BaseOp op) -> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support base types.");
})
.Case<irdl::ParametersOp>([](irdl::ParametersOp op)
-> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support type parameters.");
})
.Case<irdl::ParametricOp>(
[](irdl::ParametricOp op) -> LogicalResult {
return op.emitError("IRDL C++ translation does not yet "
"support parametric operations.");
})
.Case<irdl::RegionOp>([](irdl::RegionOp op) -> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support regions.");
})
.Case<irdl::RegionsOp>([](irdl::RegionsOp op) -> LogicalResult {
return op.emitError(
"IRDL C++ translation does not yet support regions.");
})
.Case<irdl::IsOp>([](irdl::IsOp op) -> LogicalResult {
return op.emitError("IRDL C++ translation only supports irdl.any "
"constraint for types");
})
.Case<irdl::CPredOp>([](irdl::CPredOp op) -> LogicalResult {
return op.emitError("IRDL C++ translation only supports irdl.any "
"constraint for types");
})
.Default(success());

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do it the other way around, success if the operation is explicitly supported (and then check that the operands are constraints that you support, which you are not doing right now I believe).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason I say this is because at some point I expect irdl.dialect will not be isolated from above anymore so SSA values could come from outside of it. This would hijack your checks.


if (failed(res))
return WalkResult::interrupt();

return WalkResult::advance();
});

return res;
}

LogicalResult
Expand All @@ -511,26 +579,11 @@ irdl::translateIRDLDialectToCpp(llvm::ArrayRef<irdl::DialectOp> dialects,
for (auto dialect : dialects) {
StringRef dialectName = dialect.getSymName();

// TODO: deal with no more constraints than the verifier allows.
if (dialectName.size() < 1) {
result =
dialect->emitError("dialect name must be more than one character");
continue;
}
if (!llvm::isAlpha(dialectName[0])) {
result = dialect->emitError("dialect name must start with a letter");
continue;
}
if (!llvm::all_of(dialectName,
[](char c) { return llvm::isAlnum(c) || c == '_'; })) {
result = dialect->emitError(
"dialect name must only contain letters, numbers or underscores");
if (failed(verifySupported(dialect))) {
result = failure();
continue;
}

if (failed(verifySupported(dialect)))
result = failure();

llvm::SmallVector<llvm::SmallString<8>> namespaceAbsolutePath{{"mlir"},
dialectName};
std::string namespaceOpen;
Expand Down
4 changes: 4 additions & 0 deletions mlir/lib/Target/IRDLToCpp/Templates/PerOperationDecl.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
R"(
//===----------------------------------------------------------------------===//
// __NAMESPACE_PATH__::__OP_CPP_NAME__ declarations
//===----------------------------------------------------------------------===//

__NAMESPACE_OPEN__

namespace detail {
Expand Down
6 changes: 3 additions & 3 deletions mlir/test/Dialect/IRDL/invalid.irdl.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ irdl.dialect @testd {
irdl.dialect @testd {
irdl.type @type {
%0 = irdl.any
// expected-error@+1 {{name of parameter #0 must contain only letters, digits and underscores}}
// expected-error@+1 {{name of parameter #0 must contain only lowercase letters, digits and underscores}}
irdl.parameters(test$test: %0)
}
}
Expand All @@ -35,7 +35,7 @@ irdl.dialect @testd {
irdl.dialect @testd {
irdl.operation @op {
%0 = irdl.any
// expected-error@+1 {{name of result #0 must contain only letters, digits and underscores}}
// expected-error@+1 {{name of result #0 must contain only lowercase letters, digits and underscores}}
irdl.results(test$test: %0)
}
}
Expand All @@ -45,7 +45,7 @@ irdl.dialect @testd {
irdl.dialect @testd {
irdl.operation @op {
%0 = irdl.any
// expected-error@+1 {{name of operand #0 must contain only letters, digits and underscores}}
// expected-error@+1 {{name of operand #0 must contain only lowercase letters, digits and underscores}}
irdl.operands(test$test: %0)
}
}
Expand Down
12 changes: 6 additions & 6 deletions mlir/test/Dialect/IRDL/regions-ops.irdl.mlir
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RUN: mlir-opt %s -verify-diagnostics -split-input-file

irdl.dialect @testRegionOpNegativeNumber {
irdl.dialect @test_region_op_negative_number {
irdl.operation @op {
// expected-error @below {{'irdl.region' op the number of blocks is expected to be >= 1 but got -42}}
%r1 = irdl.region with size -42
Expand All @@ -9,7 +9,7 @@ irdl.dialect @testRegionOpNegativeNumber {

// -----

irdl.dialect @testRegionsOpMissingName {
irdl.dialect @test_regions_op_missing_name {
irdl.operation @op {
%r1 = irdl.region
// expected-error @below {{expected valid keyword}}
Expand All @@ -19,17 +19,17 @@ irdl.dialect @testRegionsOpMissingName {

// -----

irdl.dialect @testRegionsOpWrongName {
irdl.dialect @test_regions_op_wrong_name {
irdl.operation @op {
%r1 = irdl.region
// expected-error @below {{name of region #0 must contain only letters, digits and underscores}}
// expected-error @below {{name of region #0 must contain only lowercase letters, digits and underscores}}
irdl.regions(test$test: %r1)
}
}

// -----

irdl.dialect @testRegionsDuplicateName {
irdl.dialect @test_regions_duplicate_name {
irdl.operation @op {
%r1 = irdl.region
// expected-error @below {{name of region #2 is a duplicate of the name of region #0}}
Expand All @@ -39,7 +39,7 @@ irdl.dialect @testRegionsDuplicateName {

// -----

irdl.dialect @testRegionsOpWrongOperation {
irdl.dialect @test_regions_op_wrong_operation {
irdl.operation @op {
// expected-note @below {{prior use here}}
%r1 = irdl.any
Expand Down
2 changes: 1 addition & 1 deletion mlir/test/lib/Dialect/TestIRDLToCpp/test.testd.mlir
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// RUN: mlir-opt %s | FileCheck %s
// CHECK: module {
module {
// CHECK: %[[v0:[^ ]*]] = "test_irdl_to_cpp.bar"() : () -> !test_irdl_to_cpp.foo
%0 = "test_irdl_to_cpp.bar"() : () -> !test_irdl_to_cpp.foo
}
Loading