[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