[llvm-branch-commits] [flang] [mlir] [mlir][Transforms] Support 1:N mappings in `ConversionValueMapping` (PR #116524)
Markus Böck via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Dec 21 10:03:52 PST 2024
================
@@ -1192,51 +1256,28 @@ LogicalResult ConversionPatternRewriterImpl::remapValues(
});
return failure();
}
-
// If a type is converted to 0 types, there is nothing to do.
if (legalTypes.empty()) {
remapped.push_back({});
continue;
}
- if (legalTypes.size() != 1) {
- // TODO: This is a 1:N conversion. The conversion value mapping does not
- // store such materializations yet. If the types of the most recently
- // mapped values do not match, build a target materialization.
- ValueRange unpackedRange(unpacked);
- if (TypeRange(unpackedRange) == legalTypes) {
- remapped.push_back(std::move(unpacked));
- continue;
- }
-
- // Insert a target materialization if the current pattern expects
- // different legalized types.
- ValueRange targetMat = buildUnresolvedMaterialization(
- MaterializationKind::Target, computeInsertPoint(repl), operandLoc,
- /*valueToMap=*/Value(), /*inputs=*/unpacked,
- /*outputType=*/legalTypes, /*originalType=*/origType,
- currentTypeConverter);
- remapped.push_back(targetMat);
+ ValueVector repl = mapping.lookupOrDefault({operand}, legalTypes);
+ if (!repl.empty() && TypeRange(repl) == legalTypes) {
+ // Mapped values have the correct type or there is an existing
+ // materialization. Or the opreand is not mapped at all and has the
----------------
zero9178 wrote:
```suggestion
// materialization. Or the operand is not mapped at all and has the
```
https://github.com/llvm/llvm-project/pull/116524
More information about the llvm-branch-commits
mailing list