[Mlir-commits] [mlir] [mlir][ODS] Allow inferring operand types from multiple variables (PR #127517)

Markus Böck llvmlistbot at llvm.org
Tue Feb 18 05:09:30 PST 2025


================
@@ -3251,21 +3268,26 @@ void OpFormatParser::handleSameTypesConstraint(
   // Set the resolvers for each operand and result.
   for (unsigned i = 0, e = op.getNumOperands(); i != e; ++i)
     if (!seenOperandTypes.test(i))
-      variableTyResolver[op.getOperand(i).name] = {resolver, std::nullopt};
+      variableTyResolver[op.getOperand(i).name] = {{resolver}, std::nullopt};
   if (includeResults) {
     for (unsigned i = 0, e = op.getNumResults(); i != e; ++i)
       if (!seenResultTypes.test(i))
-        variableTyResolver[op.getResultName(i)] = {resolver, std::nullopt};
+        variableTyResolver[op.getResultName(i)] = {{resolver}, std::nullopt};
   }
 }
 
 void OpFormatParser::handleTypesMatchConstraint(
     StringMap<TypeResolutionInstance> &variableTyResolver, const Record &def) {
-  StringRef lhsName = def.getValueAsString("lhs");
-  StringRef rhsName = def.getValueAsString("rhs");
+  std::vector<StringRef> args = def.getValueAsListOfStrings("args");
+  StringRef target = def.getValueAsString("target");
   StringRef transformer = def.getValueAsString("transformer");
-  if (ConstArgument arg = findSeenArg(lhsName))
-    variableTyResolver[rhsName] = {arg, transformer};
+
+  SmallVector<ConstArgument, 1> resolutionArgs;
+  llvm::for_each(args, [&](StringRef arg) {
+    if (ConstArgument seenArg = findSeenArg(arg))
+      resolutionArgs.push_back(seenArg);
+  });
+  variableTyResolver[target] = {resolutionArgs, transformer};
----------------
zero9178 wrote:

```suggestion
  variableTyResolver[target] = {std::move(resolutionArgs), transformer};
```

https://github.com/llvm/llvm-project/pull/127517


More information about the Mlir-commits mailing list