summaryrefslogtreecommitdiffstats
path: root/mlir
diff options
context:
space:
mode:
Diffstat (limited to 'mlir')
-rw-r--r--mlir/lib/TableGen/Pattern.cpp8
-rw-r--r--mlir/test/mlir-tblgen/expect-symbol.td18
2 files changed, 25 insertions, 1 deletions
diff --git a/mlir/lib/TableGen/Pattern.cpp b/mlir/lib/TableGen/Pattern.cpp
index 2986f30dee6..ddec0bacac4 100644
--- a/mlir/lib/TableGen/Pattern.cpp
+++ b/mlir/lib/TableGen/Pattern.cpp
@@ -480,8 +480,14 @@ std::vector<tblgen::AppliedConstraint> tblgen::Pattern::getConstraints() const {
std::vector<std::string> entities;
entities.reserve(dagInit->arg_size());
- for (auto *argName : dagInit->getArgNames())
+ for (auto *argName : dagInit->getArgNames()) {
+ if (!argName) {
+ PrintFatalError(
+ def.getLoc(),
+ "operands to additional constraints can only be symbol references");
+ }
entities.push_back(argName->getValue());
+ }
ret.emplace_back(cast<llvm::DefInit>(dagInit->getOperator())->getDef(),
dagInit->getNameStr(), std::move(entities));
diff --git a/mlir/test/mlir-tblgen/expect-symbol.td b/mlir/test/mlir-tblgen/expect-symbol.td
new file mode 100644
index 00000000000..657c9f8ce02
--- /dev/null
+++ b/mlir/test/mlir-tblgen/expect-symbol.td
@@ -0,0 +1,18 @@
+// RUN: (mlir-tblgen -gen-rewriters -I %S/../../include %s 2>&1 || true) | FileCheck %s
+
+include "mlir/IR/OpBase.td"
+
+def Test_Dialect : Dialect {
+ let name = "test";
+}
+
+def OpA : Op<Test_Dialect, "a"> {
+ let arguments = (ins I32Attr:$attr);
+}
+def OpB : Op<Test_Dialect, "b"> {
+ let arguments = (ins I32Attr:$attr);
+}
+
+def : Pat<(OpA $attr), (OpB $attr),
+ // CHECK: operands to additional constraints can only be symbol references
+ [(Constraint<CPred<"$0->getValue() == $1">> $attr, 42)]>;
OpenPOWER on IntegriCloud