From: Jacques Pienaar Date: Thu, 18 Jun 2020 19:51:51 +0000 (-0700) Subject: [mlir][ods] Look through OpVariable for type constraint X-Git-Tag: llvmorg-12-init~2622 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7c59120f6e4ca769ab2bfb26484eb8eaca2eadc0;p=platform%2Fupstream%2Fllvm.git [mlir][ods] Look through OpVariable for type constraint If one uses an OpVariable (such as via Res) then the result type constraint should be returned. Differential Revision: https://reviews.llvm.org/D82119 --- diff --git a/mlir/lib/TableGen/Constraint.cpp b/mlir/lib/TableGen/Constraint.cpp index 98bb7d6..b8e1b9f 100644 --- a/mlir/lib/TableGen/Constraint.cpp +++ b/mlir/lib/TableGen/Constraint.cpp @@ -17,21 +17,28 @@ using namespace mlir::tblgen; Constraint::Constraint(const llvm::Record *record) : def(record), kind(CK_Uncategorized) { - if (record->isSubClassOf("TypeConstraint")) { + // Look through OpVariable's to their constraint. + if (def->isSubClassOf("OpVariable")) + def = def->getValueAsDef("constraint"); + if (def->isSubClassOf("TypeConstraint")) { kind = CK_Type; - } else if (record->isSubClassOf("AttrConstraint")) { + } else if (def->isSubClassOf("AttrConstraint")) { kind = CK_Attr; - } else if (record->isSubClassOf("RegionConstraint")) { + } else if (def->isSubClassOf("RegionConstraint")) { kind = CK_Region; - } else if (record->isSubClassOf("SuccessorConstraint")) { + } else if (def->isSubClassOf("SuccessorConstraint")) { kind = CK_Successor; } else { - assert(record->isSubClassOf("Constraint")); + assert(def->isSubClassOf("Constraint")); } } Constraint::Constraint(Kind kind, const llvm::Record *record) - : def(record), kind(kind) {} + : def(record), kind(kind) { + // Look through OpVariable's to their constraint. + if (def->isSubClassOf("OpVariable")) + def = def->getValueAsDef("constraint"); +} Pred Constraint::getPredicate() const { auto *val = def->getValue("predicate"); diff --git a/mlir/test/mlir-tblgen/op-decl.td b/mlir/test/mlir-tblgen/op-decl.td index c0297da..f5bf03e 100644 --- a/mlir/test/mlir-tblgen/op-decl.td +++ b/mlir/test/mlir-tblgen/op-decl.td @@ -155,7 +155,7 @@ def NS_EOp : NS_Op<"op_with_optionals", []> { def NS_FOp : NS_Op<"op_with_all_types_constraint", [AllTypesMatch<["a", "b"]>]> { let arguments = (ins AnyType:$a); - let results = (outs AnyType:$b); + let results = (outs Res:$b); } // CHECK-LABEL: class FOp :